[求助]關(guān)于ch432t的中斷

你好,想請問一下,我現(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。這個會是什么原因呢?

還有一個問題就是,我發(fā)送是不段循環(huán)的,間隔5秒,但是它什么都沒有發(fā)生出來,然后我讀取了IERde寄存器,發(fā)現(xiàn)數(shù)值變?yōu)?x60,也就是說他休眠了,這個是什么原因?。?/p>


你現(xiàn)在首先要確定的一點是MCU和CH432的通信接口能正常通信,這個測試很簡單,你就是往CH432的寄存器里寫數(shù)據(jù),然后讀出來,看看這個值跟你寫的是否一樣,如果不同,那么接口程序上有問題,這種情況很容易出現(xiàn)寄存器配置不正確,造成CH432工作異常。 如果接口測試沒有問題,你直接把發(fā)送中斷打開,打開方式比如直接開串口1的發(fā)送中斷,往串口1的IER寄存器寫入0x03,然后一直發(fā)數(shù)據(jù),如果這時候正常,你看看你的開啟發(fā)送中斷的函數(shù)是不是有可能被接收中斷給打斷,造成這種情況。 另外問一下,你現(xiàn)在是用CH432來和485通訊嗎?


呃,我是連接232,那我試試不開接收中斷看看,因為我測試的時候只是發(fā)送的,如果照你說的,要一開始就開發(fā)送中斷,那不是一直有中斷過來,我只想在發(fā)送數(shù)據(jù)的時候開,沒有發(fā)送的時候就關(guān)閉,另外我接收數(shù)據(jù)是正常的,432的寄存器有讀取過數(shù)據(jù),初始值是正確的,我修改后再讀出來也是正確的,不是連接問題


發(fā)送中斷一開始就打開,不會影響你現(xiàn)在的工作狀態(tài),發(fā)送空中斷產(chǎn)生是FIFO中從有數(shù)據(jù)到無數(shù)據(jù)的一個狀態(tài)過程產(chǎn)生的中斷,不會一直產(chǎn)生發(fā)送空中斷。你現(xiàn)在這樣做,感覺操作有點繁瑣了。


你現(xiàn)在線路狀態(tài)中斷有沒有打開,你現(xiàn)在直接初始化的時候就把發(fā)送空中斷打開,后面就不用開或關(guān)發(fā)送中斷了,試試看還有沒有問題。


線路中斷有打開,也查詢過線路狀態(tài)寄存器, 有個疑問:資料里面不是寫著是FIFO為空就產(chǎn)生嗎?


發(fā)送空中斷應(yīng)該是THR從有數(shù)據(jù)到無數(shù)據(jù)產(chǎn)生的一個中斷,不是只要空就產(chǎn)生中斷,你的線路狀態(tài)寄存器讀出來值是多少。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频