原创 ColdFire 32位微控制器学习系列一----GPIO

2010-2-22 20:38 1737 7 7 分类: MCU/ 嵌入式

ColdFire 32位微控制器学习系列一----GPIO



GPIO不同于一般单片机的I/O口,它的全名是General
Perpose I/O Module
,所不同的就是,它是普通意义上的I/O口。一般单片机也有复用的I/O口,可是也有很多引脚不能够复用,比如中断引脚等。而GPIO的含义就是,所有的引脚都可以当I/O口来使用,当然一般还是除了电源、振荡器的引脚,当然在ColdFire中,BDM的引脚也不可以当作I/O口使用。



ColdFire中,I/O口的命名与其他单片机也不太相同,是用两个字母命名的,除了会给记忆造成点麻烦外,
也没有其他什么不好。



GPIO模块包含必要的寄存器:



1、输出寄存器PORTn



输出的数据需要写到这个寄存器,由于GPIO每个I/O口包含的位数不一定相同,所以I/O口对应的寄存器不一定是8位都使用的。



点击看大图



2、数据方向寄存器DDRn



这个很熟悉了,需要初始化为使用的数据传输方向。



3、引脚数据设置寄存器SETn



可以设置引脚状态,并反映其状态。



4、输出数据清除寄存器CLRn



可以按位清除输出数据。



5、复用功能寄存器PnPAR



可以设置当前I/O口是使用GPIO功能还是使用其复用的特殊功能。



6、线或寄存器PWOR



设置线或,即不使用拉电阻。



7、驱动能力寄存器



可以设置驱动能力,2mA或者10mA



 



可以看到,CFGPIO9S12单片机的I/O口倒也没有很大的区别,无非就是设置数据方向并且读写I/O口,只要复用功能寄存器设置合理的话,可以任意使用其片上资源。但是值得注意的是,CFGPIO模块没有中断功能,而9S12有,比如说9S12J口和H口都可以使用中断,为什么CF没有呢,因为CF有单独的中断控制器,比如MCF52235,它可以接16个中断源。当然这16个引脚也是GPIO的引脚。



下面给个例子程序,非常简单。例子实现对应I/O连接发光二极管的闪烁。



void delay()



{



         unsigned
long i=200000;



         while(i--)



         {



                  



         }



}



 



 



int main()



{



         //printf("Hello
World in C\n\r");



        



         //fflush(stdout);



         MCF_GPIO_DDRTC=0xff;



         while(1)



         {



                   MCF_GPIO_PORTTC=0x55;



                   delay();



                   MCF_GPIO_PORTTC=0xaa;



                   delay();



         }//
Idle



        



         return
0;



}





PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条