学习M0已经两周了,从开始接触新唐的cortex—M0到现在,对它的整体架构有了一定的认识,但是还是不足,自己的一点心得很成果,与大家一起分享!
这次的项目是红外模块,即实现捕捉红外信号,解码,发射红外信号,让开发板学习红外信号!天下大事,必作于细,学习不是一朝一夕能够解决的事情,所以第一周的任务就是熟悉新唐Cortex—M051这个开发板,我手上的是最小系统,只有一个M0的内核和引脚,其它什么都没有。
对一开始学习嵌入式的时候,对一些概念觉得很奇怪,比如设置晶振,下降沿触发,其实嵌入式就是一个微小型的计算机,而晶振就和我们的CPU一样,要发出信号让器件进行工作,通俗一点,晶振就像一个动力源,没有动力,机器怎么工作呢?而晶振发出的就是一个时段高电平,一个时段低电平,我们常说CPU是3.0GHZ的,它的意思就是CPU在1秒内发出一个时段高电平,一个时段低电平,这个组合持续3G(即三乘以十的9次方)下,但是嵌入式里面的CPU达不到这个速度,我本次用的晶振是12MHZ的(十二乘以十的六次方),你可以想象一下,速度是怎么样的!
言归正传,外部中断根据例子程序很好改,定时器中断根据例程也可以实现,我用外部中断是为了捕获红外信号,如果用查询的话效率太低,大家懂的,而定时器的作用就是实现延迟,如果用软件延迟(即套上3,4个for循环),效率低而且准确度不高。但是我把外部中断和定时器中断和到一起就出问题了,在外部中断的服务程序里面,并不执行定时器中断...这个开发板是可以中断嵌套的,而我疏忽的地方在哪里呢?
是两个中断的优先级,在寄存器里面,默认所有中断的优先级都是0(即最高优先级),如果要实现中断嵌套,必须为要嵌套的中断制定优先级!
用了一周时间,总算把解码算法搞出来,并且调试对了,并且认识了我们实验室的师兄师姐们,他们人都很好,很容易相处!
|