Atmel SAM4S Xplained Pro starter kit之PIO
[复制链接]
今天我来分享下SAM4S Xplained Pro starter kit套件中的SAM4S的PIO模块。这次我使用的编译环境是IAR,自己从AS 6.2的一个例程移植到IAR里,这是个带库的模板,里面有几个外设的驱动文件。还有这个模板方便在网上分享我自己写的源代码,这也是我自己建一个模板的初衷,因为官方的例程包很大,这是因为官方例程包里有针对多个芯片的例程,所以单个芯片的工程很难分离。所以我自己花了点时间自己建了一个带库的模板,这样大家就可以使用库或者寄存器的写法。SAM4S的PIO跟SAM4E结构是一样的。 通常我们学习每种MCU时,基本上都会学他的的GPIO功能。这里我要引用一下别人的的总结了:SAM4S芯片的GPIO都由并行输入、输出控制器(PIO:Parallel Input/Output Controller)来管理。所有的IO口都有好多种不同的输入输出模式,比如:上拉、下拉、施密特触发器输入、多驱动(开漏)、滤波、去抖动、输入改变中断。SAMS32C具有PIOA、PIOB、PIOC三个PIO控制器。 下面就是PIO的框图: 还有PIO涉及的寄存器: 可以看出,PIO的寄存器很多,这也就验证了PIO强大的一个体现的很好证明。
接下来我就是用库函数的来实现对PIO的控制,我这里用到了GPIO的函数,这里本质上是对PIO的操作,如下图的gpio.h文件截图的内容: 现在我就来用库函数来点亮板子上的LED。 我们的步骤是: (1)初始化时钟 (2)使能PIO外设的时钟 (3)设置PIO外设脚的类型 (4)输出电平控制LED的亮灭。
下面的代码如下: - int main(void)
- {
- sysclk_init(); //初始化时钟
- arch_ioport_init(); //使能PIO外设的时钟
- gpio_configure_pin(PIO_PC23_IDX,PIO_OUTPUT_1 | PIO_DEFAULT); //设置PIOC23脚位输出
- while(1)
- {
- gpio_toggle_pin(PIO_PC23_IDX); //翻转PIOC23脚的电平
- }
- }
复制代码测试图: 寄存器版的写法: 寄存器我就不多说了,在前面的SAM4E也有说,附上链接: https://bbs.eeworld.com.cn/thread-454006-1-1.html 源代码: - int main(void)
- {
- sysclk_init(); //初始化时钟
- //arch_ioport_init(); //使能PIO外设的时钟
- //gpio_configure_pin(PIO_PC23_IDX,PIO_OUTPUT_1| PIO_DEFAULT); //设置PIOC23脚位输出
- REG_PIOC_PER |= (1<<23);
- REG_PIOC_OER |= (1<<23);
- while(1)
- {
- REG_PIOC_CODR =1 << 23;
-
- }
- }
复制代码
附上我的模板:
|