TMS320C6748是Ti公司的一款超低功耗DSP產(chǎn)品,,相比其他系列DSP它多了PSC這個(gè)模塊,,用以管理各個(gè)外設(shè)的睡眠和喚醒,大大節(jié)約了系統(tǒng)功耗,,下面我們具體介紹這個(gè)模塊的細(xì)節(jié)以及配置,。
(1)PSC模塊共有兩個(gè)控制器模塊,分別負(fù)責(zé)以下外設(shè)的配置,。
從上圖我們可以看到PSC模塊幾乎可以控制DSP中所有的外設(shè),。
也許這里大家有一個(gè)疑問(wèn),PSC0~1,,Domain0~1,,以及具體的模塊好像關(guān)系很亂。下面我們繪制了這樣一張圖來(lái)詳細(xì)說(shuō)明他們的所屬關(guān)系:
實(shí)際上,,只有DSP屬于domain1,,其余所有模塊均屬于domain0。
(2)下面我們接著介紹PSC能夠控制各個(gè)模塊進(jìn)入的狀態(tài)(Enable,、Disable,、SyncReset、SwRstDisable,、AutoSleep,、AutoWake)一般我么常用的是前4個(gè)狀態(tài),Enable為正常工作狀態(tài),,而Disable狀態(tài)關(guān)閉了模塊時(shí)鐘,;SyncReset使模塊處于復(fù)位狀態(tài),,時(shí)鐘正常,SwRstDisable使模塊處于復(fù)位狀態(tài),,并關(guān)閉了時(shí)鐘,。具體說(shuō)明見(jiàn)下圖所示。
(3)PSC模塊配置說(shuō)明
a. 等待PTSTAT中的GOSTAT[x]為清零,,x為當(dāng)前模塊所屬的domain。
b. 檢查MDSTAT[x]中的STAT位是否與簡(jiǎn)要配置的狀態(tài)相同,,如果相同,,直接返回。
c. 清除MDCTL[x]中的NEXT位(非常重要),。
d. 配置MDCTL[x]中的NEXT位為指定的狀態(tài),。
e. 配置PTCMD中的GO[x]位,開(kāi)始轉(zhuǎn)換模塊狀態(tài),。
f. 等待,,檢查PTSTAT中的GOSTAT[x]是否清零,表示轉(zhuǎn)換完成,。
g. 檢查MDSTAT[x]中的STAT位是否與簡(jiǎn)要配置的狀態(tài)相同,。
二、GPIO(通用輸入輸出)配置介紹
本節(jié)我們主要介紹GPIO的輸入輸出控制功能,,中斷部分下次結(jié)合中斷向量表一起說(shuō)明,。
(1)TMS320C6748共有8
Banks,16 GPIOsper Bank,,幾乎所有引腳都可以配置成為GPIO端口,。
對(duì)于GPIO,我們只需關(guān)注這幾個(gè)寄存器:
DIR:方向控制寄存器,,控制GPIO管腳是輸入還是輸出,,其中,對(duì)應(yīng)位置0表示該管腳為輸出管腳,;對(duì)應(yīng)位置1表示該管腳為輸入管腳,。
OUT_DATA:輸出數(shù)據(jù)寄存器,控制管腳輸出電平,,其中,,對(duì)應(yīng)位置0表示該管腳輸出為低電平;對(duì)應(yīng)位置1表示該管腳輸出為高電平,。
SET_DATA:設(shè)置數(shù)據(jù)寄存器,,對(duì)應(yīng)位置1表示該管腳輸出為高電平,需要注意的是該寄存器寫0無(wú)效,。
CLEAR_DATA:清除數(shù)據(jù)寄存器,,對(duì)應(yīng)位置1表示該管腳輸出為低電平,需要注意的是該寄存器寫0無(wú)效。
IN_DATA:輸入數(shù)據(jù)寄存器,,注意該寄存器是只讀寄存器,,返回對(duì)應(yīng)位輸入電平。
(2)GPIO配置說(shuō)明
a. 配置PSC模塊,,使能GPIO功能,。
b. 配置PINMUX模塊,選擇需要使用的管腳作為GPIO引腳,。具體可以參看我的這篇帖子,。http://bbs.elecfans.com/forum.php?mod=viewthread&tid=516939&page=1&extra=#pid3851865
c. 配置DIR方向控制寄存器。
d. 如果配置GPIO為輸入引腳,,那么在有信號(hào)輸入后可以讀取IN_DATA寄存器以獲得輸入電平,;如果配置GPIO為輸出引腳,可以配置OUT_DATA或SET_DATA或CLEAR_DATA寄存器輸出高/低電平,。
三,、CCS調(diào)試的一些經(jīng)驗(yàn)
以后如果我想起一些關(guān)于CCS調(diào)試有用的功能,會(huì)不定時(shí)在帖子最后更新,,希望有助于大家的學(xué)習(xí)~
大家在調(diào)試工程的時(shí)候會(huì)不會(huì)遇到工程出錯(cuò),,但是又找不到事那個(gè)部分出問(wèn)題,一般有經(jīng)驗(yàn)的工程師在編寫子函數(shù)時(shí)都會(huì)寫一些返回值,,這樣在調(diào)試時(shí)直接查看這些返回值就可以知道程序那里出錯(cuò)了,。但是,這樣編寫效率不高,,遇到多次調(diào)用子函數(shù)的情況很難知道那個(gè)部分出問(wèn)題了,。一般工程師們還會(huì)在程序運(yùn)行時(shí)及時(shí)打印出系統(tǒng)運(yùn)行狀態(tài),主要有兩種方法,,一種是基于UART接口的方法(我們以后結(jié)合UART再說(shuō)),,另一種是調(diào)用printf函數(shù)的方法。
格式為:printf("hello
!\r\n");
重要的事情說(shuō)三遍,,在語(yǔ)句的結(jié)尾一定一定要有回車符\r和換行符\n,。
大家可以看到在CCS的Console里有如下的顯示。
|
|