一、准备工作:

     将上一节搭建的工程模板复制一份,命名为“1.blink”,这作为我们开发的第一个程序。

二、程序编写:

     板子上只有一个可控制的LED,就是LED0,在按键的旁边。打开原理图,可以看到LED的电路如下图:

通过原理图可以看出,LED和MCU的PB14相连接,当PB14输出低电平的时候,LED就会被点亮,为高电平的时候被熄灭。

下面开始编写LED驱动程序,首先在“Drivers”文件夹创建一个“drv_led.c”和“drv_led.h”文件,并加入到工程的“Drivers”分组下,在drv_led.c中编写led驱动程序,如下:

#include "drv_led.h"

void led_hw_init(void)

{

/*禁止外设管理控制寄存器(PMC)写保护*/

  PMC->PMC_WPMR = 0x504D4300;

  /*使能PIOB时钟*/

  PMC->PMC_PCER0 = (1UL << ID_PIOB ); 

/*使能外设管理控制寄存器(PMC)写保护*/

  PMC->PMC_WPMR = 0x504D4301; 

/*使能LED管脚*/

PIOB->PIO_PER|=(0x01<<LED0_PIN);

/*使能LED管脚输出*/

PIOB->PIO_OER|=(0x01<<LED0_PIN);

/*设置LED输出,即LED管脚为高电平*/

PIOB->PIO_SODR|=(0x01<<LED0_PIN);

}

    这里就写一个函数体,里面放置led的初始化代码,首先是要去开启PIOB的时钟,PMC中的PMC_PCER0是控制各种外设时钟的,而且这个寄存器是被写保护的,在写之前,需要禁止写保护,这样写入数据才有效,给对应PIOB的ID位置1就算是开启了PIOB的时钟。讲到这里,也许有人注意到上一节搭建工程模板的时候这个没开启怎么就能成功点亮LED呢?是的,上次纯属侥幸。应该是芯片默认是开启这个PIOB时钟的,但对于我们编写驱动来说,这个步骤还是不要少的好,因为有可能再次之前这个别其他程序关掉了。

接下来是使能PIOB14管脚的GPIO功能,通过PIOB的PIO_PER寄存器去使能,对应的还有PIO_PDR是失能GPIO功能。使能了PIOB14的GPIO功能后,还要使能它的输出功能,接着就可以用过PIO_SODR和PIO_CODR去控制输出低电平还是高电平了。

在drv_led.h中主要是初始化函数的声明好LED控制相关的宏,如下:

#ifndef __DRV_LED_H

#define __DRV_LED_H

#include "sam4n.h"

#define LED0_PIN   14

#define led_hw_on() PIOB->PIO_CODR=(0x01UL<<LED0_PIN)

#define led_hw_off() PIOB->PIO_SODR=(0x01UL<<LED0_PIN)

void led_hw_init(void);

#endif

主要是防重复包含和LED控制的两个宏定义,接下来在main.c中程序如下:

int main(void)

{

led_hw_init();

while(1){

led_hw_on();

delay(300);

led_hw_off();

delay(300);

}

}

主要是先初始化led,然后就可以控制led的亮和灭了。效果我就不说了,就是简单的一亮一灭功能。主要是先熟悉一下SAM4N的GPIO是怎么驱动的。

[SAM4N学习笔记]LED点灯程序的更多相关文章

  1. [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

    作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...

  2. 微信小程序学习笔记一 小程序介绍 & 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  3. linux学习笔记:vim程序编辑器—vim的使用

    注:以下是学习<鸟哥的linux私房菜>(第三版)的学习笔记,纯属个人学习记录. 2018-11-19 一.学习vim的原因 很多软件的编辑接口都会主动调用vi 二.vim的使用 (1)v ...

  4. Arduino学习笔记二:修改LED点灯程序

    看了开源社区的LED控制程序,开始上手代码编写,修改,下载以及调试,原文地址:http://www.arduino.cn/thread-1072-1-1.html,这个帖子写的比较通俗易懂. 自己移植 ...

  5. [SAM4N学习笔记]按键程序(查询方式)

    一.准备工作:      将上一节搭建的工程复制一份,命名为"5.key scanf".这一节主要讲如何使用SAM4N的GPIO输入功能,实现按键的输入. 二.程序编写:      ...

  6. [SAM4N学习笔记]按键程序(中断方式)

    一.准备工作:      将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...

  7. [SAM4N学习笔记]SAM4N工程模板搭建

    一.需要安装的软件: 因为笔者是使用MDK-ARM开发的版本是4.72,所以需要安装这个工具,具体在哪里下载自行放狗或问度娘.除了这个重要工具以为,还需要安装Atmel官方的Atmel Studio, ...

  8. [SAM4N学习笔记]UART的使用

    一.准备工作:      将上一节搭建的工程复制一份,命名为"3.uart".这一节主要讲如何使用SAM4N的UART功能,实现串口的收发. 二.程序编写: 细心看数据手册的朋友也 ...

  9. SAS学习笔记37 宏程序中parmbuff选项

    该选项用于指定宏可以接受可变参数列表,而且参数值保存在SYSPBUFF宏变量中.parmbuff的参数价值,其实就是每次执行宏程序时,可以指定不同数量的参数值,这些宏参数被保存在&syspbu ...

随机推荐

  1. 第5章标准I/O库总结

    1 fwide函数试图设置流的定向(流的定向决定了读写单字节还是多字节字符) int fwide(FILE *fp,int mode) 宽定向返回正值,字节定向返回负值,为定向返回0 已定向流不会改变 ...

  2. discuz注册 内部错误

    ucenter整合后,在论坛注册时出现 内部错误,无法显示,这是因为ucenter中,某个appid没写入! 可以把ucenter安装包下的utilities/checkappid.php,复制到uc ...

  3. 用javascript操作xml(三)关于Jquery的html()不兼容IE的解决办法

    当 $("#xxx").html(data); 不兼容,方法替换为 document.getElementById("xxx").innerHTML=data;

  4. 限制apache错误日志大小

    ①配置错误日志 在http.conf配置: ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/%Y_%m_%d_error_log  ...

  5. Ubuntu 13.10 PHP 5.5.x mcrypt missing – Fatal Error: Undefined function mcrypt_encrypt()!

    [原文]http://www.tuicool.com/articles/goto?id=myM7veR I had updgraded my Ubuntu from 13.04 to 13.10 la ...

  6. 整理 iOS 9 适配中出现的坑(图文)

    作者:董铂然 授权本站转载. 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iO ...

  7. ios开发之C语言第4天

    自增和自减运算 自增运算符 ++ 自增表达式 1>.前自增表达式.     int num = 1;     ++num; 2>.后自增表达式     int num = 1;     n ...

  8. nvarchar类型自动增长

    ,Col AS 'XH' + RIGHT('0000' + RTRIM(ID),4)

  9. 关于多域名EXCHANGE如何设置PTR的问题

    找了很多网页, 有效的是MX可以设置不同的域名,但PTR只设置一个即可... 如果设置为一个IP为两个PTR,则在进行测试时,会发生DNS ROBBINS,即一次找这个,一次找那个. 切记. .... ...

  10. 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1442  Solved: 552 Description ...