S3C2440 SDRAM暫存器初始化設定

2021-09-10 13:51:35 字數 3731 閱讀 5986

開板子是s3c2440,使用兩片容量為32mb、位寬16bit的em63a165ts-6g晶元拼成容量為64m、32bit的sdram儲存器。根據2410datasheet,要使用sdram需配置13個暫存器,以下逐個來看:

1、 bwscon:bus width & wait status control register匯流排位寬和等待狀態控制暫存器。

此暫存器用於配置bank0 – bank7的位寬和狀態控制,每個bank用4位來配置,分別是:

● st(啟動/禁止sdram的資料掩碼引腳。對於sdram,此位置0;對於sram,此位置1)

● ws(是否使用儲存器的wait訊號,通常置0為不使用)

● dw(兩位,設定位寬。此板子的sdram是32位,故將dw6設為10)

特殊的是bit[2:1],即dw0,設定bank0的位寬,又板上的跳線決定,唯讀的。我這板子bwscon可設定為0x22111110。其實只需將bank6對應的4位設為0010即可。

2、 bankcon0 – bankcon7

用來分別配置8個bank的時序等引數。sdram是對映到bank6和bank7上的(記憶體只能對映到這兩個bank,具體對映多大的空間,可用banksize暫存器設定),所以只需參照sdram晶元的datasheet配置好bank6和bank7,bankcon0 – bankcon5使用預設值0x00000700即可。

對於bankcon6和bankcon7中的各個位的描述:

(1)mt(bit[16:15]):設定本bank對映的物理記憶體是sram還是sdram,後面的低位就根據此mt的選擇而分開設定。本板子應置0b11,所以只需要再設定下面兩個引數

(2)trcd(bit[3:2]):ras to cas delay(00=2 clocks,01=3 clocks,10=4 clocks),推2410手冊上的薦值是0b01。我們pc的bios裡也可以調節的,應該玩過吧。

(3)scan(bit[1:0]):column address number(00 = 8-bit,01 = 9-bit,10= 10-bit),sdram列位址位數。查閱hy57v561620ct-h晶元手冊得知此值是9,所以scan=0b01。

綜合以上各值,bankcon6 – 7設為0x00018005。

3、 refresh:重新整理控制暫存器。

此暫存器的bit[23:11]可參考預設值,或自己根據經驗修改,這裡用0x008e0000,關鍵是最後的refresh counter(簡稱r_cnt,bit[10:0])的設定,2410手冊上給出了公式計算方法。sdram手冊上「8192 refresh cycles / 64ms」的描述,得到重新整理周期為64ms/8192=7.8125us,結合公式,r_cnt=2^11 + 1 – 12 * 7.8125 = 1955。所以可得refresh=0x008e0000+1995=0x008e07a3。

4、 banksize:設定sdram的一些引數。其中bk76map(bit[2:0])配置bank6/7對映的大小,可設定為010 = 128mb/128mb或001 = 64mb/64mb,只要比實際ram大都行,因為bootloader和linux核心都可以檢測可用空間的。banksize=0x000000b2。

5、 mrsrb6、mrsrb7:mode register set register bank6/7

可以修改的只有cl[6:4](cas latency,000 = 1 clock, 010 = 2 clocks, 011=3 clocks),其他的全部是固定的(fixed),故值為0x00000030。這個cas在bios中應該也設定過吧,對pc的速度提公升很明顯哦j

至此,13個暫存器全部配置好了,下面就可以把**複製到sdram中執行了,同樣的程式速度要比片內sram執行的慢不少。

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

開板子是s3c2440,使用兩片容量為32mb、位寬16bit的em63a165ts-6g晶元拼成容量為64m、32bit的sdram儲存器。根據2410datasheet,要使用sdram需配置13個暫存器,以下逐個來看:

1、 bwscon:bus width & wait status control register匯流排位寬和等待狀態控制暫存器。

