TMS320f2812的串口中断的问题 在串口使用时,不通过中断接收和发送信息使用了下面的例程可以实现信息的发送与接收,通过串口调试助手收到,但是使用了中断以后,程序不执行。 我的个人分析是在程序中加了标志位,使得部分串口中断程序没有执行,所以只能使用分时收发。 下面为不是中断执行的程序: Send_Flag = 0; #if SCIA_INT /*设置中断服务程序入口地址*/ EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TXAINT = &SCITXINTA_ISR; PieVectTable.RXAINT = &SCIRXINTA_ISR; EDIS; // This is needed to disable write to EALLOW protected registers /*开中断*/ IER |= M_INT9; #endif EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM for(;;) { if((SciaTx_Ready() == 1) && (Send_Flag == 1)) { SciaRegs.SCITXBUF = Sci_VarRx; Send_Flag = 0; i++; if(i == j) { i = 0; j = 0; } } #if !SCIA_INT if(SciaRx_Ready() == 1) { Sci_VarRx[j] = SciaRegs.SCIRXBUF.all; Send_Flag = 1; j++; if(j == 100) { j = 0; } } #endif } 使用串口中断程序如下: 我将标志位删除后,执行改程序, #include "DSP28_Device.h" unsigned int Sci_VarRx[100]; unsigned int i,j; unsigned int Send_Flag; unsigned int * Led8 = (unsigned int *) 0x4100; //#define SCIA_INT 1 interrupt void SCITXINTA_ISR1(void); interrupt void SCIRXINTA_ISR1(void); void main(void) { /*初始化系统*/ InitSysCtrl(); /*关中断*/ DINT; IER = 0x0000; IFR = 0x0000; /*初始化PIE中断*/ InitPieCtrl(); /*初始化PIE中断矢量表*/ InitPieVectTable(); /*初始化SCIA寄存器*/ InitSci(); for(i = 0; i < 100; i++) { Sci_VarRx = 0; } i = 0; j = 0; Send_Flag = 0; #if SCIA_INT /*设置中断服务程序入口地址*/ EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TXAINT = &SCITXINTA_ISR1; PieVectTable.RXAINT = &SCIRXINTA_ISR1; EDIS; // This is needed to disable write to EALLOW protected registers /*开中断*/ IER |= M_INT9; #endif EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM for(;;) { if(1 && (Send_Flag == 1)) { SciaRegs.SCITXBUF = Sci_VarRx[0]; while(SciaRegs.SCICTL2.bit.TXRDY!=1); Send_Flag = 0; i++; if(i == j) { i = 0; j = 0; } } #if !SCIA_INT if(SciaRx_Ready() == 1) { Sci_VarRx[j] = SciaRegs.SCIRXBUF.all; Send_Flag = 1; j++; if(j == 100) { j = 0; } } #endif } } interrupt void SCITXINTA_ISR1(void) { } interrupt void SCIRXINTA_ISR1(void) { DINT; PieCtrl.PIEACK.bit.ACK9=1; Sci_VarRx[0] = SciaRegs.SCIRXBUF.all; Send_Flag = 1; j++; // if(j == 100) // { // j = 0; // } *Led8=j; SciaRegs.SCICTL1.bit.SWRESET =1; PieCtrl.PIEIFR9.bit.INTx1=1; EINT; } 程序虽然编译正确,但是程序没有执行,请问这是什么原因?