打印
[ZLG-ARM]

系统有FIQ中断,但发生了IRQ中断,一直不能进入?

[复制链接]
2298|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hpy013|  楼主 | 2008-1-7 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgarm| | 2008-1-7 13:13 | 只看该作者

看看你的程序

hpy013 您好:

1.确定,是否打开了内核中的IRQ中断.

2.确定程序是否正确下载到芯片里.
              
                          By  zlgarm_zhp

使用特权

评论回复
板凳
hpy013|  楼主 | 2008-1-7 17:58 | 只看该作者

我还是有点感觉有点奇对IRQ中断处理程序或者FIQ中断程序部

可能有点问题,不过还不清楚。为什么有时候可以,而有时候就不可以。
按理说,完成FIQ,就应该跳回去执行IRQ中断。
看来得花点时间,再找找。那位如果解决过有此类情况,欢迎能给小弟提供一下。
我的是FIQ,是Timer0 0.5S的中断。产生16个脉冲。TOIR=0x00,结束中断。
IRQ中断是USBDMA传输中断。现在是:不打开FIQ中断,USB(IRQ)中断,没问题。一旦打开FIQ中断(在USB枚举后),好象程序一直再出来FIQ中断,不过IRQ有1~2次成功,但再继续就不行了。有时候,一次IRQ中断也不行。
我现在修改了FIQ_STACK_LEGTH大小了。设置成512。

;设置系统模式堆栈 也做了修改。
        MSR     CPSR_c, #0x1f ;原来是0xdf。
        LDR     SP, =StackUsr

        MOV     PC, R0

欢迎大家帮我看看。谢谢zlgarm。

使用特权

评论回复
地板
zlgarm| | 2008-1-7 19:28 | 只看该作者

FIQ

hpy013  您好:

有没有将Timer0的中断标志,清除掉?

                By  zlgarm_zhp

使用特权

评论回复
5
hpy013|  楼主 | 2008-1-7 20:10 | 只看该作者

不好意思,上面写错了

 TOIR=0x01 清除了。也不知道怎么回事,我现在的程序,FIQ后,能进行一次IRQ中断。总算比以前好了那么一点点。

使用特权

评论回复
6
hpy013|  楼主 | 2008-1-7 20:41 | 只看该作者

我的FIQ中断程序:

//****************FIQ部分的程序****************************
extern     void Pulses(void);

        void FIQ_Exception(void)
{
 
  Pulses();                  // change it to your code  这一句替换为自己的代码
  
 }

/*********************************************************/



下面是Pluses部分的程序
;-------------Pulses()------------------------------------
AREA    AsmFunc, CODE, READONLY
    EXPORT    Pulses
    IMPORT  send_data
Pulses
    STMFD    SP!, {R0-R10, LR}        ;入栈
    
    LDR     R10,=send_data
    LDR     R0, [R10]
    MOV     R2, #0x10                ;LR数据长度
    MOV     R3, #0x200               ;P0.9 MCK
    MOV     R1, #0x10                ;P0.4 DIN
    LDR     R9, =0xE0004000    
    LDR     R8, =0xFFFFF030    
    MOV     R7, #0
    
    LDR        R4, =0x3FFFC01C            ;FIO0CLR0
    LDR        R5, =0x3FFFC018            ;FIO0SET0
    
    MOV        R6, #0x80                ;P0.7 WS 
;WS=0 16位循环    
LOOP    
    
    STR        R3, [R4]       ;MCK=0
    STR        R6, [R4]       ;WS=0
    
LOOP3
    STR        R3, [R4]       ;MCK=0
       TST     R0, #0x80000000
    BNE     LOOP1
    STR        R1, [R4]       ;DOUT=0
    B       LOOP2
    
LOOP1

       STR        R1, [R5]       ;DOUT=1
       
LOOP2 
   
    MOV     R7, R0,LSL #1
    MOV        R0, R7
    STR        R3, [R5]       ;MCK=1
    SUBS     R2, R2,#1
    BHI     LOOP3
    MOV     R2, #0x10
    LDR     R0, [R10]
    MOV     R10,R0,LSL #16
    MOV     R0, R10
;WS=1 16位循环        
LOOP_SMALL
    STR        R3, [R4]       ;MCK=0
    STR        R6, [R5]       ;WS=1
    
LOOP_SMALL3
    STR        R3, [R4]       ;MCK=0
    TST     R0, #0x80000000
    BNE     LOOP_SMALL1
    STR        R1, [R4]       ;DOUT=0
    B       LOOP_SMALL2
    
LOOP_SMALL1
    STR        R1, [R5]       ;DOUT=1
LOOP_SMALL2
   
    MOV     R7, R0,LSL #1
    MOV        R0, R7     
    STR        R3, [R5]       ;MCK=1
    SUBS    R2, R2,#1
    ;CMP    R2, #0
    BHI     LOOP_SMALL3
;循环结束
    MOV     R7, #0x01
    STR        R7, [R9]
    
    MOV        R6, #0x00
    STR        R6, [R8]
    
    LDMFD    SP!, {R0-R10, LR}        ;返回
    
    END
;--------------------------------------------------------

使用特权

评论回复
7
hpy013|  楼主 | 2008-1-7 21:11 | 只看该作者

继续

通过仿真调试,发现程序在以下范围内。不去执行USB了


;______________________________________________________
;取数据中止
DataAbort
        B       DataAbort

;快速中断
FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
       
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4


;______________________________________________________

而且IRQ中断也不知道什么时候,就被一直关闭了。
大伙帮忙看看,我可没有关闭IRQ啊。

使用特权

评论回复
8
hpy013|  楼主 | 2008-1-7 21:55 | 只看该作者

哈哈,有一点进展了

原来我对存储器加速模块的设置的值进行了修改,也会受到影响。
现在改回去了,不过好想可以发生IRQ的次数要多些了。再找问题。各位高手也帮我看看啊~~

使用特权

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

本版积分规则

51

主题

516

帖子

1

粉丝