此暫存器用於配置bank0 – bank7的位寬和狀態控制,每個bank用4位來配置,分別是:

● st(啟動/禁止sdram的資料掩碼引腳。對於sdram,此位置0;對於sram,此位置1)

● ws(是否使用儲存器的wait訊號,通常置0為不使用)

● dw(兩位,設定位寬。此板子的sdram是32位,故將dw6設為10)

特殊的是bit[2:1],即dw0,設定bank0的位寬,又板上的跳線決定,唯讀的。我這板子bwscon可設定為0x22111110。其實只需將bank6對應的4位設為0010即可。

2、 bankcon0 – bankcon7

用來分別配置8個bank的時序等引數。sdram是對映到bank6和bank7上的(記憶體只能對映到這兩個bank,具體對映多大的空間,可用banksize暫存器設定),所以只需參照sdram晶元的datasheet配置好bank6和bank7,bankcon0 – bankcon5使用預設值0x00000700即可。

對於bankcon6和bankcon7中的各個位的描述:

(1)mt(bit[16:15]):設定本bank對映的物理記憶體是sram還是sdram,後面的低位就根據此mt的選擇而分開設定。本板子應置0b11,所以只需要再設定下面兩個引數

(2)trcd(bit[3:2]):ras to cas delay(00=2 clocks,01=3 clocks,10=4 clocks),推2410手冊上的薦值是0b01。我們pc的bios裡也可以調節的,應該玩過吧。

(3)scan(bit[1:0]):column address number(00 = 8-bit,01 = 9-bit,10= 10-bit),sdram列位址位數。查閱hy57v561620ct-h晶元手冊得知此值是9,所以scan=0b01。

綜合以上各值,bankcon6 – 7設為0x00018005。

3、 refresh:重新整理控制暫存器。

此暫存器的bit[23:11]可參考預設值,或自己根據經驗修改,這裡用0x008e0000,關鍵是最後的refresh counter(簡稱r_cnt,bit[10:0])的設定,2410手冊上給出了公式計算方法。sdram手冊上「8192 refresh cycles / 64ms」的描述,得到重新整理周期為64ms/8192=7.8125us,結合公式,r_cnt=2^11 + 1 – 12 * 7.8125 = 1955。所以可得refresh=0x008e0000+1995=0x008e07a3。

4、 banksize:設定sdram的一些引數。其中bk76map(bit[2:0])配置bank6/7對映的大小,可設定為010 = 128mb/128mb或001 = 64mb/64mb,只要比實際ram大都行,因為bootloader和linux核心都可以檢測可用空間的。banksize=0x000000b2。

5、 mrsrb6、mrsrb7:mode register set register bank6/7

可以修改的只有cl[6:4](cas latency,000 = 1 clock, 010 = 2 clocks, 011=3 clocks),其他的全部是固定的(fixed),故值為0x00000030。這個cas在bios中應該也設定過吧,對pc的速度提公升很明顯哦j

至此,13個暫存器全部配置好了,下面就可以把**複製到sdram中執行了,同樣的程式速度要比片內sram執行的慢不少。

S3C2440之I O暫存器和中斷暫存器

i o暫存器 一.埠暫存器組 gpacon 0 輸出 1 初始引腳狀態 gpxcon 00 輸入,01 輸出,10 初始引腳狀態,11 保留 gpxdat gpxup 0 允許上拉,1 禁止上拉 一般情況下不需要設定gpxup 二,外部中斷控制暫存器組 extiin0 7 0 000 低電平,001...

S3C2440的中斷暫存器

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...

S3C2440 中斷控制暫存器

1 subsrcpnd 暫存器 sub source pending subsrcpnd 暫存器被用來標識 int rxd0 int txd0 等中斷 s3c2410中這類中斷有 11 個,而 s3c2440 中有 15 個 是否已經發生,每位對應乙個中斷。當這些中斷發生並且沒有被 intsubms...