对于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 divider #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} / {divider value} * {prescaler value} = 0~255 * {divider 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分频
1
ldr r0 , = rTCNTB0 mov r1 ,# 250000 str r1 ,[r0] // 2秒钟计时 ldr r0 , = rTCON mov r1 ,# 0x02 str r1 ,[r0] // 手动更新
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
2
SRCPND equ 0x4a000000 INTPND equ 0x 4a000010 INTMASK equ 0x 4a000008 INTOFFSET equ 0x 4a000014 Area int ,code readonly 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 (略)
3
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] ;
LDR R0 ,=INTPND ; MOV R1,#0X0000 ; STR R1,[R0];清除SRCPND,INTPND
SUBS PC,R14,#0X04 INT2
„„中断服务程序13(略)
LDR R0 ,=SRCPND ; MOV R1,#0X0000 ; STR R1,[R0] ;
LDR R0 ,=INTPND ; MOV R1,#0X0000 ; STR R1,[R0] ; 清除SRCPND,INTPND SUBS PC,R14,#0X04
End
4.用汇编编写一个完成一路输入进行A/D的程序。 c编程,参考课本p233-234 汇编程序:
rADCCON equ 0x58000000 ;rADCTSC equ 0x58000004 ;rADCDLY equ 0x58000008 rADCDAT0 equ 0x5800000c Area ad ,code readonly
ldr r2 , = rADCDAT0//ADC转换结果寄存器 ldr r0 , = rADCCON //ADC控制寄存器 mov r1 ,# ox04c4
str r1 ,[r0] ;01 00110001 000000 =ox04c4 //分频49,假定为0号通道 mov r1 ,# ox14c4
str r1 ,[r0] ; 01 00110001 0000001=ox14c4 启动A/D转换 loop nop
bicnes r1 ,r0,0x08000 ,loop//判断转换是否结束 ldr r3,[r2]
and r3,r3,0x3ff //转换结果存r3 End
1.什么是嵌入式系统?它由哪几部分组成?有何特点?
它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。
嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成。
具有软件代码小、高度自动化、响应速度快,可靠性高、成本、体积、功耗小等特点,特别适合于要求实时和多任务的体系。
2。嵌入式处理器分为哪几类?
嵌入式微处理器(Embedded Microprocessor Unit, EMPU) 微控制器(Microcontroller Unit, MCU)
4
DSP处理器(Digital Signal Processor, DSP) 片上系统(System On Chip,SOC)
3。ARM原意是什麽?它是个怎样的公司?其处理器有何特点?
ARM(Advanced RISC Machines)公司是全球领先的16/32位RISC微处理器知识产权设计供应商。 ARM处理器有3大特点:
小体积、低功耗、低成本而高性能; 16/32位双指令集; 全球众多的合作伙伴。
ARM处理器分ARM7、ARM9、ARM9E、ARM10、ARM11和SecurCore系列。 4. 什么是实时系统?它有哪些特征?如何分类?
实时系统(Real Time System)是指产生系统输出的时间对系统至关重要的系统。从输入到输出的滞后时间必须足够小到一个可以接受的时限内。
实时系统通常具备以下重要的特性:
1.实时性 2.并行性 3.多路性 4.性 5.可预测性 6.可靠性 根据响应时间可分为3种类型:
1.强实时系统(ms—us) 2.弱实时系统(>10ms) 3.一般实时系统(s级)
根据确定性可分为2种类型:
1.硬实时系统(系统对响应时间有严格要求)
2.软实时系统(系统对响应时间有要求,但若不满足,不会导致系统崩溃) 5. RTOS由哪几部分组成?它有哪些特点?与一般操作系统比较有何不同? (1) 实时内核 (2) 网络组件 (3) 文件系统 (4) 图形用户界面 特点:
(1)支持异步事件的响应
实时操作系统为了对外部事件在规定的时间内进行响应,要求具有中断和异步处理的能力。 (2)中断和调度任务的优先级机制
为区分用户的中断以及调度任务的轻重缓急,需要有中断和调度任务的优先级机制。 (3)支持抢占式调度
为保证高优先级的中断或任务的响应时间,实时操作系统必须提供一旦高优先级的中断或任务准备好,就能马上抢占低优先级任务的CPU使用权的机制。
(4)确定的任务切换时间和中断延迟时间
确定的任务切换时间和中断延迟时间是实时操作系统区别于普通操作系统的一个重要标志,是衡量实时操作系统实时性的重要标准。 (5)支持同步
提供同步和协调共享数据的使用。 与一般操作系统比较不同:
实时性。响应速度快,只有几微秒;执行时间确定、可预测; 代码尺寸小。10~100KB,节省内存空间,降低成本; 应用程序开发较难;
需要专用开发工具:仿真器、编译器和调试器等。
6.实时操作系统常用的任务调度算法有哪几种?
基于优先级的调度算法
非抢占式调度 抢占式调度
同一优先级的时间片轮转调度算法
5
单调速率调度算法
7.用什么方法解决优先级反转问题?
优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止
解决优先级反转问题的方法:
优先级继承(Priority Inheritance) 优先级封顶(Priority Ceiling)
(1)优先级封顶:设置优先级上限,给临界区一个高优先级,进入临界区的进程都将获得这个高优先级,如果其他试图进入临界区的进程的优先级都低于这个高优先级,那么优先级反转就不会发生。
(2)优先级继承,当一个高优先级进程等待一个低优先级进程持有的资源时,低优先级进程将暂时获得高优先级进程的优先级别,在释放共享资源后,低优先级进程回到原来的优先级别。嵌入式系统VxWorks就是采用这种策略。
3)第三种方法就是使用中断禁止,通过禁止中断来保护临界区,采用此种策略的系统只有两种优先级:可抢占优先级和中断禁止优先级。前者为一般进程运行时的优先级,后者为运行于临界区的优先级。火星探路者正是由于在临界区中运行的气象任务被中断发生的通信任务所抢占才导致故障,如果有临界区的禁止中断保护,此一问题也不会发生。
1。ARMd的英文全名?处理器的特点?
RM(Advanced RISC Machines)公司是全球领先的16/32位RISC微处理器知识产权设计供应商。 ARM处理器有3大特点:小体积、低功耗、低成本而高性能;16/32位双指令集;全球众多的合作伙伴。
2。RM7和ARM9在流水线方面有何不同?
ARM7 为3级流水线, ARM7体系结构采用了3级流水线,分为取指,译码和执行。
ARM9为5级流水线. 5级流水线把存储器的取指与数据存取分开,增加了I-Cache和D-Cache以提高存储器存取的效率,增加了数据写回的专门通路和寄存器,以减少数据通路冲突。
这样,5级流水线分为:取指、指令译码、执行、数据缓存和写回。 3。ARM处理器支持的数据类型有哪些?
字节:在ARM体系结构中字节的长度均为8位。 字:在ARM体系结构中字节的长度均为32位。 半字:在ARM体系结构中字节的长度均为16位 4。写出ARM使用的各种工作模式和状态。
ARM体系结构支持7种处理器模式。用户, FIQ, IRQ,管理, 中止,未定义,系统 ARM处理器有两种工作状态:
ARM: 32位,这种状态下执行字对准的ARM指令; Thumb:16位,这种状态下执行半字对准的Thumb指令。
5.ARM处理器共有几个寄存器?那个是PC,哪个用做LR? 37个,R13用作堆栈SP,R14链接LR,R15用于程序记数PC
6.假设R0=0X12345678,使用指令R0存储到0X4000的指令存到存储器中。若存储器为大端组织,写出从存储器0X4000处加载一个直接到R2的指令执行后R2的值。
0x876321 小端:高字节在高地址;大端:高字节在低地址。
7. 假定有一个25个字的数组。编译器分别用R0和R1分配变量x和y。若数组的基地址放在R2中,使用后变址形式翻译: x=array[5]+y
AREA sectionnamemytest CODE READONLY
ENTRY CODE32
LDR R2,=A ;得首地址
LDR R3,[R2+5]
6
ADD R0,R1,R3 ;x=a[5]+y
A DCB 0 END
8. 使用汇编完成下列C的数值赋值:For(i=0;i<10;i++) {a[i]=b[i]+c} AREA sectionnamemytest CODE READONLY
ENTRY CODE32
LDR R0,=B
LDR R1,=A ;得首地址 MOV R3,#10
LOOP LDR R2,[R0]
ADD R2,R2,#C ;a[i]=b[i]+c
STR R2,[R1]
ADD R0,R0,#1
ADD R1,R1,#1 ; 地址增1
SUBS R3,R3,#1 ;循环10次 BNE LOOP A DCB 0 B DCB 0 END
9. Arm处理器加了哪个协处理器?功能?
CP14,允许软件访问调试通信通道。系统控制协处理器CP15,提供了一些附加寄存器用于配置和控制Caches、MMU、保护系统、时钟模式和其他系统选项。 10. 时钟模式
ARM920T有2个时钟输入,分别是BCLK和FCLK。ARM920T内部是由GCLK时钟模式驱动。CP15寄存器1的nF位和iA位决定时钟模式,即决定了GCLK是由FCLK还是BCLK产生。一共有3种时钟模式,分别为快速总线、同步以及异步模式。 快速模式
同步模式 异步模式
7
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务