TMS320F28335之外部接口

  • 外部寄存器接口原理
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述

  • 外部接口寄存器定義
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述

28335的XINTF接口沒有中斷設置,初始化配置XINTF模塊就可直接使用,數據訪問地址格式爲Data=(^(volatile Uint16^)(0x4000+ 0x0000)),其中0x4000爲基地址,0x0000爲偏移地址,^爲指針符號*。由此總結xintf接口配置步驟爲:
1、設置GPIO爲xintf模塊。
2、開啓xintf時鐘。
3、設置xintf模塊配置
4、訪問或寫入xintf地址。

  • 外部接口頭文件DSP2833x_Xintf.h程序如下
// TI File $Revision: /main/4 $
// Checkin $Date: July 27, 2009   13:57:25 $
//###########################################################################
//
// FILE:   DSP2833x_Xintf.h
//
// TITLE:  DSP2833x Device 外部接口寄存器定義.
//
//###########################################################################
// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
// $Release Date: August 4, 2009 $
//###########################################################################

#ifndef DSP2833x_XINTF_H
#define DSP2833x_XINTF_H


#ifdef __cplusplus
extern "C" {
#endif


// XINTF 時序寄存器位定義:
struct XTIMING_BITS {    // bits  描述
   Uint16 XWRTRAIL:2;    // 1:0   寫訪問跟蹤時間
   Uint16 XWRACTIVE:3;   // 4:2   寫訪問有效時間
   Uint16 XWRLEAD:2;     // 6:5   寫訪問建立時間
   Uint16 XRDTRAIL:2;    // 8:7   讀訪問跟蹤時間
   Uint16 XRDACTIVE:3;   // 11:9  讀訪問有效時間
   Uint16 XRDLEAD:2;     // 13:12 讀訪問建立時間
   Uint16 USEREADY:1;    // 14    區域XREADY信號採樣使能
   Uint16 READYMODE:1;   // 15    採樣方式控制
   Uint16 XSIZE:2;       // 17:16 數據總線寬度設定
   Uint16 rsvd1:4;       // 21:18 保留
   Uint16 X2TIMING:1;    // 22    實際值與設定值比值
   Uint16 rsvd3:9;       // 31:23 保留
};
//時序寄存器
union XTIMING_REG {
   Uint32               all;
   struct XTIMING_BITS  bit;    //時序寄存器位定義
};

// XINTF 控制寄存器位定義:
struct XINTCNF2_BITS {    // bits  描述
   Uint16 WRBUFF:2;       // 1:0   寫緩衝器深度控制位
   Uint16 CLKMODE:1;      // 2     XCLKOUT 時鐘頻率控制位
   Uint16 CLKOFF:1;       // 3     使能 XCLKOUT
   Uint16 rsvd1:2;        // 5:4   保留
   Uint16 WLEVEL:2;       // 7:6   寫緩衝寄存器數據個數
   Uint16 rsvd2:1;        // 8     保留
   Uint16 HOLD:1;         // 9     自動允許外部設備請求
   Uint16 HOLDS:1;        // 10    請求對總線訪問狀態
   Uint16 HOLDAS:1;       // 11    進行外部設備訪問狀態
   Uint16 rsvd3:4;        // 15:12 保留
   Uint16 XTIMCLK:3;      // 18:16 配置XTIMCLK
   Uint16 rsvd4:13;       // 31:19 保留
};
//配置寄存器
union XINTCNF2_REG {
   Uint32                all;
   struct XINTCNF2_BITS  bit;       //配置寄存器位定義      
};

// XINTF 區域切換控制寄存器位定義:
struct XBANK_BITS {                 // bits  描述
   Uint16  BANK:3;                  // 2:0   切換時的插入時間
   Uint16  BCYC:3;                  // 5:3   指定區域
   Uint16  rsvd:10;                 // 15:6  保留
};
//區域切換控制寄存器
union XBANK_REG {
   Uint16             all;
   struct XBANK_BITS  bit;          //區域切換控制寄存器位定義
};

//模塊復位寄存器位定義
struct XRESET_BITS {
    Uint16  XHARDRESET:1;
    Uint16  rsvd1:15;
};
//模塊復位寄存器
union XRESET_REG {
    Uint16            all;
    struct XRESET_BITS bit;         //模塊復位寄存器位定義
};


//---------------------------------------------------------------------------
// XINTF 寄存器文件:
//
struct XINTF_REGS {
   union XTIMING_REG XTIMING0;      //區域0時序寄存器
   Uint32  rsvd1[5];                //保留
   union XTIMING_REG XTIMING6;      //區域6時序寄存器
   union XTIMING_REG XTIMING7;      //區域7時序寄存器
   Uint32  rsvd2[2];                //保留
   union XINTCNF2_REG XINTCNF2;     //配置寄存器
   Uint32  rsvd3;                   //保留
   union XBANK_REG    XBANK;        //區域切換控制寄存器
   Uint16  rsvd4;                   //保留
   Uint16  XREVISION;               //版本修訂寄存器
   Uint16  rsvd5[2];                //保留
   union XRESET_REG   XRESET;       //模塊復位寄存器
};

//---------------------------------------------------------------------------
// XINTF 外部引用 & 函數聲明:
//
extern volatile struct XINTF_REGS XintfRegs;


#ifdef __cplusplus
}
#endif /* extern "C" */

