东莞理工学院 arm期末参考资料——程序题
东莞理工学院 arm期末参考资料
东莞理工学院 arm期末参考资料——程序题
1.编写设置系统时钟的程序。Fin=12MHZ,要求fclk:hclk:pclk=200:100:50M HZ
MPLLCON:设为(0x5c << 12)|(0x04 << 4)|(0x00),即0x5c0040
对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV。有如下计算公式:
MPLL(FCLK) = (m * Fin)/(p * 2^s)
其中: m = MDIV + 8, p = PDIV + 2
Fin 即默认输入的时钟频率12MHz。MPLLCON设为0x5c0040,可以计算出FCLK=200MHz,再由CLKDIVN的设置可知:HCLK=100MHz,PCLK=50MHz。
程序如下:
#define rLOCKTIME (*(volatile unsigned *)0x4c000000) //PLL lock time
#define rMPLLCON (*(volatile unsigned *)0x4c000004) //MPLL Control
#define rCLKCON (*(volatile unsigned *)0x4c00000c) //Clock
#define rCLKDIVN (*(volatile unsigned *)0x4c000014) //Clock pider
#define rUPLLCON (*(volatile unsigned *)0x4c000008) //UPLL Control
#define rCLKSLOW (*(volatile unsigned *)0x4c000010) //Slow clock
void clock_init(void){
rLOCKTIME = 0xFFFFFF; 设定锁定时间
rCLKDIVN = 0x3; 设定分频比例fclk:hclk:pclk=1:2:4
rMPLLCON = 0x5c0040; }
用汇编程序:
rLOCKTIME equ 0x4c000000 rMPLLCON equ 0x4c000004
rCLKCON equ 0x4c00000c
ldr r0 , = rLOCKTIME mov r1 ,# 0xFFFFFF str r1 ,[r0]
ldr r0 , = rMPLLCON mov r1 ,# 0x03 str r1 ,[r0]
ldr r0 , = rCLKCON mov r1 ,# 0x5c0040 str r1 ,[r0]
2.利用计时器,Fin=12MHZ,fclk:hclk:pclk=200:100:50,编写定时2秒的程序。
#define rTCFG0 (*(volatile unsigned *)0x51000000) //Timer 0 configuration
#define rTCFG1 (*(volatile unsigned *)0x51000004) //Timer 1 configuration
#define rTCON (*(volatile unsigned *)0x51000008) //Timer control
#define rTCNTB0 (*(volatile unsigned *)0x5100000c) //Timer count buffer 0
* Timer input clock Frequency = PCLK / {prescaler value+1} / {pider value}
* {prescaler value} = 0~255
* {pider value} = 2, 4, 8, 16
* Timer0的时钟频率=100MHz/(99+1)/(16)=62500Hz
void timer0_init(void){
rTCFG0 = 99; // 预分频器0 = 99
rTCFG1 = 0x03; // 选择16分频
rTCNTB0 = 250000; // 2秒钟计时 ,250000/62500=2秒
rTCON |= (1<<1); // 手动更新
rTCON = 0x09; // 自动加载,清“手动更新”位,启动定时器0 }
汇编程序:
rTCFG0 equ 0x51000000 rTCFG1 equ 0x51000004
rTCNTB0 equ 0x5100000c rTCON equ 0x51000008
ldr r0 , = rTCFG0 mov r1 ,# 0x63 str r1 ,[r0] // 预分频器0 = 99
ldr r0 , = rTCFG1 mov r1 ,# 0x03 str r1 ,[r0] // 选择16分频
ldr r0 , = rTCNTB0 mov r1 ,# 250000 str r1 ,[r0] // 2秒钟计时
ldr r0 , = rTCON mov r1 ,# 0x02 str r1 ,[r0] // 手动更新
东莞理工学院 arm期末参考资料
ldr r0 , = rTCON mov r1 ,# 0x09 str r1 ,[r0] 自动加载,清“手动更新”位,启动定时器0
3.编写外中断为EINT0,EINT1,EINT2时的设置程序和中断服务子程序,中断服务子程序内容自定。
中断发生后,首先进行现场保护,接下来转入中断的入口代码处执行,该部分代码通常使用汇编语言书写。在执行中断服务程序之前,首先要确保HandleIRQ地址处保存中断分发程序IsrIRQ的入口地址。
ldr r0,=HandleIRQ
ldr r1,=IsrIRQ
str r1,[r0]
接下来将执行IsrIRQ中断分发程序,具体代码如下:
IsrIRQ
sub sp,sp,#4 ;为保存PC预留堆栈空间
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9] ;加载INTOFFSET寄存器值到r9
ldr r8,=HandleEINT0 ;加载中断向量表的基地址到r8
add r8,r8,r9,lsl #2 ;获得中断向量
ldr r8,[r8] ;加载中断服务程序的入口地址到r8
str r8,[sp,#8] ;保存sp,将其作为新的pc值
ldmfd sp!,{r8-r9,pc} ;跳转到中断服务子程序执行
。。。
HandleEINTO DCD INT0
DCD INT1
DCD INT2
DCD INT3
各子程序:
INT0
.
清除SRCPND,INTPND
SUBS PC,R14,#0X04
INT1
清除SRCPND,INTPND
SUBS PC,R14,#0X04
INT2
清除SRCPND,INTPND
SUBS PC,R14,#0X04
INT3
..
清除SRCPND,INTPND
SUBS PC,R14,#0X04
汇编程序:
rGPFCON equ 0x56000050
rEXTINTO equ 0x56000088
rEXTINT1 equ 0x5600008c
rEXTINT2 equ 0x56000090
SRCPND equ 0x4a000000
INTPND equ 0x 4a000010
INTMASK equ 0x 4a000008
INTOFFSET equ 0x 4a000014
Area int ,code readonly
东莞理工学院 arm期末参考资料
Mrs r0 ,spsr
Bic r0,r0,0xc0
Msr spsr_cxsf,r0 ;开I,F总中断
ldr r0 , = rGPFCON
mov r1 ,# 0x2a
str r1 ,[r0] ;功能方式
ldr r0 , = rEXTINTO
mov r1 ,# 0x4 ;触发方式
str r1 ,[r0]
ldr r0 , = rEXTINT1
mov r1 ,# 0x040触发方式
str r1 ,[r0]
ldr r0 , = rEXTINT2
mov r1 ,# 0x400
str r1 ,[r0] ; 触发方式
LDR R0 ,=SRCPND ; MOV R1,#0X0000 ; STR R1,[R0] ;
LDR R0 ,=INTPND ; MOV R1,#0X0000 ; STR R1,[R0] ;
LDR R0 ,=INTMASK ; MOV R1,#0X0000 ; STR R1,[R0] ;优先缺省
;IsrIRQ的入口地址。
ldr r0,=HandleIRQ
ldr r1,=IsrIRQ
str r1,[r0]
接下来将执行IsrIRQ中断分发程序,具体代码如下:
IsrIRQ
sub sp,sp,#4 ;为保存PC预留堆栈空间
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9] ;加载INTOFFSET寄存器值到r9
ldr r8,=HandleEINT0 ;加载中断向量表的基地址到r8
add r8,r8,r9,lsl #2 ;获得中断向量
ldr r8,[r8] ;加载中断服务程序的入口地址到r8
str r8,[sp,#8] ;保存sp,将其作为新的pc值
ldmfd sp!,{r8-r9,pc} ;跳转到中断服务子程序执行
HandleEINTO DCD INT0
DCD INT1
DCD INT2
各子程序:
INT0
. 中断服务程序1 (略)
LDR R0 ,=SRCPND ; MOV R1,#0X0000 ; STR R1,[R0] ;
LDR R0 ,=INTPND ; MOV R1,#0X0000 ; STR R1,[R0] ;清除SRCPND,INTPND
SUBS PC,R14,#0X04
INT1
中断服务程序2 (略)
LDR R0 ,=SRCPND ; MOV R1,#0X0000 ; STR R1,[R0] ;
东莞理工学院 arm期末参考资料
LDR R0 ,=I …… 此处隐藏:6823字,全部文档内容请下载后查看。喜欢就下载吧 ……
- 基于PLC控制的航空电镀生产线自动输送
- 中考预测课内外文言文对比阅读2
- 2018-2023年中国商业智能(BI)产业市场
- 中国金融体制改革研究2011new
- 外窗淋水试验方案
- 精益生产(Lean Production)
- 学校安全事故处置和信息报送制度
- Chapter 5 Human Resources Management
- 【小学数学】人教版小学六年级上册数学
- 初中数学解题方法与技巧
- 山东省创伤中心建设与管理指导原则(试
- 函数与数列的极限的强化练习题答案
- 10分钟淋巴按摩消脂
- 网络应急演练预案
- 服装设计入门基础知识
- 初二数学分式计算题练习
- (人教新课标)高二数学必修5第二章 数列
- 最新自主创业项目
- 北京大学 无机化学课件 4第4章 配合物
- 贸易公司业务管理制度




