在学校只学了51,搞懂点皮毛就自以为可以了,也没参加过什么竞赛,毕设弄了两个多月才憋出了一百多行C51代码,马马虎虎通过了。结果出来才发现单片机早已经是arm时代,看了网上各种arm教程眼都花了,这边找一点那边下一点,也没看出个所以然,不过能确定的是要想发展下去,arm是非学不可了,上班之余,请教了领导,要了一些公司现用的lpc2364的资料,自己慢慢搞吧,不求一日千里,但求每天都在进步……
不费话了,下面说说调试GPIO的过程吧……
首先就是启动代码和一些必须的外设初始化配置代码,都是领导给的现成的,比较复杂,作为新手的我听了领导的建议直接先跳了过去……
arm7的IO控制比51要复杂,每个port端口(port0—port4)都是32位的,基本上每个脚都有复用,默认下是配置成GPIO的,也就是用PINSEL寄存器来控制复用功能的选择,其中,两个PINSEL寄存器用来决定一个port端口32个位的功能选择,比如:PINSEL0和PINSEL1决定着port0端口每个位的功能选择。
如果要将port0全部配置位gpio那么配置代码就该是:
PINSEL0=0x00000000;
PINSEL1=0x00000000;
如果要配置具体的端口号,只需要配置对应的位就行了,例如:将0.2和P0.3配置成uart,代码就是:
PINSEL0=0x00000050; 十六进制的5对应二进制的0101
其次就是PINMODE寄存器,用来控制每个位的片内上拉、下拉电阻的,这个寄存器我没配置,具体参考我后面附上的pdf和代码;
往下就是IODIR、IOSET和IOCLR寄存器的配置,具体功能参考pdf,其中IOSET和IOCLR寄存器都是写1有效哦,这一点跟51是不一样的。
要用GPIO点亮一个LED,基本上上面提到的寄存器配置好就够了。
对于IOPIN寄存器的用法,用上面的IOSET和IOCLR只能是写1有效,但如果要使0、1同时有效,而忽略这两个寄存器配置,只写IOPIN寄存器就行了,具体代码参考我附上的文件
以上所说的都是慢速GPIO的操作,lpc2364还有一种快速的GPIO操作,实现高速访问物理端口,这种模式下还可以通过半字和单字节操作GPIO,具体寄存器可参考pdf。
需要知道的是,port2、3、4只可做快速gpio来用,port0、1即可用作慢速GPIO也可用作快速的,如果作为快速GPIO来用,需要将SCS寄存器bit0配置成1来时能快速GPIO port0、1,具体代码参考我附上的文件
作为快速GPIO时,FIODIR、FIOSET、FIOCLR、FIOPIN寄存器配置同慢速时一样,其中FIOMASK寄存器比较特殊,它是用来在快速GPIO中屏蔽不需要配置的位,具体操作参考附上代码。
有不对的地方欢迎大神们指正,作为新手期待高手的指导……
644398774_263592779 2013-11-15 00:32
hyycm0813_365022667 2013-11-6 21:15
用户467123 2013-11-4 21:46