数字视频基础实验
下述实验可在嵌入式LINUX操作系统下编译执行或者VDSP下编译运行。
1. 数字视频实际体验:CCD摄像头视频输入,经过video decoder/SAA7113后,输出标准的ITU 656 的D1 PAL制YUV 422数字视频到BLACKFIN的视频口(PPI),捕获其中一帧,保存为图片文件(.bmp或YUV格式)以便后续分析处理,并测试ACTIVE_FIELD等各种ITU 656视频输出模式。由此让学生从C代码的角度真实体会到前面介绍的数字视频的各种概念。
2. 130万像素的CMOS摄像头(OV7660)输出YUV 422或RGB的数字视频到BLACKFIN的视频口(PPI),并捕获为图片文件(.bmp或YUV格式)以便后续分析处理。
3. 进阶可考虑用jpeglib将BMP或者YUV图片压缩为.jpg文件,让学生动手实践测试体验多种图片格式的生成和转换
4. GUI图形输出到RGB的16位色TFT LCD,测试基本的GUI单元,画点、画线、画圆、矩形、显示位图等;
5. CCD或者CMOS摄像头输入的视频图像,经YUV转换为RGB色彩,实时输出到LCD显示
6. CCD或者CMOS摄像头输入的视频图像,经色彩空间转换,经过video encoder(CH7013)实时输出到电视(CVBS接口)
基于Blackfin多媒体应用处理器MCU部分的嵌入式LINUX操作系统软件培训实验课程
总体思路:
1、 LINUX操作和文件、目录、配置、编辑、编译、解压等入门基本操作
2、 开始进入开发阶段:
a) 嵌入式应用程序开发和调试技巧,Makefile等基本介绍
b) 嵌入式驱动程序介绍、开发和调试技巧
c) 动手实验巩固
3、 日后深入作项目等自学之路:驱动代码阅读技能强化训练,课后代码阅读作业和实
A) 嵌入式系统软硬件系统概述(4课时)
B) 实验课程设计
实验1:嵌入式LINUX下应用程序开发和调试技术入门(2课时理论+实践)
基本嵌入式C入门程序hello编译(自己按照模板写Makefile)
NFS mount执行和简单调试(printf)
实验3:嵌入式LINUX编译技巧和复杂应用程序移植技术(4课时)
尝试在LCD上显示hello,学习小型嵌入式gui代码编译错误解决和快速阅读嵌入式C代码并迅速模仿应用并执行
编译lissa程序,理解gcc对链接libc库的实现,并在通过编译后执行
编译pure-ftpd,解决一个实际的相对复杂的LINUX下应用程序的移植和编译错误解决,熟悉src/include/lib等的LINUX下程序代码目录的结构。
更新busybox,make menuconfig加入新的功能,例如tftp,通过NFS mount的方式在板子上进行测试。
参考论坛技术园地的帖子little app config-howto-v1.1.pdf,自己在板子上动手配置好pure-fptd做的FTP SERVER。
实验2:嵌入式远程控制技术 (1课时 理论+实践)
可作为课后作业,
*************关于应用程序的调试**********************************
实验4:嵌入式LINUX驱动程序开发和调试入门(3课时 理论+实践)
GPIO/PF驱动实验(1课时 理论+实践)
实践修改最基本的没有中断的GPIO驱动实验,体会手册里面英文的各个寄存器的各个bit是如何转换为C代码的,可另外实验将注册函数改为register_chrdev/mknod;还有可将ioctl更改为write。
读写外设芯片(DM9000)内部寄存器实验 (1课时 理论+实践)
实践测试带有完整的read/write函数的外设物理地址读写的驱动phyaddr_rw,并同时通过u-boot手工mw.w来写入实现
课后作业:静态和动态的以太网驱动实践,修改MAC地址从u-boot的env/MAC读取
实验6:TIMER精准定时驱动实验(1课时 理论+实践)
学习带中断处理的驱动代码。实践TIMER实验测试CPU对中断的响应能力,自己驱动芯片产生方波,深入体会C代码是如何驱动硬件管脚的。可作为课后作业,需要示波器
实验19:部分驱动代码阅读(file_operation+中断处理)
*************关于驱动程序的调试**********************************
rmmod/insmod/test
内核驱动的静态链接和MODULE形式(make modules生成独立的.ko模块)
配置内核,增删IDE 驱动;DM9000驱动切换
添加自己的驱动到内核的make menuconfig
修改Kconfig文件;
实验7:IIC(EEPROM)驱动实验(1课时 理论+实践)
IIC实验和代码阅读,进一步深入体会CPU手册里面的硬件时序及外设芯片的datasheet是如何转换为实实在在的C代码的,自己动手过一遍,感觉完全不同!Test_Iic与器件地址有关,用EEPROM就要看24lc04.pdf理解IIC器件物理地址(device address),对EDU则要看X1227的手册P11,0xae/af是EEPROM部分。
实验9:FLASH保存配置驱动实验(2课时 理论+实践)
FLASH时序的代码实践,参考我们提供的代码save-to-flash,或者实验指导书关于文件系统一章的代码。
再试试FLASH的erase_sector和write_word函数,当然了,你手工在ppcboot下用mw.w也可以实现。
这是个典型的把芯片datasheet变为C代码的实验例子。
我们用的是INTEL的FLASH 28F128J3A,芯片手册是:28F128J3A,28F640J3A,28F320J3A.pdf,基本操作的流程是附录C的Figure 16和Figure 14
你们自己把这两个FLASH操作的基本单元函数写出来在板子上实验一下。
擦除成功,就是FLASH的一个扇区的内容都变成0xFF了。
擦成FF后,再随便挑个地址写入一个0x1234这样的数值看看。
擦写都OK后,就说明实验成功了。
做点实用的东西,FLASH擦写是工作后任何一个嵌入式系统都要打交道的基本功,每个学生都必须非常熟悉,对FLASH操作做到心中有数。
杂项补充:
驱动代码阅读理解强化训练,技巧:有选择性阅读,入口点(file_operation),切忌通读。
(预布置作业: 触摸屏驱动和LCD的framebuffer驱动)LCD和触摸屏驱动代码阅读
如何在u-boot里面添加自己的命令
自己动手实践使用板子上的串口做串口通信,参考我们提供的文档。
参考书目
1. 《2006年度ADI大学生创新设计竞赛优秀论文选编》
http://www.china-pub.com/search/power_search/power_search.aspx?key1=ADI%B4%F3%D1%A7%C9%FA%B4%B4%D0%C2%C9%E8%BC%C6%BE%BA%C8%FC&pz=4
2. VDSP应用视频教程
http://my.analog.com/onlinetraining/Static/BOLDList.html
3. 《Embedded Media Processing》