串口中斷的疑問

請問ch57X 的串口中斷,如果接收到的數(shù)據(jù)長度和FIFO設(shè)置的一樣,是不是只能進(jìn)入U(xiǎn)ART_II_RECV_RDY,而不會(huì)觸發(fā)UART_II_RECV_TOUT?

那這樣的話UART_II_RECV_TOUT這個(gè)中斷感覺并沒有什么用?。?/p>


我的串口初始化配置:

```

? ? /* 配置UART3 */

? ? GPIOA_SetBits( GPIO_Pin_5 );

? ? GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? ? ?// RXD-配置上拉輸入

? ? GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );? ? ? ? ? ? ? // TXD-配置推挽輸出,注意先讓IO口輸出高電平

? ? UART3_DefInit(? );

? ? UART3_BaudRateCfg( 9600 );

? ? UART3_ByteTrigCfg( UART_7BYTE_TRIG );

? ? UART3_INTCfg( ENABLE, RB_IER_RECV_RDY );

? ? PFIC_EnableIRQ( UART3_IRQn );


? ? UART3_Data.RxCount = 0;

```

我的中斷接收:

```

__attribute__( ( interrupt( "WCH-Interrupt-fast" ) ) )

__attribute__( ( section( ".highcode" ) ) )

void UART3_IRQHandler( void )

{

? ? switch ( UART3_GetITFlag(? ) )

? ? {

? ? ? ? case UART_II_RECV_RDY :? ? ? ? ? ????// 數(shù)據(jù)達(dá)到設(shè)置觸發(fā)點(diǎn)

????????????UART3_Data.RxCount += UART3_RecvString( UART3_Data.RxBuff+UART3_Data.RxCount );? ? ?// 拷貝數(shù)據(jù)

? ? ? ? ? ? break;

? ? ? ? case UART_II_RECV_TOUT :? ? ? ?????// 接收超時(shí),暫時(shí)一幀數(shù)據(jù)接收完成

? ? ? ? ? ? UART3_Data.RxCount += UART3_RecvString( UART3_Data.RxBuff+UART3_Data.RxCount );? ? ?// 拷貝結(jié)尾數(shù)據(jù)

? ? ? ? ? ? UART3_Logic_Handler(? );

????????????UART3_Data.RxCount = 0;

? ? ? ? ? ? break;

? ? ? ? default :

? ? ? ? ? ? break;

? ? }

}

```


這個(gè)代碼的效果是如果接受到的數(shù)據(jù)長度是 7 的整數(shù)倍,那只會(huì)進(jìn)入 UART_II_RECV_RDY 中斷,

其他情況,如果小于7字節(jié)會(huì)進(jìn)入?UART_II_RECV_TOUT 中斷。

如果大于7字節(jié)則會(huì)在接收完畢之前進(jìn)入n次UART_II_RECV_RDY 中斷,最后再進(jìn)入一次UART_II_RECV_TOUT 中斷。


請問7字節(jié)及其整數(shù)倍的時(shí)候只能自己判斷是不是接受完畢嗎?那UART_II_RECV_TOUT中斷沒有意義啊?

這個(gè)UART_II_RECV_TOUT產(chǎn)生的前提是fifo里面有數(shù)據(jù),

你可以在UART_II_RECV_RDY中斷里留一個(gè)數(shù)據(jù)在fifo里,這樣就可以保證每次都能產(chǎn)生 UART_II_RECV_TOUT


在主貼提供的代碼中,代碼" UART3_ByteTrigCfg( UART_7BYTE_TRIG ); "的作用是:

當(dāng)串口硬件RX fifo中的數(shù)據(jù)達(dá)到7字節(jié)時(shí)候,將產(chǎn)生UART_II_RECV_RDY 中斷,

換句話說,只有當(dāng)該串口的硬件RX FIFO 大于等于7字節(jié)才會(huì)產(chǎn)生該中斷,

如果一次接收, 前面的數(shù)據(jù)已經(jīng)在UART_II_RECV_RDY中取走,剩下的硬件RX FIFO里仍然有數(shù)據(jù),而又連續(xù)4個(gè)byte的時(shí)間不再接收到數(shù)據(jù)進(jìn)來, 即會(huì)在觸發(fā)UART_II_RECV_TOUT

此時(shí)讀取硬件RX FIFO 里的數(shù)據(jù)方法與UART_II_RECV_RDY 一致.



UART_II_RECV_TOUT和UART_II_RECV_RDY一樣處理就行了,TOUT并不是必現(xiàn)的中斷而已。


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

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