从朋友那里拿了块飞凌OK6410的开发板,打算业余时间学习学习嵌入式方面的知识。
刚拿到开发板时里面有所谓的国嵌的学习光盘,花了几天时间浏览了下前面关于裸机ARM的部分,感觉真的很烂。很多东西都没有讲清楚,资料也是乱七八糟的,尤其是关于定时器,中断方面的。个人感觉嵌入式初学都最关键的就是学习定时器与中断,因为中断与定时器是经常用到的东西。而国嵌光盘中的教程,代码都是简单的要死,怎么看上去都像是赶工之作。
我学习了教程中一开始的Linux体验,进程相关知识的学习,但这个只跟后面的有关,我想先学习在裸机上仿真。因为我基础可能没有那么好,操作系统方面知识还是不到位。
一开始的时候真的还是非常有积极性的。想一下子把这些学好,但后来我慢慢地发现没有我想像的那么容易。最开始的点灯还是挺好的,但到了中断这一块就嗝屁了。我觉得有两个原因:1、对于嵌入式arm裸机了解还不够,而且是一个人瞎搞,而且我的工作是软件开发,没有太多精力时间去钻研这方面的东西。。2、我是按照教程来的,教程在这方面写得不是很清楚,它可能更注重后面的linux驱动核心开发。
为了了解这中断与定时器,我在网上搜了相关文章,我发现这方面的资料太少了,在官方论坛里也几乎没有。在今天,我花了一天时间终于是把定时器,中断搞定了。在我之前搜到的相关资料中,有很多的方法是将中断的地址写在0x00,百度搜索里几乎整个版面的内容都是这个方法,这个方法在我这个还没有入门的菜鸟来说还是有点困难的,好像这个是类似单片机的做法吧(本人没有学过单片机,只是推断)。今天,我花了一天的时间,终于在一个博客里找到了一个更简单的方法。
原来,s3c6410芯片有一个专门的协处理器可以处理中断程序,而不用自己去写几十行的汇编代码。这个只要6行汇编代码就可以了,代码如下:
mrc p15,0,r0,c1,c0,0
orr r0,r0,#(1 << 24)
mcr p15,0,r0,c1,c0,0
;允许中断,开启CPU总中断
MRS R0,CPSR ;将CPSR保存至R0
BIC R0,R0,#0x80 ;R0 = R0 & 0x80
MSR CPSR_c, R0 ;将R0写回CPSR
只要将这段代码在main入口函数之前执行就可以了,其他的就可以交给协处理器了。