#endif  // end of DSP2833x_XINTF_H definition

//===========================================================================
// No more.
//===========================================================================
  • XINTF配置文件DSP2833x_Xintf.c程序如下
// TI File $Revision: /main/5 $
// Checkin $Date: August 16, 2007   11:06:26 $
//###########################################################################
//
// FILE:   DSP2833x_Xintf.c
//
// TITLE:   DSP2833x Device 外部接口初始化 & 支持函數.
//
// DESCRIPTION:
//
//          Example initialization function for the external interface (XINTF).
//          This example configures the XINTF to its default state.  For an
//          example of how this function being used refer to the
//          examples/run_from_xintf project.
//
//###########################################################################
// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
// $Release Date: August 4, 2009 $
//###########################################################################

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

//---------------------------------------------------------------------------
// InitXINTF:
//---------------------------------------------------------------------------
// 改函數將外部接口初始化至默認的復位狀態.
//
// Do not modify the timings of the XINTF while running from the XINTF.  Doing
// so can yield unpredictable results


void InitXintf(void)
{
    // 這顯示瞭如何寫XINTF寄存器。
    // 這裏使用了重置後的默認狀態值。
    // 不同的硬件需要不同的配置。

    // 爲INTF配置一個例子,在如下目錄
    // F28335 eZdsp, refer to the examples/run_from_xintf project.

    // 任何更改XINTF配置只能從XINTF擴展之外的區域運行代碼。


    // 所有區域---------------------------------
    // 所有區域的基準時間時鐘爲 XTIMCLK = 1/2 SYSCLKOUT
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;         //開啓XINTF時鐘信號
    XintfRegs.XINTCNF2.bit.XTIMCLK = 1;             //基準時鐘XTIMCLK = 1/2 SYSCLKOUT
    XintfRegs.XINTCNF2.bit.WRBUFF = 0;              //無寫緩衝寄存器
    XintfRegs.XINTCNF2.bit.CLKOFF = 1;              //禁止XCLKOUT
    XintfRegs.XINTCNF2.bit.CLKMODE = 1;             //XCLKOUT=XTIMCLK/2

    XintfRegs.XTIMING0.bit.XWRLEAD = 2;             //區域0寫建立時間爲11b,週期數爲6
    XintfRegs.XTIMING0.bit.XWRACTIVE = 5;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING0.bit.XWRTRAIL = 2;            //跟蹤時間爲11b,週期數爲6
    // Zone read timing
    XintfRegs.XTIMING0.bit.XRDLEAD = 2;             //區域0讀建立時間爲11b,週期數爲6
    XintfRegs.XTIMING0.bit.XRDACTIVE = 5;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING0.bit.XRDTRAIL = 2;            //跟蹤時間爲11b,週期數爲6

    // double all Zone read/write lead/active/trail timing
    XintfRegs.XTIMING0.bit.X2TIMING = 1;            //比值2:1

    // Zone will sample XREADY signal
    XintfRegs.XTIMING0.bit.USEREADY = 0;            //XREADY信號採樣
    XintfRegs.XTIMING0.bit.READYMODE = 1;           //異步採樣

    XintfRegs.XTIMING0.bit.XSIZE = 3;               //數據總線寬度,16位

//*****************************************************************************//
//片外ram訪問
//****************************************************************************//
    XintfRegs.XTIMING6.bit.XWRLEAD = 3;             //區域6寫建立時間爲11b,週期數爲6    
    XintfRegs.XTIMING6.bit.XWRACTIVE = 7;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING6.bit.XWRTRAIL = 3;            //跟蹤時間爲11b,週期數爲6
    // Zone read timing`    `   
    XintfRegs.XTIMING6.bit.XRDLEAD = 3;             //區域6讀建立時間爲11b,週期數爲6
    XintfRegs.XTIMING6.bit.XRDACTIVE = 7;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING6.bit.XRDTRAIL = 3;            //跟蹤時間爲11b,週期數爲6

    // double all Zone read/write lead/active/trail timing
    XintfRegs.XTIMING6.bit.X2TIMING = 1;            //比值

    // Zone will sample XREADY signal
    XintfRegs.XTIMING6.bit.USEREADY = 0;            //不對ready信號採樣
    XintfRegs.XTIMING6.bit.READYMODE = 1;           //異步採樣 

    XintfRegs.XTIMING6.bit.XSIZE = 3;               //數據總線寬度,16位


    // Zone 7------------------------------------
    XintfRegs.XTIMING7.bit.XWRLEAD = 3;             //區域7寫建立時間爲11b,週期數爲6
    XintfRegs.XTIMING7.bit.XWRACTIVE = 7;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING7.bit.XWRTRAIL = 3;            //跟蹤時間爲11b,週期數爲6
    // Zone read timing
    XintfRegs.XTIMING7.bit.XRDLEAD = 3;             //區域7讀建立時間爲11b,週期數爲6
    XintfRegs.XTIMING7.bit.XRDACTIVE = 7;           //有效時間爲111b,週期數爲14
    XintfRegs.XTIMING7.bit.XRDTRAIL = 3;            //跟蹤時間爲11b,週期數爲6

    // double all Zone read/write lead/active/trail timing
    XintfRegs.XTIMING7.bit.X2TIMING = 1;            //比值2:1

    // Zone will sample XREADY signal
    XintfRegs.XTIMING7.bit.USEREADY = 0;            //XREADY信號採樣
    XintfRegs.XTIMING7.bit.READYMODE = 1;           //異步採樣 

    // Size must be either:
    XintfRegs.XTIMING7.bit.XSIZE = 3;               //數據總線寬度,16位

    // Bank switching
   XintfRegs.XBANK.bit.BANK = 0;                    //區域7被指定
    XintfRegs.XBANK.bit.BCYC = 7;                   //區域切換的插入延時時間 
    EDIS;
   //Force a pipeline flush to ensure that the write to
   //the last register configured occurs before returning.


// InitXintf32Gpio();

//   asm(" RPT #7 || NOP");

}

//===========================================================================
// No more.
//===========================================================================
  • 參考資料
    《手把手教你學DSP:基於TMS320F28335》
    《TMS320F28335DSP原理與開發編程》
    《28335接口擴展 (XINTF) 參考指南》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章