28335XINTF的簡單使用


28335 XINTF基本特點

  1. 一共有三個外部存儲區域:區域0(Zone 0),區域6(Zone 6)和區域7(Zone 7).對應的
    訪問地址為:Zone 0:0x0000_4000-0x0000_4fff,Zone 6:0x0010_0000-0x001f_ffff,
    Zone 7:0x0020_0000-0x002f_ffff.當訪問對應的地址時,對應的外部片選信號(XZCS0,XZCS6,
    XZCS7)會使能(保持低電平)。
  2. 所有區域都支持DMA訪問,且數據位寬16位和32位可選
  3. 所有外部存儲器配置寄存器受ELLOW保護
  4. 有一個可選的外部存儲器時鍾輸出引腳
  5. 獨立靈活配置的數據建立(Lead)、保持(Active)、追蹤(Trail)時間,且保持時間可根據外部設備的需求在此基礎上增加。

時鍾源

外部存儲器時鍾和系統時鍾的關系圖如下圖所示:
XINTF時鍾
圖中共有三個時鍾:SYSCLKOUT,XTIMCLK和XCLKOUT。兩個寄存器:XINTCNF2和PCLKR3。
其中SYSCLKOUT為系統時鍾,一般為150Mhz。XTIMCLK為外部存儲器使用的時鍾,所有的時序實現都是基於這個時鍾,並且都是在其上升沿動作。XCLKOUT時鍾為可選的輸出時鍾,這個時鍾直接輸出到XCLKOUT引腳,如果不需要輸出時鍾的話,為了減少噪聲干擾最好將這個時鍾關閉。
XINTCNF2寄存器里面的位定義了時鍾的分頻情況和是否使能時鍾輸出。PCLKR3為外部存儲器外設時鍾的使能信號。在配置XINTF模塊任何寄存器之前必須要使能該時鍾。
關於外設這里多說幾句:我們看到很多嵌入式芯片的應用資料和說明手冊都會提到這個詞,實際上,這個詞有兩種不同的含義。一層意義是Peripheral,即CPU外圍設備,比如DSP28335中的ECAP,EPWM,ADC等都屬於Peripheral.另一層意思是External Devices,即DSP芯片之外的設備,比如這里XINTF外接的存儲器等。

信號引腳

引腳 類型 描述
XD(31:0) I/O/Z 雙向32位數據總線,16位總線使用XD(15:0)
XA(31:1) O/Z 地址總線
XA0/!(XWE1) O/Z 16位數據模式,此為地址線0(XA0),32位數據模式為寫選通1(!(XWE1))
XCLKOUT O/Z 可選時鍾輸出引腳
!(XWE0) O/Z 寫選通信號0
!(XRD) O/Z 讀選通信號
XR/!(W) O/Z 讀寫控制,高讀低寫。此信號一般不用,上面的讀寫選通更清楚
!(XZCS0,6,7) O 片選信號
XREADY I 可選的擴展信號,說明外設是否完成傳輸,DSP根據此信號增加額外的時間
!(XHOLD) I 請求XINTF釋放外部總線
!(XHOLDA) O/Z XINTF已經釋放的外部總線

ps: !(信號)表示這個信號為低電平有效,否則為高電平有效。

時序圖

通用時序圖

下圖中為外部存儲器讀寫的通用時序圖:
通用時序圖

  1. XTIMCLK的時鍾頻率可以為SYSCLKOUT的不分頻和2分頻,這里選擇的是不分配。同樣,XCLKOUT的時鍾頻率可以是XTIMCLK的不分配和2分配,這里選擇2分配。
  2. 時序信號的動作和XCLKOUT無關,僅由XTIMCLK決定。這里設置的建立、保存、追蹤時間都是2.
  3. 兩次讀寫之間有一個空閑的Alignment Cycle時間。

讀取時序圖

下圖為XINTF的讀取時序圖:
讀時序圖

  1. 讀取時序圖列出了大部分讀取時的信號時序,上面這些時序並不是都會產生的。比如第三個時序XCLKOUT(/1 Mode)和第四個時序XCLKOUT(/2 Mode)最多只會出現一個。但將這兩種可能都列出來了。
  2. XREADY是擴展信號,是外部設備通知其讀寫是否需要額外的時鍾給保持時間。有同步(synchronize)和非同步(asynchronize)兩種。一般不用,這里不詳細解釋,需要的話可以自己查看數據手冊。
  3. 建立、保持和拖尾時間的設定值分別為2,4,2(保持時間=設定值+1=5,時間配置不加倍的情況下)。
  4. 由圖可以看出外部設備必須要在!(XRD)上升沿之前將數據准備好,以便供DSP讀取。

寫入時序圖

下圖為XINTF的寫入時序圖:
寫時序圖
寫時序圖和讀時序圖差不多,這里不再過多的介紹。對於寫時序圖由於數據總線為DSP驅動,其會在!(XWE0[1])的下降沿輸出數據,因此外部設備應該在其上升沿將數據讀出。

XINTF的配置

在了解時序圖之后,配置XINTF就比較輕松了。這里不討論DMA訪問和加入XREADY信號的情況。也不對各個模式下時序要求做過多說明。如果需要了解這方面的內容請查看具體的數據手冊。這里只對通常情況下的使用進行說明。假設我們將一個FPGA當作外部存儲器,並掛在了區域7上。

  1. 使能XINTF的時鍾:
    SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

  2. 將對應的IO配置為XINTF外設使用:
    EALLOW;
    GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3; // 數據線0:XD0
    ...
    GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3; // 地址線1(這里使用16位數據位寬),XA0/XWE1n
    ...
    GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3; // XWE0 寫使能(讀使能不可復用不用配置)
    GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // XZCS7 片選
    EDIS;

  3. 配置XINTCNF2寄存器,這個寄存器的配置對所有的外部區域都有用。下面所有的寄存器都受EALLOW保護,因此配置之前需要使用EALLOW取消保護。
    XintfRegs.XINTCNF2.bit.XTIMCLK = 0; //XTIMCLK等於SYSCLK
    XintfRegs.XINTCNF2.bit.CLKOFF = 1; //禁止XCLKOUT時鍾輸出
    XintfRegs.XINTCNF2.bit.WRBUFF = 0; //不使用寫緩沖

  4. 配置區域7的時序信號
    XintfRegs.XTIMING7.bit.XWRLEAD = 1; //寫建立時間=1 XTIMCLK
    XintfRegs.XTIMING7.bit.XWRACTIVE = 2; //寫保持時間=2+1 XTIMCLK
    XintfRegs.XTIMING7.bit.XWRTRAIL = 1; //寫追蹤時間=1 XTIMCLK
      
    XintfRegs.XTIMING7.bit.XRDLEAD = 1; //讀建立時間=1 XTIMCLK
    XintfRegs.XTIMING7.bit.XRDACTIVE = 3; //讀保持時間=3+1 XTIMCLK
    XintfRegs.XTIMING7.bit.XRDTRAIL = 0; //讀追蹤時間=0 XTIMCLK
      
    XintfRegs.XTIMING7.bit.USEREADY = 0; //不適用XREADY信號
    XintfRegs.XTIMING7.bit.READYMODE = 0;
      
    XintfRegs.XTIMING7.bit.X2TIMING = 0; //配置時間不加倍
      
    XintfRegs.XTIMING7.bit.XSIZE = 3; //16位位寬訪問

  5. 加入必要的等待時間,以保證配置完成。同時不要忘了使用EDIS加寫入保護
    asm(" RPT #7 || NOP");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM