This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:XINTF

Guru**** 2392095 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1494363/tms320f28335-xintf

器件型号:TMS320F28335

工具与软件:

尊敬的专家:

我想为 LCD 模块使用 XINTF。 (或外部 RAM)。  但不能很好地工作。    使用示波器监控 CS 信号以及地址和数据引脚、无响应。   代码如下所示。  您能帮助检查问题是什么吗?  非常感谢。

Zone7.

 ZONE7B   :origin = 0x20FC00、length = 0x000400   /* XINTF zone 7 - data space */

void InitXintfZone7 (void)

//确保 XINTF 时钟被启用
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

//将 GPIO 配置为具有16位数据总线的 XINTF
//此函数位于 DSP2833x_XINTF.c 中

EALLOW;
//所有区域-------------------------------------------------------
//所有区域的时序都基于 XTIMCLK = SYSCLKOUT
XintfRegs.XINTCNF2.bit.XTIMCLK = 0;
//最多缓存3次写入
XintfRegs.XINTCNF2.bit.WRBUFF = 3;
// XCLKOUT 已启用
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
// XCLKOUT = XTIMCLK
XintfRegs.XINTCNF2.bit.CLKMODE = 0;
//第7区-------------------------------------------------------
//使用 READY 时、ACTIVE 必须为1或更大值
//铅必须始终为1或更大
//区域写入时序
XintfRegs.XTIMING7.bit.XWRLEAD = 3;
XintfRegs.XTIMING7.bit.XWRACTIVE = 5;
XintfRegs.XTIMING7.bit.XWRTRAIL = 1;// Only 2 bit (仅2位)
//区域读取时序
XintfRegs.XTIMING7.bit.XRDLEAD = 3;
XintfRegs.XTIMING7.bit.XRDACTIVE = 5;
XintfRegs.XTIMING7.bit.XRDTRAIL = 1;//只有2位

//不要将所有区域读取/写入导联/活动/跟踪时间加倍
XintfRegs.XTIMING7.bit.X2TIMING = 0;

//区域不会对 XREADY 信号进行采样
XintfRegs.XTIMING7.bit.USEREADY = 0;
XintfRegs.XTIMING7.bit.READYMODE = 0;

// 1、1 = x16数据总线
// 0、1 = x32数据总线
//保留其他值
XintfRegs.XTIMING7.bit.XSIZE = 3;
EDIS;

//强制管道刷新以确保写入
//最后配置的寄存器出现在返回之前。
asm (" RPT #7 || NOP");
}

void InitXintf16Gpio()

EALLOW;
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3;// XD15
GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3;// XD14
GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3;// XD13
GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3;// XD12
GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 3;// XD11
GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3;// XD10
GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 3;// XD19
GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3;// XD8
GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 3;// XD7
GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3;// XD6
GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3;// XD5
GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3;// XD4
GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3;// XD3
GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3;// XD2
GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3;// XD1
GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3;// XD0

GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3;// xa0/XWE1n
GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3;// XA1
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;// XA2
GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;// XA3
GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3;// XA4
GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 3;// XA5
GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3;// XA6
GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3;// XA7

GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 3;// xA8
GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 3;// xA9
GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 3;// XA10
GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 3;// XA11
GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 3;// XA12
GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 3;// XA13
GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 3;// XA14
GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 3;// XA15
GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3;// XA16
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3;// XA17
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3;// XA18
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3;// XA19
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;// XREADY
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3;// XRNW
GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3;// XWE0
GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3;// XZCS0
GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3;// XZCS7
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3;// XZCS6

EDIS;
}

 uint16 * extMemPtr =(UINT16 *) 0x20FC00;
  //写入数据
  *extMemPtr = 0xABCD;
  // 读取数据
  Uint16 ReadData =* extMemPtr;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请在 EALLOW 之后移动以下代码、看看这是否有用-

    SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

    此致、

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该时钟已在 InitPeripheralClocks()中启用。   此函数具有 EALLOW 和 EDIS。     

    void InitPeripheralClocks (void)

    EALLOW;

    // HISPCP/LOSPCP 预分频寄存器设置、通常会将其设置为默认值
    SysCtrlRegs.HISPC.all = 0x0003;
    SysCtrlRegs.LOSPCPC.all = 0x0002;

    // XCLKOUT 与 SYSCLKOUT 的比率。 缺省情况下、XCLKOUT = 1/4 SYSCLKOUT
    // XTIMCLK = SYSCLKOUT/2
    XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
    // XCLKOUT = XTIMCLK/2
    XintfRegs.XINTCNF2.bit.CLKMODE = 1;
    //启用 XCLKOUT
    XintfRegs.XINTCNF2.bit.CLKOFF = 0;

    //为选定的外设设置外设时钟。
    //如果不使用外设、请关闭时钟
    //以节省电源。
    //
    //注:并非所有2833x 衍生产品都提供所有外设。
    //请参阅特定器件的数据表。

    SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1;// CPU Timer 0
    SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1;// CPU Timer 1
    SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1;// CPU Timer 2

    SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;// DMA Clock (DMA 时钟)
    SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;// XTIMCLK
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// GPIO input clock

    EDIS;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助!

    修改某些代码后、检查信号(CS、XWR、RD、XA、XD)是否正确。    写入函数看起来正常。   但读取功能仍然异常。     ReadData =* extMemPtr; 代码的结果为0xFC00。   ReadData 的值为0xFC00。   如果我将地址更改为0x200001。   运行后、ReadData 的值为0x0001。   (ReadData 始终是地址的低两个字节) 这很奇怪。   问题出在哪呢?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否检查了电路板上数据和地址的正确连接? 您是否能够看到数据总线以正确的数据正确切换?