串行通信控制模塊
STM32W108有兩個串行通信控制器:SC1、SC2,它們爲全雙工同步和異步串行通信提供瞭如下幾個選項:
l SPI(串行外設接口),主從型
l I2C(內部集成電路),主型
l UART(通用異步接收器/發送器),只有SC1
l 接收和發送FIFO和DMA通道,SPI和UART模式
接收和發送FIFOs可以獲得更快的數據傳輸速度,對於高速的SPI和UART,分配專用的接收和發送的DMA通道,以減少CPU的負荷,增加了串行中斷控制器的CPU服務時間。輪詢操作也可以直接訪問串行數據寄存器,圖8.1顯示了串行通信控制器的組件關係。
注:用符號SCx代替SC1和SC2去表示一個寄存器命名中的一部分,例如SCx_Tx表示SC1_Tx和SC2_Tx都有效。
DMA
DMA通道部分介紹瞭如何配置和使用串行接收和傳輸DMA通道。
接收DMA通道有專門的規定來記錄UART接收錯誤,當DMA通道從接收FIFO中傳送一個字符到緩衝區時,它會檢查存儲的奇偶校驗以及幀錯誤狀態標誌。當一個錯誤被標記時,SC1_RXERRA/B寄存器將被更新,標記接收的第一個帶有奇偶校驗或幀錯誤接收字符的偏移量。同樣,如果接收溢出錯誤發生時,SC1_RXERRA/B寄存器標記錯誤偏移量。接收FIFO硬件產生INT_SCRXOVF中斷,並且DMA狀態寄存器會立即指示錯誤,但在這種情況下,該錯誤偏移量是輸入接收FIFO的實際溢出位置之前的4個字符。兩種情況會清除錯誤指示:在SC1_DMACTRL寄存器中設置適當的SC_RXDMARST位,或卸載並重新加載相應的DMA緩衝區。
中斷
UART中斷髮生在以下事件:
l 發送FIFO爲空和最後一個字符移出(根據SCx_INTMODE,SC1_UARTTXIDLE寄存器位從0到1的跳變或爲高電平)
l 發送FIFO從滿到不滿(根據SCx_INTMODE,SC1_UARTTXFREE寄存器位從0到1跳變或爲高電平)
l 接收FIFO從空變爲不空(根據SCx_INTMODE,SC1_UARTRXVAL寄存器位從0到1跳變或爲高電平),
l 發送DMA緩衝區的A/B完成(SC_TXACTA/B由1跳轉到0)
l 接收DMA緩衝區的A/B完成(SC_RXACTA/B由1跳轉到0)
l 接收到的字符奇偶校驗錯誤
l 接收到的字符有幀錯誤
l 接收FIFO滿時,接收字符丟失(接收溢出錯誤)
爲了確保CPU中斷,在第二級的INT_SCxCFG寄存器設置所需的中斷位,並且通過在INT_CFGSET寄存器中將INT_SCx位置1啓用NVIC中的頂級SCx中斷。