仿照6748的例程写了一个6747uart0中断,功能主要是首先接收数据,然后用串口中断发送一个数组,可以正常进入接收,我在接收中给发送寄存器赋值,触发发送中断,单步执行,可以进入中断服务函数,但是变量ID没有检测到变化,并且是直接到if语句,前面的ID 和中断清零没有运行,然后直接退出了中断,串口中断也自己清除了,但是没有发送数据,代码如下
interrupt void UART0()//uart interrupt { volatile unsigned int ID; Uint8 dumy=0; Uint8 datareceive=0; //CSR&= 0xfffe; ID = ((uartid->regs->IIR&(0xE))>>1); EVTCLR1|=0x40;//clear the uart0 interrupt flag //CSR&= 0xfffe; // 关中断 GIE=0 //asm(" NOP 1 "); //ICR = 0xFFF0; // 清除中断标志ICR // switch((uartid->regs->IIR&(0xE))>>1) // { if(((uartid->regs->IIR&(0xE))>>1)==0) { } if(((uartid->regs->IIR&(0xE))>>1)==1) //send interrupt { length=14; if(count<length) { uartid->regs->THR=DownOrder[count]; count++; } if(count>=length) { //uartid->regs->IER&=~(1<1); dumy=uartid->regs->IIR; UART0_Recive; count=1; } } if(((uartid->regs->IIR&(0xE))>>1)==2) //receive { datareceive = uartid->regs->RBR; ReceiveOrder[Relength]=datareceive; Relength++; if(datareceive==0x80) { UART0_Send; uartid->regs->THR=DownOrder[0]; Uart0Flag=0; } } if(((uartid->regs->IIR&(0xE))>>1)==3) { ID = uartid->regs->THR; } }