Toshiba TMPM34x 驅動程式使用方式介紹

一、 序言

         TPMP34x 是東芝 TX03 系列的 MCU,核心採用 ARM Cortex-M3,最高時脈為 50MHz,主要應用在Surveillance cameras、Digital video cameras、Digital still cameras、Camera lens 上。

        東芝提供 TMPM34x Peripheral Driver (以下簡稱為驅動程式),方便客戶使用驅動程式存取底層硬體資源。
此外也包含使用 API 所需的巨集、每個 API 所需的自定義資料結構型別和存取相關暫存器的定義值。

        以下內容我們以 TMPM341 來進行介紹,而這些使用方式也同樣適用於其他 TMPM34x MCU系列,如 TMPM342 與 TMPM343。


 
二、 東芝 TMPM34x 周邊驅動程式的檔案架構

       

        \Libraries

        這個資料夾包含了所有 CMSIS 檔案和 TMPM34x 周邊驅動程式

        \Libraries\TX03_CMSIS

        這個資料夾包含了所有 TMPM34x 器件周邊存取層的 CMSIS 檔案

        \Libraries\TX03_Periph_Driver

        這個資料夾包含了 TMPM34x 的所有周邊驅動程式的源代碼及標頭檔的資料夾

        \Libraries\TX03_Periph_Driver\inc

        這個資料夾包含了所有 TMPM34x 的各個驅動程式的標頭檔

        \Libraries\TX03_Periph_Driver\src

        這個資料夾包含了所有 TMPM34x 各個驅動程式的源代碼檔案

        \Project_EWARM

        這個資料夾包含了 sample code 的 IAR 專案檔案

        \Project\Examples

        這個資料夾包含了東芝所提供使用 TMPM34x 各個硬體資源的範例程式

 


三、 應用層、驅動層、硬體層運作架構說明

    

        以下中間紅色框線的部分是 TMPM34x 的 TX03 CMSIS 驅動程式 (即 Driver),

        Driver 使用說明:
        使用者的 應用層 透過呼叫 TX03 CMSIS 驅動層 Driver去存取 TMPM34x 硬體層

        

        
        

        (1) 應用層 ( Application Program ) :

        使用者依照產品各項功能所需開發的應用程式,如 IP CAM 的 Zoom / Focus 等功能

 

         (2) 驅動層 ( CMSIS Driver Layer ) :

        東芝所提供 TX03 TMPM34x 的 ARM CMSIS 驅動程式,如 GPIO、PHC、ADC、CG、DAC、WDT、OFD、DMAC、
        UART、TMRB、TMRD ... 等 API。

 

         (3) 硬體層 ( HW Layer ) :

        TMPM34x MCU 所提供的各項周邊裝置,包含 GPIO、PHC、ADC、CG、DAC、WDT、OFD、DMAC、UART、
        TMRB、TMRD ... 等硬體資源。


四、 TMPM34x 周邊驅動程式使用方式

       
        (1)  硬體層

        在 \Libraries\TX03_CMSIS 這個資料夾底下,包含了東芝“TMPM34x”MCU 的
        CMSIS Cortex-M3 內核周邊存取層標頭檔 TMPM34x.h

        
        

        其所對應的正是 TMPM34x MCU 的所有硬體資源;
        諸如各個硬體中斷號碼的定義,對應存取各個硬體資源的暫存器內容的自定義結構型別,
        以及每個資源所對應的暫存器在記憶體的直接存取位置。

        這個部分,我們可以將之視為第二章節“應用層、驅動層、硬體層運作架構說明”中所提到的硬體層這個部分。

         
        (2)  
