历史上的今天
今天是:2025年07月21日(星期一)
2018年07月21日 | ARM裸机程序开发——按键控制LED灯
2018-07-21 来源:eefocus
这几天将TQ2440上的IO控制引脚学习了一下,了解了一下关于引脚的一些寄存器的配置,熟悉了一下写ARM裸机程序的流程,写一下自己学到的东西。
★程序启动初始化
◇关闭看门狗
有一个专门的寄存器来控制看门狗,看门狗的作用就是在一定的时间内会重新启动系统,这里我们只是写一个简单的逻辑程序用不到看门狗 ,将其关掉。设置WTCON寄存器,将其第5位置0,就可以禁用看门狗
◇设置栈指针
C语言中设置的变量,以及调用的函数等信息都会被存放在栈中,因此栈指针必须要设置
◇调用main函数
main函数中设置了关于IO寄存器的一些设置操作
★TQ2440硬件相关
硬件主要涉及到LED灯与GPIO,按键与GPIO之间的连接
◇LED灯硬件
从图中可以看出LED1与GPB5相连
◇按键硬件
K1按键与GPF1的引脚相连
★IO控制端口及其配置
关于IO控制器,主要是配置两类寄存器:控制寄存器GPXCON与数据寄存器GPXDAT。(X表示A,B,C,……)
控制寄存器GPXCON:主要控制引脚的输入或者输出,输入输出都是控制寄存器中相应的位发生改变
数据寄存器GPXDAT:如果控制寄存器控制引脚输出,那么可以设置数据寄存器使引脚的电平为高电平或者低电平
★TQ2440两种启动方式
◇nand的启动
上电后,硬件会自动将nand中的前4K拷贝到片内的4KSRAM,然后CPU从片内的0x00000000地址执行。因此放在nand的头4K程序主要完成硬件的初始化工作。例如关闭看门狗、设置栈、初始化SDRAM(内存),将nand中的其余代码拷贝到SDRAM中等等一些操作
◇nor启动
上电后,CPU就会从Nor的起始地址0x00000000执行
★程序代码
.text
.global _start
_start:
ldr r0 ,=0x53000000 @设置R0看门狗控制寄存器WTCON
mov r1 ,#0x00000000 @立即数0x00000000赋值给R1
str r1 ,[r0] @寄存器间接寻址
ldr sp ,=4*1024 @设置栈指针
bl main @调用main函数
LOOP: @死循环
b LOOP
//#include
#define GPBCON (*(volatile unsigned long *)0x56000010) //volatile告诉编译器不要优化GPBCON变量
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPBCON_10 (1 << (2*5)-1)
#define GPBDAT_5 (1 << (1*5))
#define GPFCON_2 ~(3 << (1*2))
#define GPFDAT_2 (1 << 1)
int main()
{
unsigned long dwDat;
GPBCON = GPBCON_10; //设置GPB控制寄存器的[11,10]=0b01位
GPFCON = GPFCON_2;
while(1)
{
dwDat = GPFDAT;
if(dwDat & GPFDAT_2)
{
GPBDAT |= GPBDAT_5;
}
else
{
GPBDAT &= ~GPBDAT_5;
}
}
return 0;
}
上一篇:STM32按键控制开关灯
下一篇:STM32之LED按键中断
史海拾趣
|
C8051F+OLED+SHT21设计原理图(第二稿),欢迎大家提出宝贵意见 花了几天时间,总算把本次设计的原理图初稿完成了一下,希望关注的朋友们提点意见以助修改。 目前情况是这样的,本设计,我和空灵准备做一个更趋向于产品的小东西,所以可以做得小巧细致。目前方案如下: 1,锂电池组供电,USB通讯供电(目前锂电 ...… 查看全部问答> |
|
static struct file_operations qq2440_leds_fops = { .owner = THIS_MODULE, .ioctl = &nb ...… 查看全部问答> |
|
华为3G模块问题,USTS 00 00 01 c0 canceled ,USTS 04 00 01 c0 stall pid 问题描述 : 使用华为的WCDMA 3G模块,自己做一个拨号软件,发现连接和断开有问题,有时候连了很久连不上去,有时候连上了断不开,开始时怀疑我的程序有问题,后面再windows下控制面板->网络连接里面 新建一个连接,然后一直连接, ...… 查看全部问答> |
|
请教S3C2440中的Uart串口地址问题:UART0的发送缓冲区地址为0X50000020,接收缓冲区地址为0X50000024,中间只相差4个字节,怎么来的64字节的FIFO缓冲区呢? 谢谢!… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 中国互联网巨头盛大推出的电子书内测价格让整个电子阅读器产业感到了前所未有的“寒意”,而友达大规模进军电子书屏幕市场使得电子书屏幕一直被一家企业垄断的格局即将被打破,加上其他企业也 ...… 查看全部问答> |
|
小弟最近在做dsp5509向sd卡写入速度的测试实验,可是实验结果相当的不理想,要么是写的数据不完整,要么是写入速度太慢了,用的芯片是5509.有没有哪位大侠做过相关这方面的测试,能和小弟交流下么qq:106703178email:lovejy984@163.com不胜感激啊 ...… 查看全部问答> |
|
指纹锁作为门禁识别的衍生产品,依赖于生物识别的技术发展,国外已经逐步兴起进入更多的家庭当中。对于我们国内市场而言,指纹锁的普及率远不及它的名声那样红火。然而对于安防市场,指纹锁仍有可爆发的市场潜力,随着科技的不断进步,高端指纹 ...… 查看全部问答> |




