一、概述
E3430 GPIO 有分為 Safety & AP 閾,所以不同 GPIO 的地址也不一樣,需要按照實際的的基地址進行計算,並且,GPIO 引腳的定義,是從 0 遞增,對於不同基地址的 GPIO ,也需要區別計算引腳的寄存器地址。
這裡介紹以 MCAL3.0 為例,結合代碼和技術參考手冊說明,不同閾下,GPIO 寄存器的計算方式。
二、查看手冊確定地址
從芯馳官網下載最新技術參考手冊,查看《E3400_E3600_MCU_TRM_Rev00.13.pdf》中的 Memory map 章節,如下圖所示,可以看到 GPIO 有兩個不同的基地址。
1、配置 GPIO 口,首先配置 GPIO 的功能
查看參考手冊,確認 IO 口功能復用的基地址:如下圖
IOMUXC_SAFETY
Start Addr | End Addr | Size | Allocation | E3648 | E3640 |
F063_0000 | F063_FFFF | 64KB | IOMUXC_SAFETY | Y | Y |
IOMUXC_AP
Start Addr | End Addr | Size | Allocation | E3648 | E3640 |
F30E_0000 | F30E_FFFF | 64KB | IOMUXC_AP | Y | Y |
其中 IOMUX 相關的寄存器如下:
Name | Offset | Description |
PAD_CONFIGn (0≤n≤1) (page 5508) | 0x1000 + (n * 0x4) | IO PAD config register |
MUX_CONFIGn (0≤n≤1) (page 5509) | 0x2000 + (n * 0x4) | pin mux config |
INPUT_SELECTn (0≤n≤1) (page 5510) | 0x3000 + (n * 0x4) | input source select |
從上表中可以看到有計算公式,那麼 其中的 n 的數據是多少呢 ?
這裡的 n 代表的是具體的某個引腳的定義數值計算得來,需要通過這個引腳的定義進行計算:如下:
查找 Pin ID list in Port_Hw_E3_PinCtrl.h 定義 GPIO 的具體數值 Channel ID,因此用戶知道需要配置的 GPIO 具體引腳的定義值 Channel ID,那麼根據代碼中的配置計算公式:可以很快計算出 n = Channel ID - SF_PinStart 或者 n = Channel ID - AP_PinStart , 其中 PinStart 是 0 ; AP_PinStart 是 135,這兩個閾開始的引腳定義參考下面羅列的定義。
Port0: channel ID 0-31 (32 bit)
Port1: channel ID 32-63 (32 bit)
Port2: channel ID 64-95 (32 bit)
Port3: channel ID 96-127 (32 bit)
Port4: channel ID 128-134 (7 bit)
Port5: channel ID 135-166 (32 bit)
Port6: channel ID 167-198 (32 bit)
Port7: channel ID 199-213 (15bit)
Note:
For Port0-4, these lO are in GPIO SAF
For Port5-7, these lO are in GPIO AP
因此 配置 IO_MUX 寄存器的地址:不同閾的基地址 + 偏移計算公式 ,具體該寄存器的配置數據值,看參考手冊的介紹即可。
2、配置 GPIO 引腳的其他具體參數
查看參考手冊 Memory map 章節,找到 GPIO 引腳參數的寄存器基地址如下:
GPIO_SAFETY & GPIO_AP
Start Addr | End Addr | Size | Allocation | E3648 | E3640 |
F074_0000 | F074_FFFF | 64KB | GPIO_SAFETY | Y | Y |
F312_0000 | F312_FFFF | 64KB | GPIO_AP | Y | Y |
其中 GPIO 相關的寄存器如下:(部分,未寫全)
Name | Offset | Description |
DOM_PER0n (0≤n≤7) (page 1995) | 0x0 + (n * 0xc) | This register is used for to control domain0~3 secure and priviledge access permission. |
DOM_PER1n (0≤n≤7) |
(page 1997)
secure and priviledge access permission.
(page 1999)
permission setting.
(0≤n≤127) (page 2000)
(page 2000)
(page 2000)
(page 2001)
(page 2001)
用戶需要配置 GPIO 引腳的參數,涉及到的寄存器地址的計算公式,主要就是偏移量的計算,其中上表中的 n 與之前的計算稍微有差別,
這裡的 n = (Channel ID - SF_PinStart)/32 或者 n = (Channel ID - AP_PinStart)/32 , 其中 PinStart 是 0 ; AP_PinStart 是 135。
注意:
GPIO 的各個配置寄存器中,裡面存在配置引腳輸入輸出電平信號的,整個寄存器 32 位,對應的是相應的引腳,此時,對於具體某個引腳,該引腳的電平信號是位於那寄存器的哪一位,還是存在計算的公式去計算 MASK 的數值。
MASK = 1 << (Channel ID - SF_PinStart)% 32) , 其中 PinStart 是 0 ; AP_PinStart 是 135 ;
評論