S3C2440裸機 時鐘

2021-10-22 07:45:24 字數 3174 閱讀 8723

目錄

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...