日志档案

发表于 2007-8-21 16:49:55

2

标签: coldfire  32位  GPIO  单片机  

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

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;

}

系统分类: 单片机   |   用户分类: Coldfire   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1026)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • yoyowind

    2007-8-21 16:54:40

    可以说GPIO模块比较简单,就写了那么几个字,下一个模块估计要等段时间了,最近要去外地。
    其实也是一边学一边写,欢迎指出错误。

  • 至爱森林

    2007-8-24 14:25:35

    写的不错,我也想学习ColdFire 32位微控制器

    不知能不能留一个联系方式?可以的话请和我联系

    我的邮箱:chocolate61@163.com

    QQ:41034347