当前位置:网站首页>ARM结构体系4:嵌入式硬件平台接口开发
ARM结构体系4:嵌入式硬件平台接口开发
2022-08-11 05:10:00 【迷途君】
这里博主以cortex_A9来举例:下面是我使用的开发板的图片介绍:
图中详细标注了开发板中的部件及接口,下面我将通过对LED进行点灯操作,来简单介绍我们使用开发板进行裸机开发的一个基本流程是怎样的。
1.看电路图
首先我们需要在提供的开发板资料电路图中找到我们需要进行操作的设备。并且了解它运行的原理,比如我们要对开发板上的LED灯进行点亮操作,首先我们在提供的开发板资料中找到它的电路原理图如下:
我们来分析以下,要使我们的发光二极管导通,那么我们对应的引脚需要给三极管的基极提供一个高电平,这样才能使二极管导通,让led点亮,图中两个电阻分别保护我们的芯片和发光二极管。三极管类型为NPN。
2.看芯片手册
那么我们在芯片原理图册中找到对应的控制模块,LED灯的控制管脚如GPX2_7,如下图
可以看到资料给我们提供了寄存器的起始地址等信息,我们需要芯片输出一个高电平那么我们需要选择模式为OUTput输出模式,那么这就是我们下一步要做的事!看控制寄存器。
3.编程
a.定义我们要控制的寄存器的宏(与手册里的寄存器地址对应)
b.设备初始化。(比如在我们点亮LED这个操作中,我们就需要设置它为输出状态,也就是将31-28位设置为0x01)
c.将功能分成最基本的小块,比如我们要实现led灯的顺序点亮熄灭,那么我们要先点亮灯,然后灭灯,加上延时,闪烁最后我们就完成了一个跑马灯的功能。
那么我们展示两段代码来展示点亮灯的操作,一个是用的汇编指令,一个使用我们的C语言来实现,在一般的裸机开发中一般我们都使用c语言。
汇编指令完成灯的点亮:
@GPX2CON 寄存器地址:0x11000000+0x0c40
.text
ldr r0,=0x11000c40 @将寄存器地址搬移到R0,那么R0就代表GPX2CON
ldr r1,[r0]
bic r1,#0xf0000000 @将28-31号比特位清零
orr r1,#0x10000000 @将28号比特位置为1,其他比特位不动,设置GPX2_7输出功能
str r1,[r0]
ldr r0,=0x114001e0 @将GPF3C0N寄存器搬移到R0
ldr r1,[r0]
bic r1,#0xf0000 @将19-16号比特位清零
orr r1,#0x10000 @将16号比特位置为1,其他比特位不动,设置GPX3-4为输出功能
str r1,[r0]
@亮灯
while:
ldr r2,=0x11000c44 @将寄存器GPX2DAT寄存器地址搬移到R2
ldr r3,[r2]
orr r3,#0x80 @将GPX2DAT的7号位置1
str r3,[r2]
ldr r2,=0x114001e4
ldr r3,[r2]
orr r3,#0x10 @将GPX3DAT的4号位置1
str r3,[r2]
bl delay_1ms
@灭灯
ldr r2,=0x11000c44
ldr r3,[r2]
bic r3,#0x80
str r3,[r2]
ldr r2,=0x114001e4
ldr r3,[r2]
bic r3,#0x10
str r3,[r2]
bl delay_1ms
b while
delay_1ms:
ldr r5,=0x4fff0000
loop:
cmp r5,#0
subgt r5,#1
bgt loop
mov pc,lr
.end
C语言:
#define GPX2CON *(volatile unsigned int*)0x11000c40
#define GPX2DAT *(volatile unsigned int*)0x11000c44
void led2_init()
{
GPX2CON =GPX2CON &(~(0xf<<28))|(1<<28);
}
void led2_on()
{
GPX2DAT=GPX2DAT|(1<<7);
}
void led2_off()
{
GPX2DAT=GPX2DAT &(~(1<<7));
}
void delay()
{
int i,j;
for(i=0;i<10000;i++)
for(j=0;j<256;j++);
}
int main()
{
led2_init();
while(1)
{
led2_on();
delay();
led2_off();
delay();
}
}
重点就是找到对应的模块注意观察控制寄存器,通过修改控制寄存器,来实现我们的功能。
边栏推荐
- ESP8266 教程3 — 通过TCP组建局域网并通信
- Switch and Router Technology-31-Extended ACL
- 元宇宙社交应用,靠什么吸引用户「为爱发电」?
- [FPGA tutorial case 50] Control case 2 - FPGA-based PD controller verilog implementation
- 【无2022上海市安全员A证考试题库及模拟考试
- K8s复习笔记7--Redis单机和Redis-cluster的K8S实现
- 面试题整理
- Project Practice Lecture 27: Application of Status Mode in Duplicate Brands
- 3 模块二:科研工具使用
- The shortest path out of the maze
猜你喜欢
zabbix构建企业级监控告警平台
Merkel Studio--OpenEuler Training Notes (1)
Switch and Router Technology - 22/23 - OSPF Dynamic Routing Protocol/Link State Synchronization Process
Switches and routers technology - 21 - RIP routing protocol
C语言:实用调试技巧
C语句:数据存储
交换机和路由器技术-21-RIP路由协议
交换机和路由器技术-35-NAT转PAT
IP-Guard如何禁止运行U盘程序
交换机和路由器技术-28-OSPF的NSSA区域
随机推荐
How IP-Guard prohibits running U disk programs
Golden Warehouse Database KingbaseGIS User Manual (6.10. Geometric Object Operation Operator)
交换机和路由器技术-30-标准ACL
分层架构&SOA架构
网络协议1
开发工具篇第七讲:阿里云日志查询与分析
应用层协议——DNS
交换机和路由器技术-36-端口镜像
【无标题】2022年胺基化工艺考试题模拟考试题库及在线模拟考试
Switch and Router Technology-33-Static NAT
MySQL must know and must know (primary articles)
Project Practice Lecture 27: Application of Status Mode in Duplicate Brands
交换机和路由器技术-34-动态NAT
[No 2022 Shanghai Security Officer A Certificate Exam Question Bank and Mock Exam
标识密码技术在 IMS 网络中的应用
HAVE FUN | “SOFA 星球”飞船计划、源码解析活动最新进展
Day38 LeetCode
MySQL必知必会(初级篇)
用白嫖的Adobe正版软件,减少应届毕业生的慢就业、不就业等现象
ERROR: Could not install packages due to an OSError: [Errno 2] 没有那个文件或目录: ‘/data/xxxx