热度 204
2015-1-16 10:06
1372 次阅读|
0 个评论
本人 研究 SAM4L Xplained Pro starter kit 的库,发现官方的库好庞大,但如果调用官方的 API 函数,上手比较快。往后我会发布一些深入到寄存器的操作和自己建工程模板的例程。现在先易后难。我先刚修改官方的 GPIO 例程,把套件上的 LED 先点亮。用到的函数不多。现在直奔主题吧。 我这次使用的开发环境是 IAR 6.7 ,没有这个编译器的伙伴们,可以带官网下载,记住要下载 ARM 版本的,这个原因我就不多说了,前面我也有说到。 官方的库比较庞大,那么我们怎么利用库来快速上手呢。 首先我打开工程时的目录结构如下图: 我们的 main 函数,实现功能的 c 文件在如下图的画着黄色方框的位置: 点开这个 gpio_example.c 的文件,然后我们就可以来修改这个例程了。 首先我把例程除了 sysclk_init(); 函数之外的都屏蔽掉了。然后我们自己就可以自己添加 API 函数实现相应的功能了。这次我实现的功能是点亮板上的 LED 。在点亮 LED 是我们需要用到两个函数: ioport_set_pin_dir(xx,xx); ioport_set_pin_level(xx,xx); ioport_set_pin_dir(xx,xx); 这个函数的功能一看名字就大概知道是干啥的了,就是设置某一个管脚的方向, xx 是要填进去的参数,这些函数都是带参数的,有传入一个形参进去的,如果玩过 st 的 stm32 库的小伙伴就会很熟悉了。第一个参数填的的某一个管脚。第二个参数是管脚的方向。如: ioport_set_pin_dir(PIN_PC07, IOPORT_DIR_OUTPUT); 就是把 PORTC 的第 7 个脚设置位输出。 PIN_PC07 可以在 pio_sam4lc4c.h 这个头文件找到定义,如下图: 第二个参数是管脚的方向,他有两个参数: 填 IOPORT_DIR_INPUT 是代表输入,填 IOPORT_DIR_OUTPUT 是代表输出。 其他管脚的初始化方向也是这样做的。 初始化管脚函数的底层函数是。我把他贴上来吧: 其实就是对 ODER , STER 这两个寄存器的操作。如果想设置输出,就对寄存器 ODER 置一,对 STER 清零,像 GPIO_ODERX , X 等于 S 时是代表置一, X 等于 C 时代表清零。这个可以手册可以知道,如图: ioport_set_pin_level(xx, xx); 这个函数是设置某个 IO 口的电平状态。 同样这个函数也是带两个参数输入的。 第一个参数是选择管脚,第二个参数是设置 IO 口的电平状态。如: ioport_set_pin_level(PIN_PC07, IOPORT_PIN_LEVEL_LOW); 就是设置 PORTC 的第 7 个脚低电平。 在主函数我添加了 3 个函数,就可以实现点亮 LED 的功能了。因为 LED 是接 PORTC07 脚的,从评估板的原理图可以看到,如下图: 代码如下: int main(void) { /* Initialize the SAM system */ sysclk_init(); ioport_set_pin_dir(PIN_PC07, IOPORT_DIR_OUTPUT); ioport_set_pin_level(PIN_PC07, IOPORT_PIN_LEVEL_LOW); while (1) { } } 下面,贴上测试图: 黄色的灯点亮了