TMS320F28335之外部接口

  • 外部寄存器接口原理
    TMS320F28335之外部接口_第1张图片
    TMS320F28335之外部接口_第2张图片
    TMS320F28335之外部接口_第3张图片
    TMS320F28335之外部接口_第4张图片
    TMS320F28335之外部接口_第5张图片
    TMS320F28335之外部接口_第6张图片
    TMS320F28335之外部接口_第7张图片
    TMS320F28335之外部接口_第8张图片

  • 外部接口寄存器定义
    TMS320F28335之外部接口_第9张图片
    TMS320F28335之外部接口_第10张图片
    TMS320F28335之外部接口_第11张图片
    TMS320F28335之外部接口_第12张图片

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) 参考指南》

你可能感兴趣的:(DSP_28335)