1. 程式人生 > >CC3220學習筆記---UART(翻譯)

CC3220學習筆記---UART(翻譯)

當RTSEN為1時,軟體無法通過 UARTCTL暫存器的request-to-send (RTS)位更改 U1RTS輸出值,並且RTS位狀態將被忽略。 6.2.3.1.2  軟體流控制(Modem Status Interrupts) 兩個裝置間的軟體流控制需要使用中斷來指示UART狀態。可使用UARTIM暫存器第一位來讓 U1CTS和U1RI訊號分別產生中斷。可通過使用UARTRIS和UARTMIS暫存器來檢查源遮蔽中斷。這些中斷可使用UARTICR暫存器清除。 6.2.3.2  FIFO操作 UART有兩個16×8 FIFO,一個用於傳送,一個用於接收。兩個FIFO都通過UART Data(UARTDR)暫存器訪問。UARTDR暫存器讀操作返回一個12bit值,它由8個數據位和4個錯誤標誌位組成,而寫操作將8bit資料放入傳送FIFO。 復位後,兩個FIFO都不可用,並被保持為1位元組深度暫存器。FIFO可通過設定UARTLCRH暫存器中的FEN位來啟用。 FIFO的狀態可通過UART Flag(UARTFR)暫存器和UART Receive Status(UARTRSR)暫存器來監測。硬體監測空、滿、溢位狀況。UARTFR暫存器包含空和滿標誌位(TXFE、TXFF、RXFE和RXFF位),UARTRSR暫存器通過OE位顯示溢位狀態。如果禁用FIFO,則空和滿標誌位則按照1位元組深度暫存器狀態進行設定。 FIFO產生中斷的觸發點由UART Interrupt FIFO Level Select (UARTIFLS)暫存器控制。兩個FIFO可單獨配置以在不同水平上觸發中斷。可用的配置有 ?、?、?、?和?。例如,如果接收FIFO選擇了?選項,UART會在接收到4個位元組資料後再產生一個接收中斷。復位後,兩個FIFO都被配置為在 ?記號處觸發中斷。 6.2.3.3  中斷
當檢測到以下條件時,UART會產生中斷:
  • 溢位錯誤
  • Break錯誤
  • 奇偶校驗錯誤
  • 幀錯誤
  • 接收超時
  • 傳送(當在UARTIFLS暫存器中的TXIFLSEL位定義的條件滿足時,或如果UARTCTL中的EOT位置1,當所有傳送資料的最後一個位離開序列器時)
  • 接收(當在UARTIFLS暫存器中的RXIFLSEL位定義的條件滿足時)
所有中斷事件在傳送至中斷控制器之前都會通過或運算加在一起,所以UART在任意給定時間僅能向控制器產生單箇中斷請求。軟體則可以通過讀取UART Masked Interrupt Status(UARTMIS)暫存器以在單箇中斷服務程式中服務多箇中斷事件。 中斷事件可觸發一個控制器級別中斷,可通過設定UART Interrupt Mask(UARTIM)暫存器中相應的IM位來進行定義。如果中斷不可用,源中斷狀態總是可以通過UART Raw Interrupt Status (UARTRIS)暫存器可見。 中斷總是可以通過將 UART Interrupt Clear (UARTICR)暫存器相應的位置1來進行清除(對於UARTMIS和UARTRIS暫存器都是如此)。 在接收FIFO非空,並且在HSE位被清空的整個32bit週期,或在HSE位被設定的64bit週期內未接收到資料時產生一個接收超時中斷。以下兩種方式會清除接收超時中斷:第一種是通過讀取所有資料(或讀取holding暫存器)確定FIFO變空時,第二種是在UARTICR暫存器相應位寫1。 當以下事件之一發生時,接收中斷改變狀態:
  • FIFO啟用並且接收FIFO到達程式設計觸發電平時,RXRIS位置1。在從接收FIFO讀取資料時接收中斷被清除,直到它變為小於觸發電平或在RXIC位寫1清除中斷。
  • 如果禁用FIFO(一個位置深度),並且接收資料從而填充了些位置,RXRIS位被設定。接收中斷通過執行接收FIFO的單個讀取來清除,或通過在RXIC位寫1來清除。
