嵌入式技術基礎與實踐-學習札記(二)

嵌入式技術基礎與實踐-學習札記(二)

異步串行通訊的通用基礎知識

串口通訊接口,簡稱「串口」、\(UART\)\(SCI\)\(MCU\)中的串口通訊,在硬件上分爲發送線\((TxD)\)、接受線\((RxD)\)和地線\((GND)\);在通訊方式上,屬於單字節通訊,是嵌入式開發中重要的打樁調試手段。編程

串行通訊的基本概念

「位」\((bit)\)是單個二進制數字的簡稱。在計算機中,一般一個信息單位用\(8\)位二進制表示,成爲一個「字節」\((Byte)\)異步

串行通訊的特色是:數據以字節爲單位、按位的順序(例如最高位優先)從一條傳輸線上發送出去。學習

異步串行通訊的格式

空閒狀態爲"\(1\)",發送器經過發送一個「\(0\)「表示一個字節傳輸的開始,隨後是數據位(在\(MCU\)中通常是\(8\)位或\(9\)位,能夠包含校驗位)。最後,發送器發送「\(1\)「表示一個字節傳送結束。spa

串行通訊的波特率

位長(\(Bit\ Length\)),也稱爲位的持續時間,其倒數就是單位時間內傳送的位數。也就是波特率。單位是:位/秒,記爲\(bps\)\(bit\ per\ second\))。設計

奇偶校驗

在異步串行通訊中,經過增長一個奇偶校驗位來判斷一個字節傳輸是否正確。例如若採用奇校驗,則增長一位記錄字節中\(1\)是奇數個仍是偶數個。調試

串行通訊傳輸方式術語

  1. 全雙工\((Full-duplex)\):數據傳輸是雙向的,便可以同時接受與發送數據。
    1. 半雙工\((Half-duplex)\):數據傳輸也是雙向的,但在任什麼時候刻,只能由一方發送數據,一方接受數據,不能同時收發。
    2. 單工\((Simplex)\):數據傳送是單向的,一端位發送端,另外一端爲接受端。

串行通訊編程模型

從基本原理角度看,\(UART\)的主要功能是:接受時,把外部的單線輸入的數據變成一個字節的並行數據送入\(MCU\)內部;發送時,把須要發送的一個字節的並行數據轉換爲單線輸出。blog

\(UART\)具備波特率寄存器,用於設置波特率。有控制寄存器,用於設置通訊格式、是否校驗、是否容許中斷等。有狀態寄存器,用於查詢是否有數據可收、數據是否發送出去等。接口

ARM Cortex-M0+中斷機制

關於中斷的通用基礎知識

中斷:來自\(CPU\)外圍設備的強行任務切換稱爲中斷。隊列

異常:是指硬件產生的復位和中斷。開發

中斷源:能夠引發\(CPU\)產生中斷的外部器件被稱爲中斷源。

中斷向量地址:每一箇中斷源產生中斷後,分別要運行相應的中斷服務例程(\(Interrupt\ Service\ Routine)\),這些\(ISR\)的起始地址稱爲中斷向量地址。

中斷向量表:中斷向量地址存放在一塊連續的區域,這個存儲區被稱爲中斷向量表。

中斷向量號:給中斷源的編號。若是一個設備能夠產生多個不一樣的中斷,則容許有多箇中斷向量號。

中斷處理的基本過程爲中斷請求、中斷檢測、中斷響應與中斷處理等。當某一中斷源須要\(CPU\)爲其服務時,它向\(CPU\)發出中斷請求信號,中斷控制器獲取硬件設備的中斷向量號,經過中斷向量號獲取中斷狀態寄存器的「中斷請求位」,以便\(CPU\)知道何種中斷請求。

M0+非內核模塊中斷編程結構

非內核中斷請求\((Interrupt\ Request)\)號,簡稱\(IRQ\)中斷號,從\(0\sim 31\)編號,對應中斷向量號的\(16\sim 47\)

M0+中斷結構及中斷過程

\(M0+\)中斷結構由\(M0+\)內核、嵌套中斷向量控制器\(NVIC\)及模塊中斷源組成。其中斷過程分爲兩步:

  • 模塊中斷源向嵌套中斷向量控制器\(NVIC\)發出中斷請求信號;
  • \(NVIC\)對發來的中斷信號進行判斷是否中斷使能,若使能,則經過私有外設總線\(PPB\)發送給\(M0+\)內核進行中斷處理。若是同時有多箇中斷信號,則\(NVIC\)根據設置好的優先級進行判斷響應。

M0+嵌套中斷向量控制寄存器NVIC內部寄存器簡介

\(NVIC\)內含\(12\)個寄存器。

  1. 中斷使能寄存器\((NVIC\_ISER)\):中斷使能寄存器的\(32\)位分別對應\(32\)個外設中斷\(IRQ\)中斷號。寫\(1\)使能相應\(IRQ\)號中斷,寫\(0\)無效。
    1. 中斷禁止寄存器\((NVIC\_ICER)\):中斷禁止寄存器的\(32\)位分別對應\(32\)個外設中斷\(IRQ\)中斷號。寫\(1\)禁止相應\(IRQ\)號中斷,寫\(0\)無效。
    2. 掛起/清除寄存器\((NVIC\_ISPR/NVIC\_ICPR)\):當中斷髮生時,正在處理高優先級中斷,或該中斷被屏蔽時,此時中斷被掛起。中斷的掛起能夠經過中斷掛起寄存器和清除掛起寄存器來讀取,還能夠經過寫這些寄存器進行掛起中斷。清除掛起表示取消這次中斷請求
    3. 優先級寄存器\((NVIC\_IPR0-NVIC\_IPR7)\):能夠經過設置優先級寄存器設置非內核中斷源的優先級。優先級寄存器\((Interrupt\ Priority\ Register,\ IPR)\)共有\(8\)個;\(IPR0\sim IPR7\),每一個優先級寄存器對應\(4\)非內核中斷源。因爲每一個優先級寄存器只控制\(4\)個非內核中斷源,所以每一箇中斷源在\(IPR\)寄存器中佔兩位,其餘位未佔用

