你好,想請問一下,我現(xiàn)在432能接收數(shù)據(jù),發(fā)送數(shù)據(jù)是在需要發(fā)送的時候把發(fā)送的中斷打開的,但是發(fā)現(xiàn)程序中發(fā)送中斷打開,產(chǎn)生一個奇怪的中斷后,就不發(fā)生發(fā)送中斷了,這個是什么原因呢?程序如下: 這個是開啟或者關(guān)閉發(fā)送中斷函數(shù) static void Spi_Uart_SendInt_EN(uint8_t PortNum,uint8_t is_enable) { uint8_t ier_status=0; uint8_t uart_num=PortNum%2; //SPI_Open(SPI_UART_PORT,SPI_UART_CLKRATE); if(is_enable) { ier_status = ReadCH432Data(CH432_IER_PORT(uart_num)); ier_status |= BIT_IER_IETHRE; WriteCH432Data(CH432_IER_PORT(uart_num),ier_status); } else { ier_status = ReadCH432Data(CH432_IER_PORT(uart_num)); ier_status &= ~BIT_IER_IETHRE; WriteCH432Data(CH432_IER_PORT(uart_num),ier_status); } //SPI_Close(SPI_UART_PORT); } 這個是發(fā)送函數(shù): uint32_t Spi_Uart_Write(uint8_t PortNum,uint8_t* pBuffer,uint32_t Len,uint8_t IsSync) { uint32_t r=0; uint8_t uart_num=PortNum%2; if(PortNum>=MAX_COM_NUM) return 0;//無效端口,不能寫入. if(Spi_Uart_IsOpened(PortNum)==0x00) {//串口末打開,不能寫入. return 0; } r=QUEUE_Write(&Spi_Ucb[PortNum].QWrite,pBuffer,Len); if(r) { //NVIC_DisableIRQ(GPIO_IRQn); Spi_Uart_SendInt_EN(PortNum,1); //NVIC_EnableIRQ(GPIO_IRQn); } if(IsSync) {/*如果要求寫入同步(即串口數(shù)據(jù)完全發(fā)送完成后,才返回該函數(shù))*/ while(!QUEUE_IsEmpty(&Spi_Ucb[PortNum].QWrite)) OSTimeDly(1); } return r; } 這個是中斷函數(shù),我的中斷很簡單,只要發(fā)生中斷,我就發(fā)一個信號量,另外一個函數(shù)處理中斷: void Spi_CH432Interrupt(uint8_t PortNum) /* 中斷方式處理 */ { Spi_uart_int_Msg msg_tmp; //有其中任何一個產(chǎn)生中斷,那么就發(fā)送信號量 msg_tmp.PortNum = PortNum; QUEUE_Write(&Spi_Int_Msg_Queue,&msg_tmp,sizeof(Spi_uart_int_Msg)); OSSemPost(Spi_uart_Sem); } 然后是處理函數(shù),就是讀取中斷的數(shù)值,對應(yīng)哪個中斷就處理那個。。。。。
我現(xiàn)在的問題是:我只是用串口1,串口0關(guān)閉的,一打開發(fā)送中斷,發(fā)生一個中斷后,我讀取的兩個IIR的數(shù)值分別為0x3f和0x01。這個會是什么原因呢?