時間觸發嵌入式系統設計模式 第18章 筆記 通過RS-232與 PC通訊
阿新 • • 發佈:2018-11-10
時間觸發嵌入式系統設計模式 第18章 筆記
PC上 軟體 例子:
參考 : Axelson(1998)
Serial Port Complete: Programming and Circuits for Rs-232 and Rs-485 Links and Networks
E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_PC_UART_Menu
程式碼:
2 實現方式 用到了 迴圈緩衝區
沒有用到 串列埠中斷,
是通過輪詢的方式,將緩衝區中的資料通過串列埠一個一個傳送出去的。
static unsigned char Recv_buffer[RECV_BUFFER_LENGTH]; static unsigned char Tran_buffer[TRAN_BUFFER_LENGTH]; //PC_LINK_Get_Char的返回值,如果緩衝區中沒有字元 /*------------------------------------------------------------------*- PC_LINK_IO_Update() 在 UART (硬體)接收緩衝區中檢查字元傳送軟體,傳送緩衝區中的下一個字元 -*------------------------------------------------------------------*/ void PC_LINK_IO_Update(void) { // 這裡處理髮送位元組 // 是否有資料準備傳送 ? if (Out_written_index_G < Out_waiting_index_G) { if( UART_IS_TX_EMPTY(UART0) == 1){ PC_LINK_IO_Send_Char(Tran_buffer[Out_written_index_G]); Out_written_index_G++; } } else { // 沒有資料需要傳送- 僅僅復位緩衝區指標 Out_waiting_index_G = 0; Out_written_index_G = 0; } // 這裡只處理接收位元組 // -> 檢查 RI 標誌 if (UART_IS_RX_READY(UART0) == 1) { // 只有當接收到一個有效的停止位時 ,接收標誌RI才置1 // -> 已有資料需要被讀取到接收緩衝區中, // 如果舊的資料已經讀取,希望讀取指標 0 // (簡單的迴圈緩衝區) if (In_waiting_index_G == In_read_index_G) { In_waiting_index_G = 0; In_read_index_G = 0; } // 從USART 緩衝區中讀取資料 Recv_buffer[In_waiting_index_G] = UART_READ(UART0); if (In_waiting_index_G < RECV_BUFFER_LENGTH) { // 加1 且緩衝區不溢位 In_waiting_index_G++; } } }
In_waiting_index_G 進入buffer的字元索引
In_read_index_G 從buffer讀出的索引
迴圈緩衝區,當In_waiting_index_G == In_read_index_G 的時候,設定為0
(稍後補充)— 需要針對 迴圈緩衝區的實現 整理一個文件