欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

SDRam的初始化

作者:未知   來源:布冬冬 的空間   點擊數:  更新時間:2014年08月16日   【字體:

過年來的這一個月,都是在整著啟動文件啊,SDRam初始化啊,Nor Flash初始化啊,還有程序在SDRAM中運行等一干事情。

 

今天就記錄一下,我初始化SDRam過程中所學到的東西以及一些體會。本人還屬于菜鳥,有什么講得不好的地方,還希望指正指正哈。也是為了以后不會溫習之用。

 

雖然手里有一些樣例程序,但是真正理解起來還是很費勁。

開發板:LPC1788,SDRAM:HY57V561620,據說已經停產了~~~~ SDRAM大概都步驟都相同,只是有些芯片具體的參數需要查閱資料才能填寫。

 

初始化SDRAM的基本步驟:

1. 初始化引腳,PCONP,EMCDLYCTL,EMCControl寄存器,以及一些與芯片相關的參數,還有EMCDynamicConfig0.

2. SDRAM上電后,等待100us或是200us,期間可以發送NOP命令。

3. 對所有banks預充電,PALL。

4. 執行8次預充電:給EMCDynamicRefresh賦值,然后延時一段時間,令其有8次self-refresh的時間。(自己的理解)

5. 延時完畢后,對EMCDynamicRefresh寄存器賦值。對刷新寄存器的賦值如下:



6. 設置模式寄存器Mode Register。以虛讀的方式對其進行賦值。如下:

 
  *(INT32U*) EMCDynamicControl = 0x00000083;
 
  dummy = *((volatile INT32U*)( DynamicMemoryBaseAddr|(0x23 << 13)));

至今還沒完全明白為什么0x23<<13?

7. 最后設置Normal 并延時一段時間。

這樣就差不多大功告成了。

在驗證SDRAM是否設置正確的過程遇到一些麻煩。

1. 引腳沒有全部初始化完全。導致對SDRAM賦值的過程中,有一部分值不能被賦值上。

2. *(INT16U*)Addr++,這個過程中,如果Addr的初始值是0xA0000000的話,Addr就變成0xA0000002.

  同理,*(INT32U*)Addr++,這個過程中,如果Addr的初始值是0xA0000000的話,Addr就變成0xA0000004.

3. 先是對SDRAM賦值0,然后再對其賦值。

for(i = 0; i < (SDRam_Size/4); i++)
  {
     *SDRamAdd8++ = 0x11;
     *SDRamAdd8++ = 0x22;
     *SDRamAdd8++ = 0x33;
     *SDRamAdd8++ = 0x44;
  }

 for(i = 0; i < (SDRam_Size/4); i++)
  {
    SDRamAdd32--; 
    if( *(SDRamAdd32) != 0x44332211)
      {
         str = "Initialization of 8bits SDRam is wrong!";
         putchars(str);
      }
  }

在對其進行16bits的賦值再次驗證一下就可以了。

關閉窗口

相關文章