使用輪詢方式發送:
1、檢查TxFIFO是否爲空。等待直到TxFIFO爲空。
2、向TxFIFO寫數據。如果要發送的數據大於64字節,則先將64字節寫入。
3、寫入剩下的字節。有兩種方法:a.檢查TxFIFO是否爲非滿,如果爲非滿,則寫入一個字節,直到寫完要發送的數據。b.檢查TxFIFO是否爲空,如果爲空,則跳到2,直到寫完要發送的數據。
使用中斷方式發送:
1、禁用TxFIFO空中斷。
2、向TxFIFO寫數據。如果要發送的數據大於64字節,則先將64字節寫入。
3、檢查TxFIFO是否爲非滿,如果爲非滿,則寫入一個字節,繼續檢查,如果非滿則繼續寫入,否則進行下一步。
4、允許TxFIFO空中斷。
5、等待空中斷。中斷產生後跳到1。
使用輪詢方式接收:
1、等待直到RxFIFO填充到某個程度,即trigger level,或者TIMEOUT。(TIMEOUT用於在一定時間內RxFIFO內數據少於trigger level時也能將數據讀出)
2、從RxFIFO中讀數據,直到RxFIFO空。
3、如果TIMEOUT中斷狀態置位,則清除該置位。
使用中斷方式接收:
1、允許中斷。
2、RxFIFO填充到trigger level或者TIMEOUT時觸發中斷。
3、從RxFIFO中讀數據。
4、重複2、3直到RxFIFO空。
5、如果中斷狀態置位,則清除該置位。trigger level中斷和TIMEOUT中斷。
u32 XUartPs_Send(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes):
非阻塞發送,如果設備忙,將返回並指示發送了0個字節,該函數儘可能地填充FIFO並返回發送的字節數。
如果發送0字節,則會停止之前還未完成的發送,因爲該函數開頭有禁止中斷的操作。
在輪詢模式下,該函數只能發送FIFO能緩衝的字節數,想要發送更多字節,需要重複調用該函數。
在中斷模式下,該函數會首先發送N個字節,接着中斷句柄會發送剩餘的字節直到發完。會有一個回調函數來指示發送的完成。
u32 XUartPs_Recv(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes):
非阻塞接收。
在輪詢模式下,只接收FIFO中已經存在的數據,如果要接收所有數據,則需要重複調用該函數。
在中斷模式下,先接收FIFO中已經存在的數據,如果沒有接收完所有數據,則中斷句柄會繼續接收直到所有數據接收完。會有一個回調函數來指示接收的完成或錯誤的發生。