版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM的异常中断处理
众嵌科技主要内容1、ARM中断的概述2、中断的进入与退出3、中断向量表举例ARM体系的程序控制方式1、通过PC+4/+2:正常程序的顺序执行
2、通过跳转指令:跳转到label或子程序处执行
3、通过异常中断:跳转入中断服务程序ARM体系异常中断的种类ARM体系异常中断的种类ARM体系异常中断的种类ARM体系异常中断的种类ARM体系异常中断的种类各处理器模式下的物理寄存器组ARM的向量表向量表入口跳转的指令实现1、指令BB0xXXXXXXXX当前指令向前或向后32M的地址空间跳转2、使用PC跳转MOVPC,#imme_value立即数有限制:由一个8位常数循环右移偶数位得到3、LDRPC,[PC+offset]offset有限制:用12位表示,所以范围+-4K中断的进入与退出1、中断的进入
(1)保存状态寄存器
(2)设置CPSR中的相应位
(3)设置LR (4)设置PC的值对应的伪代码(复位异常中断)中断的退出1、通用寄存器的恢复(假设在异常中断处理函数中没有使用通用寄存器,则此步可省略)2、状态寄存器的恢复3、PC的恢复PC要返回到发生异常中断的下一条指令处指令(有时候是返回到发生异常中断的指令继续执行,例如指令预取中止异常和数据方位中止异常)SWI和未定义指令异常中断的返回1、中断发生时,PC=PC+8(处理器流水线机制导致) LR=PC-4(CPU自动完成)2、返回的指令实现
MOVSPC,LR3、如果使用了数据栈时候的指令实现:
STMFDSP!,{reglist,lr}保存
… LDMFDSP!,{reglist,pc}^恢复IRQ和FIQ的异常中断的返回1、中断发生后,PC=PC+12 LR=PC-42、中断返回的指令实现
SUBSPC,LR,#4还要减43、如果使用了数据栈时候的指令实现:
SUBSLR,LR,#4保存
STMFDSP!,{reglist,lr} … LDMFDSP!,{reglist,pc}^恢复指令预取中止的异常中断的返回1、中断发生后,PC=PC+8
LR=PC-4注意这时候是返回到异常指令的地方继续执行。2、中断返回的指令实现
SUBSPC,LR,#43、有数据栈时候的指令实现:
SUBSLR,LR,#4 STMFDSP!,{reglist,lr} … LDMFDSP!,{reglist,pc}^数据访问中止异常中断返回1、中断发生后,PC=PC+12
LR=PC-4注意这时候是返回到异常指令的地方继续执行。2、中断返回的指令实现
SUBSPC,LR,#83、有数据栈时候的指令实现:
SUBSLR,LR,#8 STMFDSP!,{reglist,lr} … LDMFDSP!,{reglist,pc}^U-boot代码的中断向量表实现(1).globl_start_start:breset ldrpc,_undefined_instruction ldrpc,_software_interrupt ldrpc,_prefetch_abort ldrpc,_data_abort ldrpc,_not_used ldrpc,_irq ldrpc,_fiqU-boot代码的中断向量表实现(2)_undefined_instruction:.wordundefined_instruction_software_interrupt:.wordsoftware_interrupt_prefetch_abort:.wordprefetch_abort_data_abort:.worddata_abort_not_used:.wordnot_used_irq:.wordirq_fiq:.wordfiq.balignl16,0xdeadbeef2440中断处理过程1、中断控制器汇集各类外设发出的中断信号,然后告诉CPU。2、CPU保护现场,调用中断服务程序(ISR)。3、在ISR中读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行处理。4、清除中断。5、退出中断服务程序前恢复第2步中保存的寄存器(恢复现场),继续执行。2440中断处理框图2440中断处理1、SUBSRCPND和SRCPND寄存器表明有哪些中断被触发了,正在等待处理。2、INTSUBMSK和INTMSK寄存器用于屏蔽相应的在SUBSRCPND和SRCPND寄存器中提出请求的中断源。2440中断处理1、Requestsources(withoutsub-register)中的中断源被触发之后,SRCPND寄存器中的相应位被置1,如果此中断没有被INTMSK寄存器屏蔽的话,它将被CPU相应。2、对于Requestsources(withsub-register)中的中断源被触发后,在SUBSRCPND寄存器中的相应位被置1,如果此中断没有被INTSUBMSK寄存器屏蔽的话,它在SRCPND寄存器中的相应位也置为1。如果此中断没有被INTMSK寄存器屏蔽的话,它将被CPU相应。以上处理过程假定中断方式为IRQ2440中断处理3、如果被触发的中断有快速中断(FIQ)--MODE(INTMOD寄存器)中为1的位对应的中断是FIQ,则CPU进入快速中断模式进行处理。注意:FIQ只能分配一个,即INTMOD中只能有一位置1。4、如果同时有几个中断源请求中断,并且都未被INTMASK寄存器屏蔽时,这个中断请求进过仲裁后(在PRIORITY寄存器中设置)选出优先级最高的中断请求,在INTPND中将相应位置1。5、中断服务程序可以通过读取INTPND或INTOFFSET来确定中断源后进行相应的处理。按键中断1、IO初始化以及中断初始化。2、中断服务程序。IO初始化以及中断初始化1、IO初始化,置相关引脚为外部中断方式2、中断初始化,中断模式IRQ,绑定中断服务程序,使能相应中断(INTMSK,EINTMASK)。中断服务程序1、判断具体是由哪个按键产生的中断,为避免重入先将相应位屏蔽。2、等待用户释放按键。3、清除各中断标记,顺序很重要4、退出前开启相应中断使能。练习实现MINI2440的6个按键中断2440时钟管理
时钟控制逻辑单元能够产生s3c2440需要的时钟信号,包括CPU使用的主频FCLK,AHB总线设备使用的HCLK,以及APB总线设备使用的PCLK.2440内部有2个PLL(锁相环):一个对应FCLK、HCLK、PCLK,另外一个对应的是USB使用(48MHz)。时钟控制逻辑单元可以在不使用PLL情况下降低时钟CLOCK的频率,并且可以通过软件设置寄存器CLKCON来驱使时钟和各个模块的连接/断开,以减少电源消耗。 如图所示时钟结构模块图。主时钟源来自外部晶振(XTIPLL)或者是外部时钟(EXTCLK).时钟生成器包含了一个振荡器(振荡放大器),其连接外部晶振,并且还有2个PLL,可以产生满足s3c2440所需的高频时钟。时钟源的选择
如表所示模式选择引脚(OM2&OM3)组合之间的关系以及为2440选择时钟源,在nRESET上升沿,通过参考引脚OM3和OM2,OM[3:2]的状态被锁存。注意:1、虽然MPLL在reset以后就开始工作,但是MPLL输出(Mpll)没有作为系统时钟来使用,直到软件对MPLLCON寄存器写入有效设置。有效设置前,来自外部晶振或外部时钟源的时钟将直接被当作系统时钟来使用。就算是用户不想改变MPLLCON寄存器的默认值,用户应该再重新写入MPLLCON寄存器一次相同的值。2、当OM[1:0]=11时,OM[3:2]被用于决定test模式。
位于时钟发生器中的MPLL,作为一个集成电路,使得输出信号在频率和相位上同步于一个参考输入信号。应用上其包括如图所示以下基本模块:其产生于输入直流电压成比例的输出频率VCO(电压控制振荡器);通过P值来对输入频率(Fin)来进行分频的分频器P;通过m值来对VCO的输出频率进行分频的分频器M,其输出频率被输入到一个相位频率侦测器(PFD);通过s值来对VCO的输出频率进行分频的分频器S,其分频器S的输出是Mpll(从Mpll模块的输出频率)。 输出时钟频率Mpll相对于参考输入时钟频率Fin如以下公式所示:
Mpll=(2*m*Fin)/(p*2s) m=M(分频器M的值)+8 p=P(分频器P的值)+2 Upll时钟发生器的内部也和Mpll类似。正常模式下改变PLL设置
在Normal模式下的s3c2440操作中,用户可以改变频率通过写PMS三个分频器的值,在PLL锁存时间会被自动的插入。在锁定时间,时钟没有被提供给s3c2440A的内部时钟。图所示的时序图。FCLKHCLK和PCLKFCLK用于ARM920THCLK用于AHB总线,例如用于ARM920T,内存控制,中断控制,LCD控制,DMA以及USB主模块。PCLK用于APB总线,用于外围设备如看门狗,IIS,I2C,PWM,MMC接口,ADCUART,GPIO,RTC以及SPI。
2440支持FCLK,HCLK,PCLK分频比的选择。比例由CLKDIVN控制寄存器中的HDIVN,PDIVN位确定。
在设置PMS3个值后,需要设置CLKDIVN寄存器的值。CLKDIVN的值设置在PLL锁定期后有效。这个值也对复位和改变电源管理模式也是可用的。设置值在1.5HCLK后有效,1个HCLK可以CLKDIVN寄存器的值从默认(1:1:1)到其他分频比(1:1:2,1:2:2,1:2:4)改变有效。
注意1、CLKDIVN的值需要小心设置,不能超过HCLK,PCLK的极限值。
2、如果HDIVN不为0,根据如下指令,CPU总线模式从FastBusMode变为Asynchronous(异步总线模式)
MMU_setAsyncBusMode mrcp15,0,r0,c0,0;协处理器指令
orrr0,r0,#0xc0000000;//R1_nF:OR:R1_iA mcrP15,0,r0,c1,c0,0
如果HDIVN不为0,且CPU总线模式为FastBusmode,使用如下指令,CPU的时钟为HCLK.,这种方式可以用在将CPU频率降低,但是却又不改变HCLK和PCLK. MMU_setFASTBusMode mrcp15,0,r0,c0,0;协处理器指令
bicr0,r0,#0xc0000000;//R1_iA:OR:R1_nF mcrP15,0,r0,c1,c0,02440时钟设置步骤(400MHZ)1、设置锁定时间寄存器(LOCKTIME)
可以省略,使用其缺省值2、设置FCLK,HCLK,PCLK分频比(CLKDIVN、CAMDIVN)3、设置协处理器P15,使CPU总线模式工作在异步模式4、设置UPLL、MPLL配置寄存器(UPLLCON、MPLLCON)
1、先设置UPLLCON 2、间隔7个nop 3、再设置MPLLCON
PWM定时器1、PWM定时器简介
1、5个16位定时器,其中定时器0、 1、2、3有PWM功能。
2、两个预分频器及两个分频器
3、输出波形可编程
4、自动重载模式
5、死区生成器原理框图Timer0内部逻辑图Timer定时器寄存器1、定时器配置寄存器TCFGn2、定时器控制寄存器TCON3、定时器计数缓存寄存器TCNTBn4、定时器比较缓存寄存器TCMPBn5、定时器计数观察寄存器TCNTOn定时器配置寄存器TCFGn1、配置寄存器TCFG0取值范围:0~255
预分频区1[15:8]:定时器2,3,4的预分频值 预分频区0[7:0]:定时器0,1的预分频值2、配置寄存器TCFG1取值范围:2、4、8、16
分频区[19:16]:timer4的分频值 分频区[15:12]:timer3的分频值 分频区[11:8]:timer2的分频值 分频区[7:4]:timer1的分频值 分频区[3:0]:timer0的分频值分频后的时钟频率:
PCLK/(prescaler+1)/(dividervalue)自动重载模式练习实现在MINI2440中使用Timer4每秒中断一次,在中断程序中向串口输出“hello”。定时器控制寄存器TCON1、决定自动重载模式2、决定更新模式3、决定启动bit4、决定inverter模式缓存寄存器TCNTB/TCMPB1、TCNTBn:设置缓冲计数器的值2、TCMPBn:设置比较缓存的值注意:对我们来说,没有对TCNT/TCMP寄存器操作。另:计数观察寄存器TCNTOn:观察计数器的值(只读)定时器设置1、设置TCFG0和TCFG1寄存器2、设置TCMPB0和TCNTB0寄存器3、设置TCON寄存器手动更新位,计数值进行装载。4、设置TCON寄存器自动装载和启动定时器,同时清零手动更新位。5、计数器重新被装载练习实现在MINI2440中使用Timer0的PWM功能驱动蜂鸣器,要求停2秒响1秒共3秒周期运行。(在设置反转位体验差异)通用异步收发器UART概述:
s3c2440A通用异步接收器和发送器(UART)提供了三个独立的异步串行I/O(SIO)端口,每个端口都可以在中断模式或DMA模式下操作。换言之,UART可以生成一个中断或DMA请求用于CPU和UART之间的数据传输。UART使用系统时钟可以支持最高115.2Kbps的波特率。如果一个外部设备提供UEXTCLK给UART,UART可以在更高的速度下工作。每个UART通道对于接收器和发送器包括了2个64位的FIFO。
s3c2440AUART包括了可编程波特率,红外传输接收,一个或两个停止位,5位6位7位8位数据长度和奇偶校验。UART每个UART包含一个波特率发送器,发送器,计数器和一个控制单元。其波特率发生器可由PCLK,FCLK/n或UEXTCLK(外部输入时钟)来锁定。发送器和接收器包含了64位FIFO和数据移位器。数据写到FIFO然后在被传送前拷贝到发送移位器。数据通过发送数据引脚(TxDn)被发出。同时,接收数据通过接收数据引脚(RxDn)移入,然后从移位器拷贝到FIFO。UART特点:
1、基于DMA或中断操作的RxD0,TxD0,RxD1,TxD1,RxD2和TxD2 2、有红外和64位FIFO的UART通道0和1 3、有nRTS0,nCTS0,nRTS1和nCTS1的UART通道0和1 4、支持握手的发送和接收UART数据发送: 发送的数据帧是可编程的。其包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,其可由线性控制寄存器ULCONn来设置。发送器也可以产生一个终止条件,其可以对一个帧发送时间强制串行输出为逻辑0。在当前发送字被完全传输完以后,该模块发送一个终止信号。在终止信号发送后,其串行发送数据到TxFIFO。UART数据接受: 如数据发送,接收的数据帧是可编程的。其包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,其可由线性控制寄存器ULCONn来设置。接收器可以侦测溢出错误,奇偶校验错误,帧错误和终止条件,每个错误都可以设置一个错误标志。-溢出错误是指在旧数据被读取前新数据覆盖了旧数据。-奇偶校验错误是指接收器侦测到一个不希望的奇偶条件。-帧错误是指接收到的数据没有一个有效的停止位。-终止条件是指RxDn输入保持逻辑0状态长于一个帧的传输时间。UART波特率产生: 每个UART波特率发生器为发送器和接收器提供串行时钟。波特率发生器的源时钟可以选择s3c2440A的内部系统时钟或UEXTCLK。换言之,被除数可以设定UCONn中的时钟选择来选择。波特率时钟通过16和由UART波特率除数寄存器(UBRDIVn)中定义的16位除数来分频源时钟(PCLK,FCLK/norUEXTCLK)产生。UBRDIVn由以下表达式来决定。UBRDIVn= (int)(UARTclock/(buadratex16)+0.5)-1
(UARTclock:PCLK,FCLK/norUEXTCLK)UART寄存器设置1、端口设置(GPG)2、设置UFCON使无效FIFO3、设置UMCON使无效AFC4、设置ULCON(正常模式、无校验、停 止位、有效数据位数)5、设置UCON(时钟源选择、发送中断请 求类型等)6、设置UBRDIV(对选择的时钟源分频)LCD控制器(以TFT为例)图像的构成: 一幅图片被称为一帧,一帧由多行组成,一行由多个像素组成,一个像素的颜色由若干位的数据表示。图像显示的过程: 显示器从屏幕的左上方开始,一行一行的取得每个像素的数据并显示出来,当显示到一行的最右边时,跳到下一行的最左边开始显示下一行;当显示完所有行后,跳到左上方开始下一帧。显示器沿着“Z”字行的路线进行扫描。LCD控制器(以TFT为例)外部引脚信号:VSYNC:垂直同步信号,表示扫描1帧的开始。HSYNC:水平同步信号,表示扫描1行的开始。VDEN:数据使能信号。VD[23:0]:LCD像素数据输出端口。VCLK:像素时钟信号。LCD控制器(以TFT为例)时序信号:
VSPW:垂直同步信号VSYNC信号的脉冲宽度为(VSPW+1)个HSYNC信号周期,在这段时间内数据无效。即(VSPW+1)行的数据无效。
VBPD:垂直同步信号的后肩,在VSYNC信号脉冲后,还要进过(VBPD+1)个无效行,有效行的数据才出现。
VFPD:垂直同步信号的前肩,表示进过(VFPD+1)个无效行后,完整的一帧结束,接着就是下一帧的数据。
LINEVAL:垂直显示尺寸-1。即屏行宽-1(239)LCD控制器(以TFT为例)时序信号:
HSPW:行同步信号HSYNC信号的脉冲宽度为(HSPW+1)个VCLK信号周期,在这段时间内数据无效。即(HSPW+1)个像素的数据无效。
HBPD:行同步信号的后肩,在HSYNC信号脉冲后,还要进过(HBPD+1)个VCLK信号周期,有效的像素数据才出现。
HFPD:行同步信号的前肩,表示进过(HFPD+1)个VCLK信号周期,完整的一行结束,接着就是下一行的数据。
HOZVAL:水平显示尺寸-1。即屏列宽-1(319)LCD控制器(以TFT为例)由可知:扫描一帧所需的时间:=((VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1))个行时间。扫描一行所所需的时间:=((HSPW+1)+(HSPD+1)+(HOZVAL+1)+(HFPD+1))个VCLK时间。而VCLK频率由LCD寄存器LCDCON1内的CLKVAL决定:=HCLK/[2*(CLKVAL+1)]因此扫描一帧所需的时间:T=[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]*[(HSPW+1)+(HSPD+1)+(HOZVAL+1)+(HFPD+1)]*[2*(CLKVAL+1)]/HCLK注意:以上的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 操作系统课程设计死锁
- 2024年度企业抵押借款合同正本规范范本3篇
- 2024年装修工程合同:某房地产公司与装修公司之间的装修工程合作
- 承德医学院《构成设计》2023-2024学年第一学期期末试卷
- 成都银杏酒店管理学院《自动化专业英语》2023-2024学年第一学期期末试卷
- 二零二五年度住宅小区地下车库车位购置合同4篇
- 皮肤护理的讲解
- 万兆园区规划与实施路径的创新方案
- 豹纹墙面施工方案
- 2025年度智能安防门窗系统安装施工合同范本3篇
- 模型预测控制现状与挑战
- MOOC创新创业与管理基础(东南大学)
- 快速出具旧机动车评估报告
- 人员保有培训课件
- 中职课程思政说课比赛 课件
- 台大欧丽娟《红楼梦》公开课全部笔记
- 公司报价管理办法
- 农贸市场安全生产风险分级管控和隐患排查治理双体系方案全套资料2019-2020完整实施方案模板
- 人教版 五年级上册道德与法治全册各课及单元同步检测试卷【含答案】
- T梁湿接缝及横隔梁施工方案
- 挂篮检查验收记录表
评论
0/150
提交评论