當以下事件之一發生時,傳送中斷改變狀態:
  • 如果FIFO啟用,並且傳送FIFO程序通過程式設計觸發電平,TXRIS位被置1。傳送中斷是基於電平轉換的,因此FIFO必須在程式設計觸發電平之後或無更多傳送中斷髮生時才會寫入。傳送中斷在向傳送FIFO中寫入資料時清除,直到它大於觸發電平,或通過將TXIC位置1清除中斷。
  • 如果禁用FIFO(一個位置深度),並且此位置不存在資料,TXRIS位被設定。通過向傳送FIFO執行單個寫操作業清除它,或將TXIC位置1來清除中斷。
6.2.3.4  迴環操作 通過設定UARTCTL暫存器的LBE位可將UART設為內部迴環模式,以用於診斷或除錯工作。在迴環模式中,UnTx輸出的傳送資料會被UnRx輸入接收。注意,LBE位應在UART啟用前設定。 6.2.3.5  DMA操作 UART提供了一個到 μDMA控制器的介面,並有單獨的傳送和接收通道。可通過UART DMA Control(UARTDMACTL)暫存器來啟動UART的DMA操作。在啟用DMA操作時,如果相關聯的FIFO可傳輸資料,UART在接收和傳送通道啟用一個DMA請求。對於接收通道來說,無論何時,只要在接收FIFO中存在資料,會產生單個傳輸請求。無論何時,在接收FIFO資料量只要達到或高於UARTIFLS暫存器所配置的FIFO觸發水平,都會產生一個突發傳輸請求。對於傳送通道來說,只要傳送FIFO中存在至少一個空位,都會產生單個的傳輸請求。無論何時,只要傳送FIFO所包含的字元少於FIFO觸發水平,都會產生突發請求。單個和突發傳輸請求是否由 μDMA控制器自動處理取決於DMA通道是如何配置的。
要為接收通道啟用DMA操作,需設定DMA Control(UARTDMACTL)暫存器的RXDMAE位。要為傳送通道啟用DMA操作,需要設定UARTDMACTL暫存器的TXDMAE位。UART還可被配置為在接收錯誤發生時讓接收通道停止使用DMA。當UARTDMACR暫存器的DMAERR位置1,並且發生了接收錯誤時,DMA接收請求會自動禁用。可通過清除適當的UART錯誤中斷來清除此錯誤條件。 如果啟用了DMA,當傳輸完成時, μDMA控制觸發一箇中斷。中斷髮生在UART中斷向量上。因此,如果中斷用於UART操作並且DMA啟用,UART中斷處理程式必須設計為處理 μDMA完成中斷。 6.2.4  初始化和配置 啟用並初始化UART,需要進行以下步驟:
  1. 使用UART0CLKEN/UART1CLKEN暫存器啟用UART模組。
  2. 為適當的引腳設定 GPIO_PAD_CONFIG的CONFMODE位。
本節討論使用UART模組所需的步驟。此例中,UART時鐘假設為80MHz,則所需的UART配置為:
  • 115200波特率
  • 8bit資料長度
  • 一個停止位
  • 無奇偶校驗
  • FIFO不可用
  • 無中斷
對UART進行程式設計的第一件事一情應為波特率因子(BRD),因為UARTI BRD和UARTF BRD暫存器必須在UARTLCRH暫存器之前寫入。使用方式在6.2.2節中描述,BRD可使用如下公式進行計算: BRD = 80,000,000 / (16 * 115,200) = 43.410590 這意味著UARTIBRD暫存器的DIVINT欄位應設定為十進位制的43或0x2B。將載 入UARTFBRD暫存器的值應按照如下公式進行計算: UARTFBRD[DIVFRAC] = integer(0.410590 * 64 + 0.5) = 26 手握BRD值,使用以下順序將UART配置寫入模組:
  1. 清除UARTCTL暫存器的UARTEN位來禁用UART。
  2. 將BRD的整數部分寫入UARTIBRD暫存器。
  3. 將BRD的小數部分寫入UARTFBRD暫存器。
  4. 將所需串列埠引數寫入UARTLCRH暫存器(此例為0x0000.0060)。
  5. 可選地,配置 μDMA通道並在UARTDMACTL暫存器啟用DMA選項。
  6. 通過設定UARTCTL暫存器的UARTEN位啟用UART。
剩下部分講暫存器,大量圖表,就不翻譯了。看了這個理論部分,再查暫存器,應該很輕鬆了。