智能车学习知识总结(五)

最重要的过程便是程序的调试了。断点的设置是关键,位置设置合适的断点可以帮你理清程序流程,找出错误。如下我在main.c里面设置了3个断点,在isr.c里面设置了2个,都是关键的位置。按顺序分别记为1,2,3,4,5号断点。 

图一,main.c里的断点

 图二,isr.c里的断点

 

程序从上电启动开始运行crt0.s到进入main.c这是一个固定的流程,然后运行到1号断点,停止。随后将进入摄像头的初始化和设置语句。

1号断点到2号断点之间是完成ov7620初始化和工作模式设置的过程。在此过程中由于没有开中断(摄像头都没设置好当然不能开),任何中断都进不来,第二条程序线是不存在的。所以2号断点是一个关键点,从它开始程序开始变成双线执行。程序会随时被中断(PCLK触发)而进入到4号断点。(F10F11就知道)执行到DMA_EN(DMA_CH0)的时候,灰度值数据开始从E端口的低8位((void *)&PTE_BYTE0_IN)传输到内存中的IMG_BUFF(通过DMA_CH0),这句代码在ov7620.c中,是OV7620_init中的一个语句(F11,进去看看。也就是说怎么传早就设置好了,现在只要使能通道就可以*^_^*

DMA_PORTx2BUFF_Init(DMA_CH0,(void *)&PTE_BYTE0_IN, IMG_BUFF, PCLK, DMA_BYTE1, 320 , DMA_rising_keepon);

5号断点是采完一幅图像的判断点,并将标志位IMG_finsh1,这时当程序再运行到3号断点时就会进入下面的图像处理模块。

这里的keepon保证了传输320字节(一行)后下次传输的地址是IMG_BUFF+320,而不会恢复成IMG_BUFF。即下一次数据会存放在第二行。它keepon的是结束的地址而不是最初的地址。

昨天看到陈正冲一句话:键盘上F10F11要锃亮铮亮。与大家共勉。

顺便纠正一个野火的错误(不知道改了没有):

CPSIE i是开中断而不是关,CPSID i才是关。(enable啊!怎么会是关?)野火书和库的注释在这一点都是错的。官方写的arm_cm4.h不会错,可以查看。

官方arm_cm4.h

永不止步步 发表于11-13 15:14 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345377个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号