一、准备工作:

     将上一节搭建的工程模板复制一份,命名为“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. 常用的工具GCC GDB Make Makefile

    系统调用系统调用是操作系统提供给外部应用程序的一组特殊的接口.应用程序通过这组特殊“接口”来获得操作系统内核提供的服务.在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成, 这是因为这些函数 ...

  2. jQuery DataTables 插件使用笔记

    初始化 在页面中 <!DOCTYPE html> <html> <head> <link rel="stylesheet" type=&q ...

  3. HTML实体

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 分享自己动手弄的基于Rime的新世纪五笔输入法码表

    实验室新搞了一台iMac,没有支持新世纪的码表的中文输入法啊.搜索半天大家推荐用Rime(鼠须管)来挂接新世纪码表.不知道还有没有其它支持外挂码表的Mac版输入法,暂时只有搞这个了.看了一下别人已经做 ...

  5. source insight添加汇编文件.s

    (1) 做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,默认只加了.inc和.asm后缀的, ...

  6. 第 2 章 代理模式【Proxy Pattern】

    第 2 章 代理模式[Proxy Pattern] 以下内容出自:24种设计模式介绍与6大设计原则.pdf 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代 ...

  7. python JSON处理

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等. 反序列化:就是从存储区域(JSON,XML)读取反序列化对象的 ...

  8. C#中数据库连接的配置文件

    在C#2010中,如何保存和访问数据库的连接字符串呢? 在Winform下要新增App.config文件,在Asp.net下要新增web.config文件. 1.打开配置文件添加相关代码后如下即可: ...

  9. 不可忽视的 .NET 应用5大性能问题

    [编者按]本文系国内 ITOM 管理平台 OneAPM 翻译自 Steven Haines 的文章.Steven Haines 是 Pisksel 技术架构师,目前在奥兰多迪士尼乐园工作.他是在线教育 ...

  10. 【HDU 5909】 Tree Cutting (树形依赖型DP+点分治)

    Tree Cutting Problem Description Byteasar has a tree T with n vertices conveniently labeled with 1,2 ...