在利用uart進行資料操作之前,先來了解uart的操作過程是怎樣的。
(1)設定i/o連線到uart。
(2)設定串列埠波特率。
(3)傳送或接收資料。
(4)檢查串列埠狀態字或等待串列埠中斷。
關於串列埠的操作主要由以下幾個函式來實現。
1.串列埠初始化函式uartinit(uint32_t baudrate)
uartinit函式根據從主程式傳遞的引數——波特率對串列埠進行初始化,包括對資料傳輸格式的設定,fifo的設定等。程式原始碼如下所示:
void uartinit(uint32_t baudrate)
/* 使能uart中斷*/
nvic_enableirq(uart_irqn);
#if tx_interrupt
lpc_uart->ier = ier_rbr | ier_thre | ier_rls;
#else
lpc_uart->ier = ier_rbr | ier_rls;
#endif
return;
}
根據上面的程式來分析,可以得到關於uart的最基本的乙個配置流程:
(1)在uart的時鐘使能之前需要在ioconfig暫存器模組中配置uart的引腳,即uart rxd與uart txd。
(2)使能uart的時鐘。
(3)使能uart外設時鐘。
只有當這些都設定好之後,接在uart上面的外設才能進行下一步的操作。在這些設定好之後,在進行資料傳輸之前,需要對資料的格式進行定義,比如說,在這裡定義的被傳輸的資料格式為:8個資料位、乙個停止位、無奇偶校驗。然後再進行緩衝區的清空操作,使能中斷就可以了。
2.uart中斷處理函式uart_irqhandler(void)
uart_irqhandle函式用於在發生uart中斷時,對不同的中斷源進行相應的中斷處理。可配置的中斷型別為iir_rda、iir_cti、iir_thre等,對應的中斷型別奇偶校驗錯誤、傳輸資料暫存器空、傳輸完成中斷、接收資料準備好、檢測到edle、打斷標誌、cts標誌等。程式原始碼如下所示:
void uart_irqhandler(void)
if (lsrvalue & lsr_rdr) /* 如果中斷型別是rdr */
}} else if (iirvalue == iir_rda) /*如果有資料*/
}else if (iirvalue == iir_cti) /*超時 */
else if (iirvalue == iir_thre) /*傳送保持暫存器為空時*/
else
} return;
}
上面的中斷處理函式中,首先將中斷id暫存器中的內容讀出來,然後將其右移一位,忽略掉最低位——中斷狀態位,這樣就取得了中斷id號,然後根據id號對應的不同中斷執行不同的操作。例如,當程式中產生了「接收資料可獲得」中斷的時候,則會通過uartbuffer[uartcount++] = lpc_uart->rbr語句將接收緩衝暫存器中的內容存到buffer中。同時,在讀取接收緩衝暫存器中的內容時,中斷也將會被自動地清除。
3.資料傳送函式uartsend(uint8_t *bufferptr, uint32_t length)
uartsend函式可用來向uart口傳送資料。串列埠傳送資料的方式就是當串列埠準備好傳送資料後,直接向傳送保持暫存器寫資料。下面的程式中直接操作串列埠的傳送保持暫存器進行資料的傳輸。
void uartsend(uint8_t *bufferptr, uint32_t length)
//引數分別為緩衝區的指標和資料的長度
return;
}
4.例項原始碼主程式main()
主程式原始碼如下所示:
printf("\r\n\r\n-- uart test --");
printf("\r\nplease input a number on the keyboard:\r\n"); //向終端列印語句
scanf("%d", &i);
printf("\r\n%d", i);
printf("\r\n\r\nplease input any key on the keyboard:\r\n");
while(1) //輪詢
}}
利用上面的程式**可以完成這樣的乙個功能:
設定好波特率以及幀的格式,開啟乙個終端之後,終端上首先會列印出「please input a number on the keyboard」這樣的提示資訊,每次使用者按按鍵之後,開發板串列埠會接收到這些資訊,然後通過uartsend()函式將這些資料回傳到串列埠,這樣就可以在終端上看到輸入的內容了。
設計原則與軟體設計
眾所周知,設計原則是設計模式的基石。當遵循設計原則的時候,寫出的 就會變得非常靈活,並且可以應對變化,也更加容易維護。當然,也不是那麼絕對。下面首先會簡要介紹一些基本的設計原則,然後再介紹robert c.martin的s.o.l.i.d原則。1 設計原則簡述 kiss原則 keep it stup...
建模 軟體設計分析
一 基本流程 1 分析階段 an analysis 2 設計階段 bd basic design fd functional design 功能設計 dd detial design 3 編碼階段 cd coding 4 測試階段 ut unit testing 單元測試 ct component ...
軟體設計與UML
軟體設計流程 1.問題定義階段 2.可行性研究階段 3.需求分析 解決軟體 做什麼 的問題 功能需求 效能需求 使用者和人的因素 環境需求 介面需求 文件需求 資料需求 資源需求 安全保密需求 可靠性需求 軟體成本消耗和開發進度需求 其他非功能性需求 uml 用例圖 狀態圖 時序圖 4.系統設計 1...