非內核中斷初始化設置步驟

  1. 設置相應模塊中斷使能位使能中斷。
    1. 查找芯片中斷源表,找到對應中斷請求\(IRQ\)號,根據\(IRQ\)號對應中斷向量號,而後設置嵌套中斷向量控制寄存器的中斷使能寄存器或中斷禁止寄存器,使該中斷對應位置爲\(1\)便可。
    2. 若要設置優先級則可對優先級寄存器編程。

UART驅動構件的設計方法

UART模塊編程結構

\(KL25\)芯片有三個\(UART\)模塊,每一個模塊有對應的寄存器。如控制寄存器,狀態寄存器,波特率寄存器,數據寄存器。三個\(UART\)模塊都有兩個波特率寄存器,四個控制寄存器,兩個狀態寄存器和一個數據寄存器。其中\(UART0\)多出一個控制寄存器和兩個地址匹配\(MA\)寄存器。

\(UART\)模塊\(x\)的寄存器地址\(=4006\_A000+x\times 1000+n\times 1\)\((x=0\sim 2\);模塊\(0\)\(n=0\sim B\),模塊\(一、2\)\(n=0\sim 8)\),\(n\)表示寄存器號。

UARTx控制寄存器2(UARTx_C2)

主要用於收/發相關中斷控制設置。

  • \(D7(TIE)\)——發送中斷使能位。與狀態寄存器中的\(TDRE\)配合使用。\(TIE=0\),發送中斷禁用(使用輪詢);\(TIE=1\),當\(TDRE=1\)時,發生中斷請求。
  • \(D6(TCIE)\)——發送完成中斷使能位,與狀態寄存器中\(TC\)位配合使用。\(TCIE=0\)\(TC\)對應的中斷禁用(使用輪詢);\(TCIE=1\),當\(TC=1\)時,發生中斷請求。
  • \(D5(RIE)\)——接受中斷使能位。與狀態寄存器中的\(RDRF\)配合使用。\(RIE=0\)\(RDRF\)中斷禁止(使用輪詢);\(RIE=1\),當\(RDRF=1\)時,發生中斷請求。
  • \(D4(ILIE)\)——空閒線中斷使能,與狀態寄存器中的\(IDLE\)配合使用。\(ILIE=0\)\(IDLE\)中斷禁止(使用輪詢);\(RIE=1\),當\(IDLE=1\)時,發生中斷請求。
  • \(D3(TE)\)——發射器使能位。\(TE\)必須是\(1\)來使用\(UART\)發送器。一般在\(TE=1\)時,\(UART\_TX\)引腳做爲\(UART\)系統的輸出。當\(UART\)配置w誒單線模式\((LOOPS=1,RSRC=1)\)時,\(UART\_C3\)中的\(TXDIR\)位將控制單線模式下\(UART\_TX\)引腳的通訊方向。
  • \(D2(RE)\)——接收器使能。\(UART\)接收器關閉或\(LOOPS\)被置位,\(UART\)不使用\(UART\_RX\)腳。\(RE=0\)接收器禁止,\(RE=1\)接收器使能。
  • \(D1(RWU)\)——接收器喚醒控制位。\(RWU=0\),正常\(UART\)接收器操做;\(RWU=1\),接收器等待喚醒條件。喚醒方式有空閒線喚醒\((WAKE=0)\)和地址位喚醒\((WAKE=1)\)
  • \(D0(SBK)\)——發送停止使能位。\(SBK=0\),正常發送操做;\(SBK=1\),隊列停止字符發送。

UARTx控制寄存器1(UARTx_C1)

主要用於設置\(SCI\)的工做方式,可選擇運行模式,喚醒模式,空閒類型檢測以及奇偶校驗等。

UARTx狀態寄存器1(UARTx_S1)

\(UART\)中斷或\(DMA\)請求提供\(MCU\)輸入。可經過讀取狀態寄存器以後讀和寫\(UART\)數據寄存器來清除標誌。

  • \(D7(TDRE)\)——發送數據寄存器空標誌位。\(TDRE=0\),發送數據寄存器已滿;\(TDRE=1\),發送數據寄存器爲空。
  • \(D6(TC)\)——發送完成標誌位。\(TC=0\),正在發送。\(TC=1\),發送完成。
  • \(D5(RDRF)\)——接收數據寄存器已滿標誌位。\(RDRF=0\),接收數據寄存器空,\(RDRF=1\),接收數據寄存器滿。爲清除\(RDRF\)應先對該位讀操做,而後讀\(RART\)數據寄存器。

波特率寄存器:UARTx_BDH、UARTx_BDL

兩個寄存器一同控制着波特率生成器的分頻因子。

數據寄存器

\(UARTx\_D(x=0\sim 2)\)實際上是兩個單獨的\(8\)位寄存器,讀時會返回只讀接收數據寄存器中的內容,寫時會寫到只寫發送數據寄存器。

相關文章
相關標籤/搜索