打印

中断怎么进不了

[复制链接]
2350|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
云痕|  楼主 | 2008-4-22 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
char *pUART0;  //这个是全局的
main ()
{
int i=1;
UART0_IRQ_init (9600);

VICIntSelect = 0 ;
VICIntEnClr = 1<<6;;
VICVectCntl5 = 0x20|6;           // UART0中断通道分5
VICVectAddr5 = (int)UART0_Handler;        // 设置UART0向量地址
VICIntEnable = 1<<6;            // 使能UART0中断

Uart0_SendString_IRQ(" 12345678901234567890123456789 ");

i=1; //标号2

while(1);

return 0;
}
void UART0_IRQ_init(int UART0_BPS)
{
 uint16 Fdiv0;

 PINSEL0 &= ~(0xF << 4); 
 PINSEL0 |=  (0x5 << 4);  
          
    U0LCR = 0x83;     // 设置除数锁存位,DLAB = 1
    
    Fdiv0 = (Fpclk / 16) / UART0_BPS;  // 设置波特率
    U0DLM = Fdiv0 / 256;       
    U0DLL = Fdiv0 % 256;
    
    U0LCR = 0x03;    //清除锁存,并设置工作模式  
    
    U0FCR = 0x87;   // 使能FIFO,并设置触发点为8字节,复位T0FIFO,R0FIFO 
    U0IER &= 0xf0;   //中断禁止
    U0IER |= 0x03;  //RBA,THRE中断使能
    Fdiv0 = U0IIR; //清除 
}

void Uart0_SendString_IRQ(char *pt)
{
    int i;
    pUART0 = pt;
    while (!(U0LSR & 0x40))
          ;                      //等待发送缓冲为空
   
    U0TER = 0; //禁止发送
    for (i=16;i>0;i--)
        {
            if(*pUART0)
              U0THR = *pUART0++;
        }     
    U0TER = 0x80; //开始发送            编号1
}

void __irq UART0_Handler (void){...}  

仿真时,编号1执行后,U0IIR寄存器=c2,显示产生了发送中断,但是Uart0_SendString_IRQ一旦返回,
箭头到了标号2的行首时,U0IIR=C1,中断标志消失,程序一直往下执行,不会进入中断
我的芯片是LPC2378,启动代码用的NXP给的,相关部分:LDR  PC, [PC, #-0x0120]     ; Vector from VicVectAddr
 最后的CPSR:  MSR     CPSR_c, #Mode_USR
               MOV     SP, R0
               SUB     SL, SP, #USR_Stack_Size 

相关帖子

沙发
云痕|  楼主 | 2008-4-22 18:16 | 只看该作者

我的不是周公的板子啊

编号1执行完毕后,查看VICRawIntr和VICIRQStatus,都已经标识UART0已经产生中断得,就是不响应

使用特权

评论回复
板凳
阿南| | 2008-4-23 12:22 | 只看该作者

中断调试步骤:

1.判断是否能跳转到进入0x18的中断入口.
2.如果没有进入0x18,则检查中断是否有请求等各个标志,中断是否被屏蔽,是否已在IRQ模式等.
3.如果能够进入0x18,说明中断已经有效,接下来要查找为何没有执行到中断的服务程序,此时基本上是中断向量表出错了,或根本不存在等

使用特权

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

本版积分规则

28

主题

75

帖子

0

粉丝