电路原理图:

如何点亮一个LED?

通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了。若要将LED熄灭只需取消高电平输出。

如何使三级管基极获得一个高电平?

控制三极管基极的其实是exynos4412的一个引脚(忽略具体是怎么连接的),因此我们要做的就是:

  1. 配置相关寄存器使引脚变为输出功能(这里配置为输出功能 0x1)
  2. 配置上下拉(若需要)
  3. 操作寄存器改变引脚电平变化
  4. 配置带负载能力(若需要)

相关寄存器

配置引脚功能  

获取或设置引脚状态

 配置引脚内部上下拉

配置带负载能力

一个简单流水灯的实现:

#include "exynos_4412.h"

/* LED点亮、熄灭以及状态反转操作 */
#define LED_ON(LED_x) ( *(LED_x.port) |= (1 << LED_x.pin) )
#define LED_OFF(LED_x) ( *(LED_x.port) &= (~(1 << LED_x.pin)) )
#define LED_REV(LED_x) ( *(LED_x.port) ^= (1 << LED_x.pin) ) /* 存放一个LED的端口信息以及引脚信息 */
typedef struct
{
unsigned int *port; /* LED端口状态寄存器地址 */
int pin; /* 端口中的第几pin */ }led_t; /* 定义并初始化4个LED,方便接下来操作 */
led_t LED_2 = {(unsigned int *)0x11000C44, }; /*GPX2DAT, bit[7]*/
led_t LED_3 = {(unsigned int *)0x11000C24, }; /*GPX0DAT, bit[0]*/
led_t LED_4 = {(unsigned int *)0x114001E4, }; /*GPF3DAT, bit[4]*/
led_t LED_5 = {(unsigned int *)0x114001E4, }; /*GPF3DAT, bit[5]*/ /* 简单延时函数 */
void delay_ms(unsigned int time); int main()
{
/*配置引脚作为输出*/
GPX2.CON = GPX2.CON & ~(0xf << ) | (0x1 << );
GPX1.CON = GPX1.CON & ~0xf | 0x1;
GPF3.CON = GPF3.CON & ~(0xff << ) | (0x11 << ); /*实现简单流水灯*/
while()
{
LED_ON(LED_2);
LED_OFF(LED_3);
LED_OFF(LED_4);
LED_OFF(LED_5);
delay_ms(); LED_OFF(LED_2);
LED_ON(LED_3);
LED_OFF(LED_4);
LED_OFF(LED_5);
delay_ms(); LED_OFF(LED_2);
LED_OFF(LED_3);
LED_ON(LED_4);
LED_OFF(LED_5);
delay_ms(); LED_OFF(LED_2);
LED_OFF(LED_3);
LED_OFF(LED_4);
LED_ON(LED_5);
delay_ms();
}
return ;
} void delay_ms(unsigned int time)
{
int i, j;
while(time--)
{
for(i = ; i < ; i++)
for(j = ; j < ; j++); //do nothing
}
}

ARM汇编代码实现LED闪烁

.globl _start  
.arm  
_start:  
    LDR R0,=0x11000C20  
    LDR R1,[R0]  
    BIC R1,R1,#0x0000000f  
    ORR R1,R1,#0x00000001  
    STR R1,[R0]  
  
loop:  
    LDR R0,=0x11000C24  
    LDR R1,[R0]  
    ORR R1,R1,#0x01  
    STR R1,[R0]  
    BL delay  
    LDR R1,[R0]  
    BIC R1,R1,#0x01  
    STR R1,[R0]  
    BL delay  
    B loop  
  
delay:  
    LDR R2,=0xfffffff  
loop1:  
    SUB R2,R2,#0x1  
    CMP R2,#0x0  
    BNE loop1  
    MOV PC,LR  
    .end  

从点亮一个LED开始,Cortex-A9裸机程序设计的更多相关文章

  1. 点亮一个led灯

    /********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...

  2. 点亮一个led

    1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...

  3. 进阶之路(基础篇) - 001 亮一个led灯

    /********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...

  4. 单片机基础——使用GPIO输出点亮一个LED灯

    1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...

  5. STM32学习笔记(一)——点亮一个LED

    引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...

  6. 第一个程序点亮一个LED灯

    #include <reg52.h> // 引用52包文件 可以理解为命名空间 sbit P1_0 = P1^0;   // 定义P1管脚0 void main()             ...

  7. linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  8. 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》

    1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...

  9. 在 S5PV210 的 开发板上 点亮 一个 LED 灯

    参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准 ...

随机推荐

  1. linux命令之seq

    seq命令简述 seq命令比较常用,在需要做循环的时候用于产生一个序列是再合适不过的工具了,常用方法也比较简单: Usage:      seq [OPTION]... LAST      seq [ ...

  2. 动软代码生成V2.74模版简介

    最近发现很多人用动软代码生成,确实方便,有些经验记录下,以后查看回顾. ..\Maticsoft\Codematic2\Template\TemplateFile 为模板文件夹,直接在目录下新建文件夹 ...

  3. oracle数据库exp/imp命令详解

    转自http://wenku.baidu.com/link?url=uD_egkkh7JtUYJaRV8YM6K8CLBT6gPJS4UlSy5WKhz46D9bnychTPdgJGd7y6UxYtB ...

  4. angularjs中关于ng-if的一些理论

    ng-if简介: ● 使用ng-if指令可以完全根据表达式的值在DOM中生成或移除一个元素.如果赋值给ng-if 的表达式的值是false,那对应的元素将会从DOM中移除,否则对应元素的一个克隆将被重 ...

  5. 使用HTML5中的Canves标签制作时钟特效

    <!DOCTYPE html > <html> <head> </head> <body> <canvas id="cloc ...

  6. Zepto源码笔记(三)

    ps:本文中"组装成成数组"指的是若元素个数大于1则返回数组,若元素只有1个则返回元素本身 以下函数是$.fn该对象的方法 ready(callback) 通过readyRE正则表 ...

  7. JQuery日历插件My97DatePicker日期范围限制

    My97DatePicker是一个非常优秀的日历插件,不仅支持多种调用模式,还支持日期范围限制. 常规的调用比较简单,如下所示: 1 <input class="Wdate" ...

  8. CREATE DATABASE

    CREATE DATABASE IF NOT EXISTS `focusdata` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE `fo ...

  9. EasyUI datagrid简单运用

    jquery的前端框架挺多的,有easyUI ,bootstrap...,对于做系统软件或许easyUI比较好,因为里面控件很丰富,而bootstrap非常简洁大方,但是控件相 对比较少,特别是复杂的 ...

  10. Hibernate学习笔记--Hibernate框架错误集合及解决

    错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...