打印

4510B中断问题

[复制链接]
1892|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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。还请高手指点。谢谢了。我对中断程序的跳转过程还是有点模糊。
init.s
IOPMOD        EQU        0x3FF5000        ;I/O口模式寄存器
IOPDATA        EQU        0x3FF5008        ;I/O口数据寄存器
TMOD        EQU        0x3FF6000        ;定时器模式寄存器
TDATA0        EQU        0x3FF6004        ;定时器数据寄存器
INTMOD        EQU        0x3FF4000        ;中断模式寄存器
INTPND        EQU        0x3FF4004        ;中断悬挂寄存器
INTMSK        EQU        0x3FF4008        ;中断屏蔽寄存器
    IMPORT  irq_exception
    AREA    Init,CODE,READONLY
    ENTRY 
    LDR     PC, Reset_Addr
    LDR     PC, Undefined_Addr
    LDR     PC, SWI_Addr
    LDR     PC, Prefetch_Addr
    LDR     PC, DataAbort_Addr
    NOP
    LDR     PC, IRQ_Addr
    LDR     PC, FIQ_Addr

Reset_Addr           DCD     Reset_Handler
Undefined_Addr       DCD     0
SWI_Addr             DCD     0
Prefetch_Addr        DCD     0
DataAbort_Addr       DCD     0
DCD                  
IRQ_Addr             DCD     IRQ_Handler
FIQ_Addr             DCD     0

Reset_Handler
;*********************************    
;LED Display
;*********************************

    LDR    R1,=IOPMOD
    LDR    R0,=&ff
    STR    R0,[R1]
    LDR R1,=IOPDATA
    LDR R0,=&00
    STR R0,[R1]
    EOR    R0,R0,R0

;***************************************
;User Stack 
;***************************************
    LDR    R0, =0x3FF0000         
    LDR    R1, =0xE7FF0000        ;配置SYSCFG,片内4K Cache,4K SRAM
    STR R1,[R0]          
    LDR    SP, =0x3FE1000        ;SP指向4K SRAM的尾地址,堆栈向下生成
;***************************************
;Interrupt Special Registers
;***************************************
    LDR    R1,=INTMOD            ;设置中断模式寄存器
    LDR    R0,=&00000000
    STR    R0,[R1]
    LDR    R1,=INTMSK            ;设置中断屏蔽寄存器,只允许定时器0中断
    LDR    R0,=&1FFbFF
    STR    R0,[R1]
;**************************************
;Timer0 Special Registers
;**************************************
    LDR    R1,=TDATA0            ;定时器0的数据寄存器装入初始化值
    LDR    R0,=&1FFBFF       ;1s中断一次
    STR    R0,[R1]
    LDR    R1,=TMOD            ;使能定时器0
    LDR    R0,=&01                
    STR    R0,[R1]
    B   .                        ;循环等待中断发生
;*************************************************
;Timer0 Interrupt Service Routine
;*************************************************
IRQ_Handler 
    STMFD SP!,{R0-R6,LR}
    LDR R1,=INTPND
    BL irq_exception
    LDMFD SP!,{R0-R6,LR}
    SUBS PC,LR,#4
    END


irq_exception.c

#define IOPDATA  (*(volatile unsigned *)0x3FF5008)

void irq_exception()
 {
  if(IOPDATA==0x0)
  IOPDATA=0xf;
  else IOPDATA=0x0;
 } 

使用特权

评论回复
板凳
tianying1| | 2007-4-26 08:59 | 只看该作者

调试中断


    如果你调试的时候一直单步运行,的确无法进入中断服务程序。

    你可以在中断服务程序处设置一个断点,然后点击"GO"运行,就可以进去了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