电路原理图:

如何点亮一个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. Windows下Node.js开发环境搭建-合适的开发环境

    1)生产环境中的Node.js应用 Windows + Linus 2)虚拟机工具 VirtualBox 虚拟机CentOS安装 3)xShell与xFtp(windows到linux文件传输) 4) ...

  2. C# Interface显式实现和隐式实现

    c#中对接口的实现方式有两种:隐式实现和显式实现,之前一直没仔细看过,今天查了些资料,在这里整理一下. 隐式实现的例子 interface IChinese { string Speak(); } p ...

  3. 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey>

    转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...

  4. c标签的使用方法

    1. c:forEach <c:forEach items="> 注意varStatus相当于for循环计数器,从1开始,用${varStatus.count}获得计数器的值.而 ...

  5. C++拾遗(二)关于变量

    符号常量——预处理方式 例如: #define ZERO 0 会替换程序中所有的ZERO为0,在那些设计为用于C和C++的头文件中,必须使用#define来定义符号常量. 无符号类型 unsigned ...

  6. uva 10212 - The Last Non-zero Digit.

    #include <cstdio> #define ll long long const ll MOD = 1e9; int main() { ll N, M; while(scanf(& ...

  7. DOM 之Range(范围)

    -------<javascript高级程序设计>  12.4 范围  笔记------- DOM2级在Document类型中定义了createRange()方法,在兼容DOM的浏览器中, ...

  8. 深度克隆(对象、数组)--------百度IFE前端task2

    var srcObj = { a: 1, b: { b1: ["hello", "hi"], b2: "JavaScript" }}; co ...

  9. u盘禁用

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\USBSTOR]" ...

  10. asp.net 的那点事(2、浏览器和一般处理程序)

    从今天开始我们接着来学习:asp.net中一般处理程序和浏览器的通信. 一.第一个图解: 从图解中我们看出,整个过程是:"请求---处理---响应".这个也就是经常面试的时候,面试 ...