TMS320C6474學習總結(九)----GPIO中斷除錯
GPIO模組
1. GPIO概述
通用輸入/輸出(GPIO)外設提供專用的通用引腳,可以配置為輸入或輸出。當將其配置為輸出時,您可以向內部暫存器寫入,以控制輸出引腳上的狀態驅動。當配置為輸入時,您可以通過讀取內部暫存器的狀態來檢測輸入的狀態。
另外,GPIO外設可以在不同的中斷/事件生成模式下產生CPU中斷和EDMA同步事件。
2. GPIO功能
可以使用GPIO方向暫存器(DIR)獨立地將每個GPIO pin (GPn)配置為輸入或輸出。GPIO方向暫存器(DIR)指定每個GPIO訊號的方向。邏輯0表示將GPIO引腳配置為輸出,邏輯1表示輸入。
當配置為輸出模式時,對資料設定暫存器(SET_DATA)寫1可以驅動對應的GPIO引腳為邏輯高狀態,對資料清除暫存器(CLR_DATA)寫1可以驅動對應的GPIO引腳為邏輯低的狀態。每個引腳的輸出狀態也可以通過寫資料輸出暫存器(OUT_DATA)來直接控制。
對資料設定暫存器和資料清除暫存器寫0不會對GPIO引腳產生影響。另外,如果GPIO引腳設定為輸入引腳,對資料設定暫存器、資料清除暫存器以及資料輸出暫存器進行寫操作將不會產生效果。
對於將GPIO引腳配置成輸入引腳時,讀取資料輸入暫存器(IN_DATA)的資料將會獲取引腳的當前狀態。
3. GPIO暫存器
Offset |
縮寫 |
暫存器功能 |
0008 |
BINTEN |
中斷使能暫存器 |
0010 |
DIR |
方向暫存器 |
0014 |
OUT_DATA |
資料輸出暫存器 |
0018 |
SET_DATA |
資料設定暫存器 |
001C |
CLR_DATA |
資料清除暫存器 |
0020 |
IN_DATA |
資料輸入暫存器 |
0024 |
SET_RIS_TRIG |
上升沿中斷設定暫存器 |
0028 |
CLR_RIS_TRIG |
上升沿中斷清除暫存器 |
002C |
SET_FAL_TRIG |
下降沿中斷設定暫存器 |
0030 |
CLR_FAL_TRIG |
下降沿中斷清除暫存器 |
4. GPIO中斷
每個GPIO pin (GPn)都可以配置為生成CPU中斷(GPINTn)和EDMA同步事件(GPINTn)。中斷和EDMA同步事件可以在上升沿、下降沿產生。邊緣檢測邏輯是與GPIO外圍時鐘同步的。
當使用GPIO引腳來產生中斷和EDMA同步事件時,不需要將GPIO引腳設為輸入引腳。當將GPIO 引腳配置為輸入時,引腳上的狀態轉換會觸發中斷和EDMA同步事件。當將GPIO引腳配置為輸出時,軟體可以切換GPIO輸出暫存器來改變引腳的狀態,甚至觸發中斷和EDMA同步事件。
5. 配置GPIO中斷
1. 配置GPIO中斷
a.使能GPIO中斷: BINTEN = 1;
b.配置引腳為輸入引腳:DIR = 0x1<<num;(bit0-bit15對應16個引腳)
c.配置GPIO為上升沿觸發/下降沿觸發: SET_RIS_TRIG = 0x1<<num; (bit0-bit15對應16個引腳)
2. 查閱中斷對映表,獲取對應GPIO通道的中斷號,將中斷號和中斷服務函式名配置在.tcf檔案中(注意函式名前加上下劃線,在Dispatcher中勾選use dispatcher ,在interrupt mask中選擇all)
3. 開啟全域性中斷使能
6. GPIO中斷對映表
TMS320C6474共有16個GPIO引腳,對應16箇中斷事件,需要使用哪個引腳,就需要將引腳對應的時間對映至硬體中斷上。
中斷號 |
中斷事件 |
中斷描述 |
45 |
GPINT0 |
GPIO Interrupt 0 |
46 |
GPINT1 |
GPIO Interrupt 1 |
47 |
GPINT2 |
GPIO Interrupt 2 |
48 |
GPINT3 |
GPIO Interrupt 3 |
49 |
GPINT4 |
GPIO Interrupt 4 |
50 |
GPINT5 |
GPIO Interrupt 5 |
51 |
GPINT6 |
GPIO Interrupt 6 |
52 |
GPINT7 |
GPIO Interrupt 7 |
53 |
GPINT8 |
GPIO Interrupt 8 |
53 |
GPINT9 |
GPIO Interrupt 9 |
55 |
GPINT10 |
GPIO Interrupt 10 |
56 |
GPINT11 |
GPIO Interrupt 11 |
57 |
GPINT12 |
GPIO Interrupt 12 |
58 |
GPINT13 |
GPIO Interrupt 13 |
59 |
GPINT14 |
GPIO Interrupt 14 |
60 |
GPINT15 |
GPIO Interrupt 15 |