你好,想请问一下,我现在432能接收数据,发送数据是在需要发送的时候把发送的中断打开的,但是发现程序中发送中断打开,产生一个奇怪的中断后,就不发生发送中断了,这个是什么原因呢?程序如下: 这个是开启或者关闭发送中断函数 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); } 这个是发送函数: 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) {/*如果要求写入同步(即串口数据完全发送完成后,才返回该函数)*/ while(!QUEUE_IsEmpty(&Spi_Ucb[PortNum].QWrite)) OSTimeDly(1); } return r; } 这个是中断函数,我的中断很简单,只要发生中断,我就发一个信号量,另外一个函数处理中断: void Spi_CH432Interrupt(uint8_t PortNum) /* 中断方式处理 */ { Spi_uart_int_Msg msg_tmp; //有其中任何一个产生中断,那么就发送信号量 msg_tmp.PortNum = PortNum; QUEUE_Write(&Spi_Int_Msg_Queue,&msg_tmp,sizeof(Spi_uart_int_Msg)); OSSemPost(Spi_uart_Sem); } 然后是处理函数,就是读取中断的数值,对应哪个中断就处理那个。。。。。
我现在的问题是:我只是用串口1,串口0关闭的,一打开发送中断,发生一个中断后,我读取的两个IIR的数值分别为0x3f和0x01。这个会是什么原因呢?