Atmel SAM4E Xplained Pro之库和寄存器操作PIO
[复制链接]
今天我来分享下SAM4E 的PIO 模块。这次我使用的编译环境是IAR ,自己从AS 6.2 的一个例程移植到IAR 里,这是个带库的模板,里面有几个外设的驱动文件。还有这个模板方便在网上分享我自己写的源代码,这也是我自己建一个模板的初衷,因为官方的例程包很大,这是因为官方例程包里有针对多个芯片的例程,所以单个芯片的工程很难分离。所以我自己花了点时间自己建了一个带库的模板,这样大家就可以使用库或者寄存器的写法。 通常我们学习每种MCU时,基本上都会学他的的GPIO功能。这里我要引用一下别人的的总结了:SAM4E芯片的GPIO都由并行输入、输出控制器(PIO:Parallel Input/Output Controller)来管理(在数据手册第31章(558页)有对PIO介绍)。所有的IO口都有好多种不同的输入输出模式,比如:上拉、下拉、施密特触发器输入、多驱动(开漏)、滤波、去抖动、输入改变中断。SAM4E具有PIOA、PIOB、PIOC、PIOD、PIOE三个PIO控制器。 下面就是PIO的框图: 还有PIO涉及的寄存器: 可以看出,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的亮灭。
下面的代码如下: - int main(void)
- {
- sysclk_init(); //初始化时钟
- arch_ioport_init(); //使能PIO外设的时钟
- pio_configure_pin(PIO_PD22_IDX,PIO_OUTPUT_1 | PIO_DEFAULT); //设置PIOD22脚位输出,无上下拉
- while(1)
- {
- pio_toggle_pin(PIO_PD22_IDX); //翻转PIOD22脚的电平
- }
- }
复制代码上面用了Atmel的库函数点亮了Atmel SAM4E Xplained Pro上的小黄灯,现在我用寄存器点亮套件上的小黄灯。 这次用到3个寄存器即可,分别是:PIO_ODER,PIO_PER和PIO_CODE
如下图手册的截图中看就可以直观看到这3个寄存器的作用: PIO_PER是PIO使能寄存器,对它写0没有影响,写1就是使能PIO外设,这个是只写寄存器,如下截图的说明: PIO_ODE是PIO输出使能寄存器,对他写0没有影响,写1就是使能PIO输出,同样也是只写寄存器,如手册的截图: 最后一个PIO_CODE是个清零输出数据寄存器,就是把PIO的输出为低电平,对他写0没有影响,写1就是使PIO输出低电平,同样也是只写寄存器,如手册的截图: 还有套件的LED0是接的是PIOD22脚,如原理图的截图: 所以PIOD22输出低电平即可使LED0亮了。
以下就是我写的代码: - int main(void)
- {
-
- sysclk_init(); //初始化时钟
-
-
- REG_PIOD_PER |= (1<<22);
- REG_PIOD_OER |= (1<<22);
-
- while(1)
- {
-
- REG_PIOD_CODR =1 << 22;
- }
- }
复制代码小黄灯再次亮了起来 附上源代码:
PIO_Regster.rar
(1.1 MB, 下载次数: 17)
|