×
单片机 > 单片机程序设计 > 详情

ARM裸机程序开发——按键控制LED灯

发布时间:2020-07-08 发布时间:
|

这几天将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;

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义