DM642之EMIFA模塊

首先,EMIFA模塊引腳圖如下:
上圖中,ACE3,ACE2,ACE1,ACE0爲片選信號,即存儲空間使能信號,每個空間的大小爲256MB。
CE0: 0X8000 0000  ~ 0X8FFF FFFF
CE1: 0X9000 0000 ~  0X9FFF FFFF 
CE2: 0XA000 0000 ~  0XAFFF FFFF
CE3: 0XB000 0000 ~  0XBFFF FFFF
 
大概先說這麼多,看下實際編程時的寄存器設置:
EMIFA模塊共需要設置12個寄存器,按順序如下:
  1. EMIFA全局控制寄存器 GBLCTL
  2. CE0存儲空間控制寄存器 CECTL0
  3. CE1存儲空間控制寄存器 CECTL1
  4. CE2存儲空間控制寄存器 CECTL2
  5. CE3存儲空間控制寄存器 CECTL3
  6. SDRAM控制寄存器  SDCTL
  7. SDRAM時序寄存器 SDTIM
  8. SDRAM擴展寄存器 SDEXT
  9. CE0次級控制寄存器 CESEC0
  10. CE1次級控制寄存器 CESEC1
  11. CE2次級控制寄存器 CESEC2
  12. CE3次級控制寄存器 CESEC3
其中比較重要的是1,2,3
GBLCTL我設置的值爲0x52078,實現以下配置:
  • 使能ECLKOUT2,設置ECLKOUT2(見上圖)的頻率爲1/2 EMIF輸入時鐘頻率(EMIF輸入時鐘頻率可以是 ECLKIN,1/4CPU時鐘,1/6CPU時鐘
  • 使能ECLKOU1
  • 使能CLKOUT4,,該管腳與GP1混用
  • 使能CLKOUT6,該管腳與GP2混用
CECTLx寄存器組比較重要的是字段 MTYPE [7:4]
對於C64x系列DSP:
MTYPE字段如下(該字段用於設置對應存儲空間的模式)
 0000b  8位寬異步接口
 0001b  16位寬異步接口
 0010b  32位寬異步接口
 0011b  32位寬SDRAM
 0100b  32位寬可編程同步存儲器
 1000b  8位寬SDRAM
 1001b  16位寬SDRAM
 1010b  8位寬可編程同步存儲器
 1011b  16位寬可編程同步存儲器
 1100b  64位寬異步接口
 1101b  64位寬SDRAM
 1110b  64位寬可編程同步存儲器
 
由於VPM642開發板的CE0對應的是64位SDRAM,故CECTL0設置爲 0xFFFF FFD3
而由於串口使用的是8位異步模式,故將cectl1[7:4]設置爲0,其他字段是用於指定地址形狀以及訪問該空間的控制信號,這部分比較複雜具體可見:《TMS320C6000系列的CPU與外設》
 
SDCTL,SDTIM以及SDEXT寄存器用於設置SDRAM空間的刷新,時序以及尋址特性,具體可見上面的參考書。
 
實際的設置代碼如下:
1.初始化
/*SEEDDM642的emifa的設置結構*/
EMIFA_Config Seeddm642ConfigA ={
        0x00052078,/*gblctl EMIFA(B)global control register value */
                 /*將CLK6、4、1使能;將MRMODE置1;使能EK2EN,EK2RATE*/
        0xffffffd3,/*cectl0 CE0 space control register value*/
                 /*將CE0空間設爲SDRAM*/
        0x73a28e01,/*cectl1 CE1 space control register value*/
                 /*Read hold: 1 clock;
                     MTYPE : 0000,選擇8位的異步接口
                     Read strobe :001110;14個clock寬度
                     TA:2 clock; Read setup 2 clock;
                     Write hold :2 clock; Write strobe: 14 clock
                     Write setup :7 clock
                     --            ---------------
                        \     14c    /1c
                        \----------------/ */

        0x22a28a22, /*cectl2 CE2 space control register value*/
             0x22a28a42, /*cectl3 CE3 space control register value*/
        0x57115000, /*sdctl SDRAM control register value*/
        0x0000081b, /*sdtim SDRAM timing register value*/
        0x001faf4d, /*sdext SDRAM extension register value*/
        0x00000002, /*cesec0 CE0 space secondary control register value*/
        0x00000002, /*cesec1 CE1 space secondary control register value*/
        0x00000002, /*cesec2 CE2 space secondary control register value*/
        0x00000073 /*cesec3 CE3 space secondary control register value*/    
};
 
2.設置:
/*EMIFA的初始化,將CE0設爲SDRAM空間,CE1設爲異步空間
    注,DM642支持的是EMIFA,而非EMIF*/

  EMIFA_config(&Seeddm642ConfigA);
 
再貼一張DM642與SDRAM的接線示意圖
SDRAS:SDRAM行地址開關
SDCAS:SDRAM列地址開關
SDWE:可寫
SDCKE:SDRAM 時鐘使能信號
CEn    :片選
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章