驅動層

        在 \Libraries\TX03_Periph_Driver 這個資料夾底下,包含了 兩個重要的資料夾,
        ..\inc 與 ..\src
        
         
        

        \Libraries\TX03_Periph_Driver\inc
        這個資料夾包含了所有 TMPM34x 的各個支援驅動程式 API 所需的標頭檔

        
        
        

        這些標頭檔主要支援使用各個 API 時,
        ♦  所需設定的參數的自定義資料結構型別,
        ♦  要寫入暫存器的對應定義值


        \Libraries\TX03_Periph_Driver\src  這個資料夾則包含了所有 TMPM34x 的各個驅動程式的 API 程式碼檔案
        
        


        
        這些驅動程式 API 與支援這些 API 的標頭檔合起來,即為驅動層
        當要使用各個驅動程式的 API 時,使用前常需要預先準備許多的參數設定;

        以 TMRB 的 Timer 為例,在使用 ..\src\tmpm341_tmrb.c 檔案中的
        void TMRB_Init(TSB_TB_TypeDef * TBx, TMRB_InitTypeDef * InitStruct)
        這個 API 進行 TMRB 的初始化時,需要帶入兩個引數。

        第一個引數是 *TBx 結構變數指標,用以傳遞 TMRB 的暫存器結構資料的位置;
        *TBx 指標結構變數以 TSB_TB_TypeDef 這個型別去宣告變數,此型別就定義在

        \Libraries\TX03_CMSIS\TMPM341.h

        這個標頭檔中所定義的各個資料型別,
        真正的意義則是指向該 TMRB 各個暫存器的記憶體存取位置,此即為硬體層


        
        

        第二個引數是 *InitStruct 結構變數指標,以 TMRB_InitTypeDef 這個型別去宣告;
        用以描述將要初始化的這個 TMRB 的各項參數,這些參數將寫入對應的暫存器中。

        此結構資料型別定義在 \Libraries\TX03_Periph_Driver\inc\tmpm341_tmrb.h
        這個標頭檔裡。
        
        
        
        

        將這兩個引數帶入
        void TMRB_Init(TSB_TB_TypeDef * TBx, TMRB_InitTypeDef * InitStruct)
        這個 API 中,就可完成 TMRB 的初始化。

        其他的 API 的使用方式,同樣也可參照這樣的使用方式運作。

 


五、 TMPM34x Timer 範例程式
               

        TMPM34x 提供了諸多的周邊驅動程式範例,接下來我們以 TMRB Timer 範例程式碼進行說明。
        這是一個基於 TX03 周邊驅動程式(使用到 TMRB、GPIO 硬體資源)的簡單範例。

        該範例主要包括:
        (1)  TMRB0 初始化
        (2)  1ms 通用定時器 (這部分非本文所討論的範圍,還請讀者自行參考原代碼程式)

         [主程式流程圖]
        
        
        
        

        主程式碼如下:

        

        我們省略 CG 與 LED GPIO 的設定說明,直接介紹 TMRB Timer 的設定

        第一個部分:

                為準備 TMRB_Init() 這個 API 所需要的重要引數:TMRB_InitTypeDef m_tmrb;
                該結構變數的資料成員可參考以下所定義的型別內容
        
        
        
        第二個部分:

                將 m_tmrb 這個結構變數以指標的方式,連同 “TSB_TB0” 帶入 TMRB_Init() 中完成
                TMRB0 Timer 的初始化。

                TMRB_Init(TSB_TB0, &m_tmrb);
        
        
        
        
        

        至於

        TMRB_Enable(TSB_TB0);
        NVIC_EnableIRQ(INTTB0_IRQn);
        及
        TMRB_SetRunState(TSB_TB0, TMRB_RUN);

        這三行程式碼,

       

        TMRB_Enable(TSB_TB0);
        是使用 API 將“TMRB0” enable,

        NVIC_EnableIRQ(INTTB0_IRQn);
        是使用 API 將 TB0 的中斷 enable,所傳的是 TB0 的中斷號碼,這也是屬於硬體層的。

        TMRB_SetRunState(TSB_TB0, TMRB_RUN);
        則是使用 API 讓 TB0 的 Timer 功能開始運行;

        TMRB_RUN 這個引數,對應到 TBPRUN 及 TBRUN 在 TB0RUN 暫存器所對應的 bit 位置,
        
        
        
        
         因此,在這個暫存器位置寫入 0x00000005 這個數值,即令 TB0 開始運行。
        
        
        
        
        
以下為 TMRB0 的中斷副程式,因本篇博文主要在介紹驅動程式 API 的使用方式,以下的程式碼不在本次的討論範圍;        就不予以詳加說明,僅作為附錄提供參考。
        
        
        
        
        

        參考資料:

        東芝 TMPM343 datasheet

        東芝 TX03 Peripheral Driver Usage Example (TMPM341)_EN.pdf

        東芝 TOSHIBA TX03 Peripheral Driver User Guide (TMPM343)_EN.pdf

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能