目錄
1.s3c2440的時鐘體系
1.1.s3c2440結構框圖
1.2 s3c2440時鐘樹
1.3 s3c2440上電順序
2.暫存器配置
2.1clkdivn暫存器
2.2mpllcon暫存器
2.3設定cpu為非同步模式
3.程式設計
4.實驗
從上面的結構圖可以看出,s3c2440主要分為cpu,高速匯流排,低速匯流排。其中
cpu工作與fclk
ahb匯流排工作於hclk,ahb(advance high performance bus)匯流排主要用於高效能模組。
慢速外設工作於pclk,apb(advance peripheral bus)匯流排主要用於低貸款的周邊外設之間的連線。
我們的s3c2440硬體電路板上,時鐘源是乙個12m的晶振,我們用pll鎖相環可以得到上面的三種頻率。
從上圖的左上角可以看出,時鐘源有兩個選擇,可以是晶振,也可以是直接從extclk管腳輸入的時鐘。具體選擇什麼時鐘源由後面的om進行選擇,我們的電路圖中om的兩個管腳都是接地低電平的,因此使用晶振作為時鐘源。
然後往後有兩個pll,mpll和upll,分別是main pll和usb pll.
晶振經過mpll,得到fclk提供給cpu,然後fclk經過hdiv分頻可以得到hclk提供給ahb匯流排,經過pdiv得到pclk提供給apb匯流排。
晶振經過upll然後給usb提供時鐘。
下面我們程式設計來配置s3c2440的時鐘,我們配置fclk=400m,hclk=100m, pclk=50m。我們需要設定mpllcon暫存器讓fclk=400m.然後設定clkdivn讓hclk=fclk/4, pclk=fclk/8.
我們把clkdivn[2:1]的hdivn設定為10,然後clkdivn[0]的pdivn設定為1.
我們通過設定mdiv=92,pdiv=1,sdiv=1就可以設定fclk=400m.
另外,晶元手冊裡面有乙個注意事項,如果我們的hdivn不是零的話,cpu匯流排必須設定為非同步模式,否則cpu會使用hclk而不是fclk.所以我們要設定cpu為非同步模式。
修改之前的start.s.
.text
.global _start
_start:
/* 關閉看門狗 */
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0]
/* 設定mpll, fclk : hclk : pclk = 400m : 100m : 50m */
/* locktime(0x4c000000) = 0xffffffff */
ldr r0, =0x4c000000
ldr r1, =0xffffffff
str r1, [r0]
/* clkdivn(0x4c000014) = 0x5, tfclk:thclk:tpclk = 1:4:8 */
ldr r0, =0x4c000014
ldr r1, =0x5
str r1, [r0]
/* 設定cpu工作於非同步模式 */
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000 //r1_nf:or:r1_ia
mcr p15,0,r0,c1,c0,0
/* 設定mpllcon(0x4c000004) = (92<<12)|(1<<4)|(1<<0)
* m = mdiv+8 = 92+8=100
* p = pdiv+2 = 1+2 = 3
* s = sdiv = 1
* fclk = 2*m*fin/(p*2^s) = 2*100*12/(3*2^1)=400m
*/ldr r0, =0x4c000004
ldr r1, =(92<<12)|(1<<4)|(1<<0)
str r1, [r0]
/* 一旦設定pll, 就會鎖定lock time直到pll輸出穩定
* 然後cpu工作於新的頻率fclk
*/
/* 設定記憶體: sp 棧 */
/* 分辨是nor/nand啟動
* 寫0到0位址, 再讀出來
* 如果得到0, 表示0位址上的內容被修改了, 它對應ram, 這就是nand啟動
* 否則就是nor啟動
*/mov r1, #0
ldr r0, [r1] /* 讀出原來的值備份 */
str r1, [r1] /* 0->[0] */
ldr r2, [r1] /* r2=[0] */
cmp r1, r2 /* r1==r2? 如果相等表示是nand啟動 */
ldr sp, =0x40000000+4096 /* 先假設是nor啟動 */
moveq sp, #4096 /* nand啟動 */
streq r0, [r1] /* 恢復原來的值 */
bl main
halt:
b halt
我們之前的led實驗裡面,led閃爍的時候有延時函式,當我們提高了時鐘頻率之後,會發現led閃爍的比之前快。 s3c2440系統時鐘
1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...
s3c2440裸機串列埠UART
串列埠收發資料 115200,8n1。每一位的時間是t 1 115200。傳輸乙個位元組需要10位 包括起始位1位,資料位8位,停止位1位,需要的時間是t 10 115200。每秒傳輸的的位元組數 1 t 115200 10 11520byte。回環模式 一發出資料就立刻收到,用於測試。main.c...
s3c2440裸機 ADC程式設計
模數轉換器即a d轉換器,或簡稱adc,通常是指乙個將模擬訊號轉變為數碼訊號的電子元件。如圖,是把可變電阻上的電壓值變換的模擬訊號通過adc轉換,輸出數碼訊號。對於數碼訊號我們需要得到它的2個屬性 1.轉換精度 用多少位來儲存這個資料 假如是10 bit 那麼最大值0b111111111對應3.3v...