从点亮一个LED开始,Cortex-A9裸机程序设计
电路原理图:
如何点亮一个LED?
通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了。若要将LED熄灭只需取消高电平输出。
如何使三级管基极获得一个高电平?
控制三极管基极的其实是exynos4412的一个引脚(忽略具体是怎么连接的),因此我们要做的就是:
- 配置相关寄存器使引脚变为输出功能(这里配置为输出功能 0x1)
- 配置上下拉(若需要)
- 操作寄存器改变引脚电平变化
- 配置带负载能力(若需要)
相关寄存器
配置引脚功能
获取或设置引脚状态
配置引脚内部上下拉
配置带负载能力
一个简单流水灯的实现:
#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裸机程序设计的更多相关文章
- 点亮一个led灯
/********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...
- 点亮一个led
1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...
- 进阶之路(基础篇) - 001 亮一个led灯
/********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...
- 单片机基础——使用GPIO输出点亮一个LED灯
1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...
- STM32学习笔记(一)——点亮一个LED
引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...
- 第一个程序点亮一个LED灯
#include <reg52.h> // 引用52包文件 可以理解为命名空间 sbit P1_0 = P1^0; // 定义P1管脚0 void main() ...
- linux IMX6 汇编点亮一个LED灯
驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...
- 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》
1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...
- 在 S5PV210 的 开发板上 点亮 一个 LED 灯
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
随机推荐
- RPM包查询
一.查询包是否安装 [root@localhost Packages]# rpm -q httpd ---> 查询已安装的包(命令包名) #选项: # -q 查 ...
- DataGrid简单数据绑定实例2
1.Image列显示: 后台绑定: //获取文件夹下的图片 string path = @"K:\Picture\jpg"; private void Button_Click(o ...
- CSS实现三角形效果
类似三角形的形状的元素在网页中可能会用到,我们可以用图片或者CSS元素达到我们想要的效果.这里讲一下是讲自己使用HTML+CSS实现三角形的方式. 为了能够熟悉的使用HTML+CSS构建三角形,我们首 ...
- django TypeError: 'module' object is not callable
原因:导入模块时直接把模块当函数使用 from rest_framework import reverse #import reverse module @api_view(("GET&qu ...
- 分享8款精美的jQuery图片播放插件
本文将和大家一起分享8款精美的jQuery图片播放插件,每一款插件均有演示和源码下载,有兴趣的朋友可以下载使用和研究.废话不多说了,直接上这些插件. 1.3D轮播相册 这款3D相册插件利用了HTML5 ...
- math.h中的常量
类似于Matlab中经常用到的一些常量,C++里边也是有的.(经查源文件无意中看到) 写入如下代码: #include<iostream> #include<iomanip> ...
- 用java pyhont通过HTTP协议传输文件流
// 代码网上抄的 忘记链接了 抱歉哈package upload; import java.io.BufferedReader; import java.io.DataOutputStream; i ...
- python编程中在ubuntu中安装虚拟环境及环境配置
1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install --upgrade 包名` 2.python虚拟环境安 ...
- jquery easyui根据需求二次开发记录
1.tree需要显示多个图标 实际需求:设备树上节点需搁三个图片,分别标识运行状态.告警状态.设备类型 解决方法:给tree的iconCls传入一个数组,分别是各状态下的class(css),然后要改 ...
- Android Studio Gradle Running报错:Failed to complete Gradle execution.
错误信息如下图所示: 重启AndroidStudio问题解决.