Atmel SAM4L单片机之旅--1、利用循环延时来闪烁LED小灯

作者: 党国特派员
上传时间为: 2015-01-12 10:21 AM
2015-01-12
阅读:

拿到这个开发板有一段时间了,一直没有时间来做详细的测评,期间小菜也催问了几次,真是不好意思。终于有了时间来做这件事,于是打算写几篇,当然从最简单的开始,一步一步的深入,最后把整个开发板的所有模块都能一一做个尝试,分享给大家。

目前这块板子和芯片所能参考的只有英文手册,IDE可以使用Atmel Studio、IAR、Keil。网上有的教程主要以Atmel Studio、IAR为主,我们今天选择大家用的比较多的Keil + 寄存器,一来是因为Keil是ARM推的开发工具,二来是也尝试了用IAR,发现IAR的下载仿真速度慢的让人难以想像。至于Atmel Studio本人机器上没有,也懒得去再装一个再去了,还要去熟悉Atmel Software Framework,搞起来让人头大,还是寄存器更直接,更能了解MCU的设计思想和运做机制。

 废话不多说,来看今天的例子,

1、电路图

2、实现思路

PIO的引脚是复用的,但在这里我们直接使用PIO控制器控制引脚的电平就可以了。可以通过向PIO_ODERS、PIO_ODRC写入特定的值来直接控制引脚的电平。然后,通过让程序执行一个次数较长的空循环就可以实现延时功能。

3、Keil里创建项目

先择SAM4LC4C芯片

项目配置

4、新建文件输入下面的代码:

#include <sam4l.h>

#define PIOC GPIO->GPIO_PORT[2]

//延时函数
void delay(int num)
{
volatile int i = 0;
for(i=0;i<1024*num;i++);
}

int main()
{
/* 使能PA07引脚 */
PIOC.GPIO_GPERS = GPIO_PC07;
/* PA07输出驱动使能 */
PIOC.GPIO_ODERS = GPIO_PC07;
/* PA07上拉使能 */
PIOC.GPIO_PUERS = GPIO_PC07;

while(1)
{
/*PC07清0,输出低电平*/
PIOC.GPIO_OVRC = GPIO_PC07;
/* 延迟 */
delay(4);

/*PC07置1,输出高电平*/
PIOC.GPIO_OVRS = GPIO_PC07;
/* 延迟 */
delay(4);
}
return 0;
}

保存上面的代码为main.c,并把文件添加到项目中。编译并下载至开发板,小灯已经开始闪烁了。

下节:利用定时器来闪烁LED小灯

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示