查看: 3171|回复: 1

Atmel SAM4E Xplained Pro套件之PIO

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-14 15:27:52 | 显示全部楼层 |阅读模式
    分享到:
       很荣幸得到Atmel社区的Atmel SAM4EXplained Pro starter kit的套件,得到这么好的套件,当然不要浪费这么高大上的套件,今天我来分享下SAM4EPIO模块。这次我使用的编译环境是IAR,自己从AS 6.2的一个例程移植到IAR里,这是个带库的模板,里面有几个外设的驱动文件。还有这个模板方便在网上分享我自己写的源代码,这也是我自己建一个模板的初衷,因为官方的例程包很大,这是因为官方例程包里有针对多个芯片的例程,所以单个芯片的工程很难分离。所以我自己花了点时间自己建了一个带库的模板,这样大家就可以使用库或者寄存器的写法。
    通常我们学习每种MCU时,基本上都会学他的的GPIO功能。这里我要引用一下别人的的总结了:SAM4E芯片的GPIO都由并行输入、输出控制器(PIOParallel Input/Output Controller)来管理(在数据手册第31章(558页)有对PIO介绍)。所有的IO口都有好多种不同的输入输出模式,比如:上拉、下拉、施密特触发器输入、多驱动(开漏)、滤波、去抖动、输入改变中断。SAM4E具有PIOAPIOBPIOCPIODPIOE三个PIO控制器。
    下面就是PIO的框图:
    QQ截图20150107014755.png
    还有PIO涉及的寄存器:
    QQ截图20150106225631.png
    可以看出,PIO的寄存器很多,这也就验证了PIO强大的一个体现的很好证明。
    用到了以下这两个函数:
    pio_configure_pin(PIO_PD22_IDX,PIO_OUTPUT_1| PIO_DEFAULT);   
    pio_toggle_pin(PIO_PD22_IDX);      
    pio_configure_pin函数是设置管脚的类型以及状态。
    例如pio_configure_pin(PIO_PD22_IDX,PIO_OUTPUT_1 | PIO_DEFAULT);  就是把PIOD22设置成输出,无上下拉。
    pio_toggle_pin函数是翻转管脚电平的函数;
    例如pio_toggle_pin(PIO_PD22_IDX);就是每执行pio_toggle_pin(PIO_PD22_IDX)这个函数就会把PIOD22脚的电平翻转;
    现在我就来用库函数来点亮板子上的LED
    我们的步骤是:
    1)初始化时钟
    2)使能PIO外设的时钟
    3)设置PIO外设脚的类型
    4)输出电平控制LED的亮灭。
    下面的代码如下:
    IMG_20150106_232139.jpg
    刚才用Atmel的库函数点亮了Atmel SAM4E Xplained Pro上的小黄灯,现在我用寄存器点亮套件上的小黄灯。
    这次用到3个寄存器即可,分别是:PIO_ODER,PIO_PERPIO_CODE
    如下图手册的截图中看就可以直观看到这3个寄存器的作用:
    QQ截图20150107010310.png
    PIO_PERPIO使能寄存器,对它写0没有影响,写1就是使能PIO外设,这个是只写寄存器,如下截图的说明:
    QQ截图20150107011156.png
    PIO_ODEPIO输出使能寄存器,对他写0没有影响,写1就是使能PIO输出,同样也是只写寄存器,如手册的截图:
    QQ截图20150107011304.png
    最后一个PIO_CODE是个清零输出数据寄存器,就是把PIO的输出为低电平,对他写0没有影响,写1就是使PIO输出低电平,同样也是只写寄存器,如手册的截图:
    QQ截图20150107011545.png
    还有套件的LED0是接的是PIOD22脚,如原理图的截图:
    QQ截图20150107010010.png
    QQ截图20150107010112.png
    所以PIOD22输出低电平即可使LED0亮了。
    以下就是我写的代码:
    1. int main(void)
    2. {
    3.         
    4.             sysclk_init();                                                          //初始化时钟
    5.         
    6.         
    7.         REG_PIOD_PER |= (1<<22);           //设置PIOD22脚位输出,无上下拉
    8.         REG_PIOD_OER |= (1<<22);

    9.          
    10.         while(1)
    11.         {
    12.                                    //翻转PIOD22脚的电平
    13.                   REG_PIOD_CODR =1 << 22;  
    14.         }
    15. }
    复制代码
    小黄灯再次亮了起来
    QQ截图20150114152527.png
    附上的工程:
    PIO.rar (1.1 MB, 下载次数: 1)
    QQ截图20150106225827.png
    QQ截图20150106233640.png
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-5-5 08:41
  • 签到天数: 57 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2015-1-19 13:29:24 | 显示全部楼层
    LCD+2片SRAM,比ST强多了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-23 06:43 , Processed in 0.133152 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.