4510B中断问题

[复制链接]
 楼主| leo198336 发表于 2007-4-24 22:02 | 显示全部楼层 |阅读模式
最近在看三星4510B的中断。看了twentyone写的4510B的bootloader,希望可以从中得到启发,因为中断涉及到跳转及remap的问题。但是无奈水平有限,实在是搞不出个所以然来。还请高手指点,最好能发一个完整的中断程序,包括初始化init.s和c语言的中断程序。万分感激。唉,痛不欲生啊简直!!我的邮箱地址leo198336@163.com,谢谢了!!!!
 楼主| leo198336 发表于 2007-4-25 17:03 | 显示全部楼层

源程序

我把源程序贴出来给大家看一下,目的就是要用定时器0产生中断,让led灯以1s为间隔亮灭,用ADS和AXD来调试。实际调试中没办法进irq_exception。还请高手指点。谢谢了。我对中断程序的跳转过程还是有点模糊。<br />init.s<br />IOPMOD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF5000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;I/O口模式寄存器<br />IOPDATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF5008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;I/O口数据寄存器<br />TMOD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF6000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;定时器模式寄存器<br />TDATA0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF6004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;定时器数据寄存器<br />INTMOD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF4000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断模式寄存器<br />INTPND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF4004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断悬挂寄存器<br />INTMSK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3FF4008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断屏蔽寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;irq_exception<br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;Init,CODE,READONLY<br />&nbsp;&nbsp;&nbsp;&nbsp;ENTRY&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Undefined_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;SWI_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Prefetch_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;DataAbort_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;IRQ_Addr<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;FIQ_Addr<br /><br />Reset_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reset_Handler<br />Undefined_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />SWI_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />Prefetch_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />DataAbort_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />IRQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Handler<br />FIQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />Reset_Handler<br />;*********************************&nbsp;&nbsp;&nbsp;&nbsp;<br />;LED&nbsp;Display<br />;*********************************<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,=IOPMOD<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=&ff<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1]<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;R1,=IOPDATA<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;R0,=&00<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;R0,[R1]<br />&nbsp;&nbsp;&nbsp;&nbsp;EOR&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,R0<br /><br />;***************************************<br />;User&nbsp;Stack&nbsp;<br />;***************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=0x3FF0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;=0xE7FF0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;配置SYSCFG,片内4K&nbsp;Cache,4K&nbsp;SRAM<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;R1,[R0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;=0x3FE1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SP指向4K&nbsp;SRAM的尾地址,堆栈向下生成<br />;***************************************<br />;Interrupt&nbsp;Special&nbsp;Registers<br />;***************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,=INTMOD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设置中断模式寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=&00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1]<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,=INTMSK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设置中断屏蔽寄存器,只允许定时器0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=&1FFbFF<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1]<br />;**************************************<br />;Timer0&nbsp;Special&nbsp;Registers<br />;**************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,=TDATA0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;定时器0的数据寄存器装入初始化值<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=&1FFBFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;1s中断一次<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1]<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,=TMOD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;使能定时器0<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=&01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1]<br />&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;循环等待中断发生<br />;*************************************************<br />;Timer0&nbsp;Interrupt&nbsp;Service&nbsp;Routine<br />;*************************************************<br />IRQ_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STMFD&nbsp;SP!,{R0-R6,LR}<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;R1,=INTPND<br />&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;irq_exception<br />&nbsp;&nbsp;&nbsp;&nbsp;LDMFD&nbsp;SP!,{R0-R6,LR}<br />&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;PC,LR,#4<br />&nbsp;&nbsp;&nbsp;&nbsp;END<br /><br /><br />irq_exception.c<br /><br />#define&nbsp;IOPDATA&nbsp;&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x3FF5008)<br /><br />void&nbsp;irq_exception()<br />&nbsp;{<br />&nbsp;&nbsp;if(IOPDATA==0x0)<br />&nbsp;&nbsp;IOPDATA=0xf;<br />&nbsp;&nbsp;else&nbsp;IOPDATA=0x0;<br />&nbsp;}&nbsp;<br />
tianying1 发表于 2007-4-26 08:59 | 显示全部楼层

调试中断

<br />&nbsp;&nbsp;&nbsp;&nbsp;如果你调试的时候一直单步运行,的确无法进入中断服务程序。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;你可以在中断服务程序处设置一个断点,然后点击&quot;GO&quot;运行,就可以进去了。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部