嵌入式arm(三)arm裸机程序点灯+流水灯+环境文件解释

本节我们用点灯来体验一下arm的裸机程序开发;

cortex-A系统虽然比M系统更复杂,但是对于裸机开发,也就是寄存器寄存器寄存器,还是很好上手的(指点灯),那就来体验一把

一 环境介绍

使用开发板:FS4412,Soc:Exynos4412,内核型号:cortex-A9,架构:armv7;
文档:开发板原理图,Soc数据手册;
环境:文件编写及编译:Linux;下载程序:超级终端hypertrm;串口下载
编译器:交叉编译器arm-linux-gcc。

二 简略了解SFR特殊功能寄存器

在这里插入图片描述
这张图应该很好理解吧,(除了LED灯方向画反了),汇编里的寄存器是cpu中的寄存器,操作它们只能驱动cpu进行相应的操作,如果要操作cpu外面的外设,那就得去操作这些外设对应的寄存器,因为每个外设都有自己的寄存器,以实现不同的功能,所以这些寄存器又叫特殊功能寄存器,英文缩写SFR,sfr;

三 裸机开发点灯的流程

1 看硬件的原理图

本次实验是要驱动一个LED,使其发光,那么首先要知道这个LED在电路中是怎么接的,知道了电路接法才能知道怎么能使这个灯亮灭,一般就是要看LED的控制引脚连接的是Soc的哪个引脚;

2 查手册配置Soc的引脚

对这个引脚进行相应的配置,需要设置对应的寄存器,寄存器的用法在芯片手册对应的模块中,需要找到寄存器的地址和这个寄存器的用法(哪几位是干啥的)

3 编程

用C语言,汇编也能用,但是用C更方便;

四 点灯

1 查原理图

在这里插入图片描述

1.1 查引脚连接

如图,LED3,4,5分别接在Soc的GPX1_0,GPF3_4,GPF3_5上;
注:GPX1_0:第X个大组的第1个小组的第0个引脚;

1.2 看驱动方式

(1) 二极管的阳极接在高电平上,阴极通过电阻和三极管接地,只要三极管导通,LED就亮,三极管截止,LED就灭;
(2) NPN三极管发射极接地,基极给高导通,给低截止;
(3) 可知:Soc引脚输出高电平亮灯,低电平灭灯;

2 查手册

2.1 查找到的信息

有两个寄存器要用到:引脚模式设置GPX1CON,引脚输出电平设置GPX1DAT;
(1) GPX1_0这个引脚对应的寄存器为GPX1CON;
(2) GPX1CON寄存器是32位的,一个引脚需要4位进行配置,32位对应8个引脚,所以GPX1CON可以管理GPX1_0 GPX1_1…GPX1_7;
(3) GPX1_0这个引脚对应的是GPX1CON(地址为0x11000c20)寄存器的0-3位,要引脚输出,设置为0x01,其他位保持不变;
(4)GPX1DAT这个寄存器管理的是GPX1_0-GPX1_7的输出值,不是0就是1,GPX1_0对应的就是GPX1DAT的第0位,要想GPX1_0输出1,就让GPX1DAT的第0位为1就可以;

2.2 查找过程(手册截图)

2.2.1 GPX1_0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 GPF3_4、GPF3_5

在这里插入图片描述
在这里插入图片描述

3 编程

3.1 点灯的C文件

先点亮LED3,思路就是配置GPX1_0为输出,且输出1;
手册中查到GPX1CON的基地址为0x11000000,偏移量为0x0c20,所以其地址为0x11000c20;因为是32位地址,可以转化为int型的指针然后来访问;即(int *)0x11000c20;访问时,再解引用*((int *)0x11000c20);同理,GPX1DAT的地址为:0x11000c24;
程序为:

//没有包含任何头文件,所以连寄存器都要自己去宏定义;
//用volatile不
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值