1. 程式人生 > >時間觸發嵌入式系統設計模式 第18章 筆記 通過RS-232與 PC通訊

時間觸發嵌入式系統設計模式 第18章 筆記 通過RS-232與 PC通訊

時間觸發嵌入式系統設計模式 第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

(稍後補充)— 需要針對 迴圈緩衝區的實現 整理一個文件