|
S3C2440 的時鐘設置時間:
一個嵌入式系統中,晶振就像心臟。必須先確定晶振,設置好系統的時鐘,
WDT,UART,PWM,TIMER 等模塊才能正常工作。
和51 系列單片機相比,S3C2440 的時鐘電路很復雜。
首先通過引腳OM2,OM3 來選擇時鐘源。
以TQ2440 開發板為例,OM2,OM3 都接地,外接12M 晶振,主時鐘源和USB 時鐘源都是
外部晶振。
S3C2440 具有2 個PLL(Phase Locked Loop:用來產生高頻的電路),一個是MPLL, 用于
產生FCLK, HCLK, PCLK 三種頻率, 這三種頻率分別有不同的用途:
FCLK 是CPU 提供的時鐘信號,如果提到CPU 的主頻是400MHz,就是指的這個時鐘信號。
HCLK 是為AHB 總線提供的時鐘信號, Advanced High-performance Bus,主要用于高速
外設,比如內存控制器,中斷控制器,LCD 控制器, DMA 以及USB host 。
PCLK 是為APB 總線提供的時鐘信號,Advanced Peripherals Bus,主要用于低速外設,
比如WATCHDOG,IIS, I2C, SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI 等等。
另外一個是UPLL,專門用于驅動USB host/Device。并且驅動USB host/Device 的頻率必
須為48MHz。
時鐘電路相關寄存器總共有7 個,下面分別介紹。
MPLLCON(0X4C00 0004)和UPLLCON(0X4C00 0008)
這兩個寄存器用來設置主鎖相環產生的時鐘和USB 鎖相環產生的時鐘。
MPLL=(2*m*Fin)/(p*2^s) UPLL=(m*Fin)/(p*2^s)
其中m=(MDIV+8),p=(PDIV+2),s=SDIV
P,M 范圍:1<=P<=62,1<=M<=248
----------------------- Page 2-----------------------
注意:MDIV 【19:12】,PDIV 【9:4】,SDIV 【1:0】,當設置MPLL 和UPLL 值的時候,需要
先設置UPLL 再設置MPLL。
例如:MPLLCON = (92<<12) | (1<<4) |(1);//FCLK=400M
這里MDIV=92,PDIV=1,SDIV=1,那么m=100,p=3,s=1,且Fin=12M,所以FCLK=400M
CLKCON(0X4C00 000C) 控制各種模塊如 SPI,IIC,UART 等的時鐘電路開關以及系統的
SLEEP,IDLE 模式,以便降低系統功耗。默認值是全部時鐘電路打開,系統工作在正常模式。
CLKSLOW(0X4C00 0010)用來選擇系統是否進入慢模式,以及是否關閉MPLL 或UPLL,
和在慢模式下的分頻率。
CLKDIVN(0X4C00 0014)和CAMDIVN(0X4C00 0018 照相機時鐘分割寄存器)兩個寄存器
配合來確定FCLK,HCLK,PCLK 的比例。
LOCKTIME(0X4C00 0000)設置MPLL,UPLL 的鎖存時間,采用默認值0XFFFF FFFF,鎖存
時間各為300us。
說到鎖存時間,就要分析下S3C2440 的時鐘工作過程。
在系統復位時,晶振起振穩定后,PLL 開始按照默認值開始工作,但是在復位時,PLL 工
作是不穩定的,所以 S3C2440 用 FIN (12M )作為 MPLL 。只到一個新的值寫入
MPLLCON,UPLLCON,即使用戶不想改變復位后PLLCON 的默認值,仍然需要把這個默認
值寫入PLLCON,寫入值之后,系統會自動插入一個PLL LOCK TIME,也就是LOCKTIME
寄存器中設置的300us。300us 后,PLL 就開始正常工作。
深圳專業嵌入式ARM、Linux、單片機技術實訓。學習顧問郭老師:QQ754634522
在系統正常工作時,如果要改變FCLK,寫入新值到MPLLCON 后,系統也會插入一個PLL
LOCK TIME,300us 后FCLK 就變成新的頻率。
|
|