LCD實驗學習筆記(六):存儲控制器

s3c2440可以使用地址空間爲1GB(0x00000000到0x40000000)。數組

1G空間分爲8個BANK,每一個BANK爲128MB。函數

設27條地址線,和8個片選引腳(nGCS0-nGCS7)。內存

內存控制器根據地址所在的BANK,自動決定要使用的片選引腳,以使能相應的BANK所鏈接的設備。it

32位CPU不必定用32條地址線。軟件

CPU認爲一個地址對應一個字節(8bit)。CPU發出一個地址,要讀取內存一個字節的數據(內存在BANK6地址從0x30000000開始),內存控制器操做片選引腳和地址線訪問由兩個16位內存芯片組成的32位內存時,內存芯片會一次性返回32位數據(4個字節),內存控制器再從中挑出CPU指定的字節。因此這時地址線的[A1:A0]是不用接的。配置

存儲控制器有13個寄存器,地址從0x48000000開始,每一個32位(4字節):二進制

BWSCON:總線寬度和等待控制寄存器。[0]保留0值,[2:1]用於設置BANK0的數據寬度,01爲16位,10爲32位,在Nor起動時使用,由引腳鏈接狀態決定,是隻讀的,不能軟件設置。[3]閒置。數據

[31:4]共28位,每4位設置一個BANK的參數,好比:di

[5:4]設置BANK1的位寬,00表示8bit,01表示16bit,10表示32bit,11保留;ping

[6]設置BANK1等待使能狀態,0 WAIT disable,1WAIT enable;

[7]設置BANK1引腳是否使用UB/LB。

好比設置BWSCON=0x22011110,二進制爲0010 0010 0000 0001 0001 0001 0001 0000,這裏表示BANK6和BANK7都是32位數據寬度,其餘BANK1-BANK5都是16位數據寬度。

BANKCON0-BANKCON5:經過設置6個寄存器的[14:0],分別控制BANK0到BANK5 的時序,用默認值0x0700便可。

BANKCON6和BANKCON7:兩個BANK接到內存上,除[14:0]控制時序外,[16:15]用於設置內存類型。根據內存芯片的狀況,取值0x00018005。

REFRESH:設置內存刷新

BANKSIZE:設置BANK6/7的內存映射尺寸、電源關閉等,應按內存芯片手冊進行設置。

MRSRB6/MRSRB7:SDRAM模式設置寄存器,好比設置行地址、列地址、芯片內bank選擇等

設置存儲控制器代碼以下:


 

/*
* 設置存儲控制器以使用SDRAM
*/
void memsetup(void)
{
  volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;

  /* 這個函數之因此這樣賦值,而不是像前面的實驗(好比mmu實驗)那樣將配置值   * 寫在數組中,是由於要生成」位置無關的代碼」,使得這個函數能夠在被複制到   * SDRAM以前就能夠在steppingstone中運行   */   /* 存儲控制器13個寄存器的值 */   p[0] = 0x22011110; //BWSCON   p[1] = 0x00000700; //BANKCON0   p[2] = 0x00000700; //BANKCON1   p[3] = 0x00000700; //BANKCON2   p[4] = 0x00000700; //BANKCON3   p[5] = 0x00000700; //BANKCON4   p[6] = 0x00000700; //BANKCON5   p[7] = 0x00018005; //BANKCON6   p[8] = 0x00018005; //BANKCON7   /* REFRESH,   * HCLK=12MHz: 0x008C07A3,   * HCLK=100MHz: 0x008C04F4   */   p[9] = 0x008C04F4;   p[10] = 0x000000B1; //BANKSIZE   p[11] = 0x00000030; //MRSRB6   p[12] = 0x00000030; //MRSRB7}

相關文章
相關標籤/搜索