新闻  |   论坛  |   博客  |   在线研讨会
ColdFire 32位微控制器学习系列(一)(ZT)
moran | 2008-08-01 17:29:49    阅读:1610   发布文章

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位都使用的。

<!--[if !vml]-->点击看大图
<!--[endif]-->

2、数据方向寄存器DDRn

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

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

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

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

可以按位清除输出数据。

5、复用功能寄存器PnPAR

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

6、线或寄存器PWOR

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

7、驱动能力寄存器

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

 

可以看到,CF的GPIO和9S12单片机的I/O口倒也没有很大的区别,无非就是设置数据方向并且读写I/O口,只要复用功能寄存器设置合理的话,可以任意使用其片上资源。但是值得注意的是,CF的GPIO模块没有中断功能,而9S12有,比如说9S12的J口和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;

}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客