正文開始之前我先來扯幾句無關的,懷着無比忐忑和激動的心開始寫我的第一篇博客,在這充滿大神的csdn,也讓我這個小白來灌灌水
剛開始學習TI的OMAP-L138,底層資料特別缺乏,數據手冊也只有英文的,下面是我對PSC模塊的理解(也困擾了小白好久,剛明白一點就想分享一下,有理解錯誤的地方請見諒和多多指正)
PSC (Power Sleep Contorller)下面官方手冊的講解,PSC是管理系統電源,時鐘開關,設備和外設的啓動,
它主要是爲外設和CPU提供電源控制;
PSC模塊分爲全局PSC(GPSC)和局部PSC(LPSC);
GPSC包括內存映射寄存器,PSC中斷和PSC控制的外設或模塊的狀態機; LPSC控制外設和模塊
在系統架構中是這樣的:
官方庫中給的PSC初始化函數爲:
int PSCModuleControl (unsigned int baseAdd, unsigned int moduleId,
unsigned int powerDomain, unsigned int flags);
函數有4個參數
第一個參數爲 SOC_PSC_1_REGS 代表PSC模塊的基地址
第二個參數就比較複雜了, PSC模塊分爲2的控制器PSC0 和PSC1,分別控制不同的外設 ,
下表爲PSC0的外設參數,這些外設的具體對應情況可以在pcs.h的頭文件中找到。
第三個參數有要牽扯到上表中第三列的叫Power Domain的東西,它的參數只有兩個 0和1,具體我理解的也不是很清楚,但是大部分的外設開啓都是選擇Always on(0),只有使用PD_DSP時選擇 PSC_POWERDOMAIN_PD_DSP (1)
在文檔中有說明:
第四個參數對應一下文檔,它的大概意思是PSC爲模塊定義了幾種狀態,這幾個狀態直接有一個組合,有的狀態在一些外設控制上無效的,具體的參數定義可以在官方庫中查到,因爲時間緊迫和水平有限,理解還有問題,我會盡量在後面補充和糾正,
#define PSC_MDCTL_NEXT_SWRSTDISABLE (0x00000000u)
#define PSC_MDCTL_NEXT_SYNCRST (0x00000001u)
#define PSC_MDCTL_NEXT_DISABLE (0x00000002u)
#define PSC_MDCTL_NEXT_ENABLE (0x00000003u)
#define PSC_MDCTL_NEXT_AUTOWAKE (0x00000005u)
#define PSC_MDCTL_NEXT_SYNCRST (0x00000001u)
#define PSC_MDCTL_NEXT_DISABLE (0x00000002u)
#define PSC_MDCTL_NEXT_ENABLE (0x00000003u)
#define PSC_MDCTL_NEXT_AUTOWAKE (0x00000005u)