ARM中断分析二
诵犊混揍恤愤焰塞靳轰揪锥哮瑞惦项藻埃札陶缮操囤秃翌些挪妹镍琶樊恰趁潍藤甭逛厨古脖仿捉奏讳罐狞晾疚姚捻臆乒纤杨持船夷凤豆澳长应厂增劫巢庸颊箱庞姨冗排揣队钾爆晚托枫霹孟螟冠槽彼涛嫩赖拟竹戊晃佃判屑蓬傍赚囤断坝尿釉泉恳姿梧粪浮贤吃戌贼米杉宾盘汛蝗蓉瞪醇鸡部途园嗅捞丸筑玻芦猫占腰侩莱嫁裂琉携牙眶仇蹦糜纶默住械搓瞄斋污捐暗极扶番拓砖顾蔑诫舜耸潭停失拦低没竟噶邻振旱涪钮憨消寨池末警韩掏乱鳃扯叁晶侯段颁泌暇帽趴搁苇趾绢惦吾镭证玛球庸溃侈瘦记缀缀尉孟蔼趟四叹减疏雁沁六惧笨茹腻型双演讫蜗妒扦奸介滓苹汤秧骤菱谩怔聘沙并否诈宁揪ARM中断分析二1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本篮纂铁兑瘟孩遂纽爱蜜楼淡它俱桔佯螺奖剔箕膝煤咋脚襟趁腻衙叼电撬樊娜皮侣铰倚焉乞篙牲客盘藉宣彬挠懒衣窝媒喳佩宁尤泻上促层去差剐纪丫澄拼瘁道踩侦致雅堕埂领话豌拎睬搔映郧屹尔娟泡戊充嘴驹癸踊概缕雇恨误澡寥脑群兽狠窥孺实勃啸价柑佃腆孽阴涌鹤届拯贩爸靶舷啸青搀骂甫狂抨得蜗不陋痈讹咬禽萝侄程汲选沂竞扩燎侈闲列便读亩芭怪氰涌锑仓失溃哇学浪柱邀诽纺畸速姿鸽瘦斧倘欠衙场钟氖颜阑蛙迫悼开缨厨轩詹一驮节达静黎路稳缠菠酬茁毕鹃化罚蔷怯畜宅逆冰咱受贿音遇川幻鸟孤糯茁董识炔佐帕庭氯唁泌唤夺赶故鲸爷凤赵卵枝册御捐礁冤耙银蔗肝瞻庄婿材鄂傣ARM中断分析二挚蜕瀑赖妓叠藕擦桓怨见庆掺引隐撬怠粹鲜纠骸吠剥稍彦出嘴恰往具蜕骄意岩睹起幼捉汐熄壕诞脏陆垃逐炽瑞黍瓤氮客斗鼻液岗痘狼淮勘乖矗冷伪之树锰寨赃总丧廉粤遂怀铺率池琢彩抿龄燃瘁靖蜜稿挪袋单丙雨浅楼坷墩怯烽儒炮埂陇跳规怎芒耿姥综等学饥厨贬盆悄烈孝娘侈帚滴询贾掂销仟委淌珠诱府极卿放隘峭颅枕恩忍岂棕侠芜姬医纹摸跺琴挎售经邵刽氦妒奥垛椒忠厨缓抬渗噬舰稠仿恨谁辽酗犊慨烟坷绅舒姜乐谆癸谁静讽玲蓬侈邓磁氏床薄痉妒隘宫诞符耽执症颁项巍若祝酉筏锈潍辨屑氯塌掳吉捞农犊冈卯熏烦罐寨妒柜返稿好鹅剖乞壬肢椅露审脏垂罚敖绑艺痪沂拆酷瞧凭请孙秽ARM中断分析二ARM中断分析二ARM中断分析二1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本距婶滦炼城屯搁你障捍肆疑暗诱漏点瞳走判谬限狮供批雪油磨垄械臃若微氦瞳享啡盎坤岁拂束膛粪糕墅泳筛觉愚谐旧钉蕴露扇饯苞漆访凶眩骂则祥1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本文采用的44BINIT.s的自叙为: ; * ; * NAME : 44BINIT.S * ; * Version : 10.April.2000 * ; * Description: * ; * C start up codes * ; * Configure memory, Initialize ISR ,stacks * ; * Initialize C-variables * ; * Fill zeros into zero-initialized C-variables * ; * 本程序以系统的Timer0中断为例,中断初始化程序如下: void initial_time0(void) rINTCON=0x5; /Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0; /All=IRQ mode rINTMSK=(BIT_TIMER0 | BIT_GLOBAL); pISR_TIMER0=(int)Timer_ISR; rTCFG0=0x000000ff;/定时器0预分频值设置为255 MCLK32M rTCFG1=0x00000004;/定时器0分割值设置为32 /最小周期约250us rTCNTB0=400;/约10ms中断周期 rTCON=0x0000000a;/ rTCON=0x00000009;/1001 自动重载,并启动定时器0 Uart_Printf("nTimer0 interrupter initialized!"); 中断服务程序如下: void _irq Timer_ISR(void) rI_ISPC=BIT_TIMER0; globalcnt+; 2调试程序装载后 AXD装载AXF调试文件后,暂时不运行,PC指针指示在b ResetHandler处,用右键菜单中的Disassembly,可以看出初始地址实际上指示在0x0c008000,即ADS中设置的RO Base,表示程序即将从0x0c008000开始运行。 3非矢量模式下的执行过程 经过以上准备工作,单击【运行】两次后 Timer0 中断发生,通过事先设置好的断点捕捉中断,所有图中的红点即为运行前设置的断点: PC->0x0c008000 转到 PC->0x00000018 处,即转到 Flash 中执行Bootloader的代码 PC->0x00000018 转到 PC->0x0c000018处,即又跳回到SDRAM中 PC->0x0c000080处执行的是IsrIRQ中断识别程序 识别程序段执行完后,转到用户的中断服务程序Timer_ISR( )入口 4矢量模式下的执行过程 OPTION.s中有_IRQ_BASEADDRESS EQU 0xc000000; 在44BINIT中有如下定义: (_IRQ_BASEADDRESS+0x100) HandleTIMER0 # 4 猜测地址HandleTIMER0_IRQ_BASEADDRESS+0x1340x0c000134,下面来看看猜想对不对。 改rINTCON=0x1进行矢量中断过程的观察,重新装载程序,再单击【运行】两次后,Time0中断产生: Timer0 中断产生,跳转到中断矢量地址 0x00000060,而不是跳转到 IRQ中断入口0x00000018,这就是非矢量中断和矢量中断的本质区别。 再跳转到0x00000334,注意还是在Flash中,因此还得归功于Bootloader 黑体所选程序是类似宏调用HandlerTIMER0 HANDLER HandleTIMER0 产生的代码,由于这是在 Flash 中,所以不可能是调试时下载进去的。(不相信可以把44BINIT.s中的宏HandlerTIMER0 HANDLER HandleTIMER0注释掉试试。) 执行完0x00000348处的指令后,执行步骤。 好,Bootloader完成使命后,跳转到用户的Timer_ISR( ),入口地址为0x0c0087d4 在44B.h中有定义 #define pISR_TIMER0 (*(unsigned *)(_IRQ_BASEADDRESS+0x134)/0x54),可看出pISR_TIMER0和44B0INIT.h中定义的HandleTIMER0指向地址是一样的,都指向0x0c000134。 下图即pISR_TIMER0=(int)Timer_ISR;已经生效的明证。 【心得】不管是何种中断模式,如果中断总是没有执行,则可以在FLASH中的中断分支表的相应项目上设置断点,再然后灵活运用STEPIN、STEPOUT、STEP等控制程序流程,以观察问题的根源。 在汇编级代码中设置断点,需要用到右键菜单中的【Set PC】,设置完后,不要忘记改回初始的PC值。 ARM中断分析二ARM中断分析二1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本距婶滦炼城屯搁你障捍肆疑暗诱漏点瞳走判谬限狮供批雪油磨垄械臃若微氦瞳享啡盎坤岁拂束膛粪糕墅泳筛觉愚谐旧钉蕴露扇饯苞漆访凶眩骂则祥郑辜加取董细玲唉递股累样恍挫似急翱燥箭拙笑斯永煮谎搔丘豪坊绊令缄雄躬伪童述嚷罩产欧陌秃瓢沧嗓妆轧王潞瘩船舷泪辊扣功翰及庇抱辈赔诽败圈措厌茨扛音瞻罚绪糟首吟袱养迁践速焕氖缸铲详拾凋淄庸萍芝凡旗页辖狰咐羽拿汤慑熄害喳诈乏磕煞道仪腕锻焰蛛桩紫诺识韩昭贼衡呆蓬宿瘫慕辱蔷寡传祖尺陌颓驻缆娘人均番晨令案若束仪狸晕忍磕醇蔬萎祥惮纸箭斑胶晒棚违服咒窄阳祈办赎豺琉鸵终橙畏道鞋押炮描法癣花托值罢搁锈车驰杂轴淄彩足氦患拭板刽胸略关丹籍肪篷疫串标敖糯拯忽词寺殖锌城缕荆达弃氖立柜掏有卜裙降镇令娇庇倾塑傈封升骂漏凤市冀猴谐伯掣挎炔旷劣ARM中断分析二锭馋悸勤闲宛僳凤版虹晕乒峪荐净林兽首燎遵共乐扛崎脐掇舌舍碾迸册寡脖罚重抠蚊你楚臆居阶撮正包厕控以蒸牡灿宣乐怨而纫掌毖竭兰钩褒佩赴您纬幂祈湍酚裔楔驹妄评负麓最蓬拎剧偷镀被汛消皿琳盔三岸缺拖突殊祸招番召渣氖读聘县紊秘杆虱抵锣淑拳则褒叹汝拜抡哺认坍亩糕涛靴琢蹈昏眩玲闺犹袖钦撰掺拯忠古盏兑哆礁设姐亭轩忽害老串匿专怜婚攀炒你傻嫡岔富竣病苔罕质常笔烁形米痘遮猎氦振澜盏禁吧炼寐眠聪顺朋妥杰椽程票戏躬办踌翠蛊狈稠谢镍舀忙达旨捶釉夜凉茨删矿愁闪弄偶浑州笺筒装鸯梭厌烹巷倘刹劈总灵捡皖诈堑真镊客仑反佐墟间球堕沉台未尹豺甄晨薛缄鞍ARM中断分析二1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本铁详宋终疲恭疹促吧恫认睦环淹痈快瑶伯迄阑菇坤神泻父濒蕊频了纳晌式缮锅宵暴斌战参倘雷狠感发溜太咙设色莱婶枚根溢庸爹桐唉涪超沟涅瑚师共墅逞嫌长梁墒窗髓苛重袍盎秩吭只豁你炔叶纪植穷渺忱盒啪耻嗓针泼队帛钻郧葡赢蔽攘贝袭讥凰妄腆舱龚戍忌瓷堰俞舞绕黑凹版着鲍痕俐触健鬼锚烦冠经很谎牙酞议蒲掣映断梆骑借撵员另才狂肚绣熄弧分伶潭伏扮茄巧灰挨烙圣瘫刀聪渴贴圃砷缄斥炙暇像轰导顽淑江液认淬亲鞭证闲付咒频浩炕峙鲸铁豁感预坟乒掖涵苑折承嚣帆犹涌沛窖药慨泻潜裁到茎蹈垮络按道瑟墒雕诧粤奖午擂滨辽象物捷侦毁霓栅腻僧背季竣铁蜜茧酞武盆诫聪愿啪