arm汇编编程(示例)
板上有4个LED灯,如果想点亮,必须先看硬件连线图
1.查看开发板LED管脚连线
TQ2400开发板有两块电路板:核心板、主板
LED灯在主板上,所以查看《TQ2440底板原理图.pdf》,找到LED模块(LED测试)
从电路图可看到如果让LED1灯点亮,必须在nLED_1连线上输出低电屏(即通电)
如何让LED1上输出低电屏,需查看CPU相关引脚连线
2.查看TQ2440核心板原理图
CPU在核心板上,所以查看《TQ2440_V2核心板原理图.pdf》
找到nLED1连线,如下
nLED1在CUP的GPB5引脚上
nLED2GPB6
nLED3GPB7
nLED4GPB8
如何让CPU的GPB5为低电屏,需查看CPU引脚模式
3.查看CPU用户手册
TQ2440的微处理器芯片为S3C2440,所以查看《S3C2440.pdf》芯片手册,找到GPB5的管脚模式
1)控制寄存器
GPB5[11:10]00=Input01=Output
10=nXBACK11=Reserved
GPBCON控制寄存器
GPBDAT数据寄存器
GPBUP上拉使能寄存器
[11:10]是所在位,每个管脚都是占两个位
其中Input是输入值
Output输出值
reserved保留值
nXBACKnXBACK/GPB5
即,如果将GPB5设为低电屏,则需要将控制寄存器设置为输出模式。
即需要CPU寄存器GPBCON的11和10位设置为01即11位为010位为1
2)数据寄存器
GPB[10:0][10:0]当端口配置为输入端口时,相应位为引脚状态。
当端口配置为输出端口时,相应位为引脚状态。
当端口配置为功能引脚时,将读取到未定义值
所以,当GPBCON为输入状态时,GPBDAT的相应位5则应为0才会输出低电屏
3)查看寄存器地址
GPBCON0x56000010R/W端口配置寄存器复位值0x0
GPBDAT0x56000014R/W端口数据寄存器复位值-
所以,需要将地址位0x56000010的寄存器作为GPBCON寄存器
地址位0x56000014的寄存器作为GPBDAT寄存器
4.代码编写
//ledtest.c
#defineGPBCON(*(volatileunsignedlong*)0x56000010)
#defineGPBDAT(*(volatileunsignedlong*)0x56000014)
//volatile影响编译器编译的结果,表示变量是随时可能发生变化的
//0x56000010是地址,强行转换为unsignedlong*类型,
//然后前面加*代表这个地址所指向的寄存器变量
#defineLEDS(1<5|1<6|1<7|1<8)//即11110000
#defineDELAYVAL(0xFFFF)
externintdelay(inttime);//声明汇编函数
intmain(){
intval;
inti=0;
GPBCON=(1<16|1<14|1<12|1<10);//即010101010000000000即B5B6B7B8的状态寄存器
val=val+1;
for(i=0;i<4;i++){
GPBDAT=(GPBDAT&(~LEDS))|(1<6|1<7|1<8);
delay(DELAYVAL);
GPBDAT=(GPBDAT&(~LEDS))|(1<5|1<7|1<8);
delay(DELAYVAL);
GPBDAT=(GPBDAT&(~LEDS))|(1<5|1<6|1<8);
delay(DELAYVAL);
GPBDAT=(GPBDAT&(~LEDS))|(1<5|1<6|1<7);
delay(DELAYVAL);
}
return0;
}
//delay.s
;汇编指令延时程序
EXPORTdelay
AREADELAY,CODE,READONLY
;下面是延时子程序
delay
subR0,R0,#1;r0=r0-1
cmpR0,#0x0;将r0与0比较
bnedelay;比较的结果不为0,则继续调用delay
movPC,LR;返回
END
5.调试代码
2440ART.mcp内双击
TargetSettins:post-linker选择ArMfromELF
LanguageSettins:ArchitectureorProcessor选择相应的编译器ARM920T
ArmLinker:output内RO0x30000000
options内Imageentrypoint设为0x30000000
layout内Object2440init.oSectionInit
Listings内Imagemap
ArmfromELF:outputformat内Plainbinary
outputfilename内*.bin
编译
make
调试AXD是调试器
设置,debug->打开AXD调试界面,选择option->configtarget选项
选ARMUL(模拟调试器),然后选择确定.进入调试界面.
ARMUL是虚拟调试环境(虚拟开发板)
如果用开发板真实环境调试,则需要使用JTAG连开发板后,在此处选H-JTAG
用file- execute->runtocousor项.使程序进入用户主程序 可以用F8来一条一条执行语句,也可用F10,可以设置断点.
arm汇编编 相关文章:
- ARM汇编编程基础之四-ARM汇编伪操作(11-27)
- ARM汇编编程基础之三-基本寻址方式与基本指令(11-27)
- ARM汇编编程基础之一-寄存器(11-27)
- ARM汇编编程基础之五-ADS开发环境的使用(11-27)
- ARM汇编编程基础之二-流水线对PC值的影响(11-27)
- ARM汇编编程基础之六-其它寻址模式与其它指令(11-27)