仿照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;} }
ju huang:
朋友,这个问题解决了吗?能不能指导一下。