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.
Hi Expert,
Customer finds that the data to read access is latched a XTIMCLK before RD rising edge, but not at the moment of RD rising edge.
They wonder if the mechanism is normal, and how to configure XINTF to latch the value at the moment of RD rising edge?
Attachment is the register configuration of XINTF. Could you please help to review it and answer the questions?
Thanks!
// TI File $Revision: /main/5 $ // Checkin $Date: August 16, 2007 11:06:26 $ //########################################################################### // // FILE: DSP2833x_Xintf.c // // TITLE: DSP2833x Device External Interface Init & Support Functions. // // 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: //--------------------------------------------------------------------------- // This function initializes the External Interface the default reset state. // // Do not modify the timings of the XINTF while running from the XINTF. Doing // so can yield unpredictable results void InitXintf(void) { // This shows how to write to the XINTF registers. The // values used here are the default state after reset. // Different hardware will require a different configuration. // For an example of an XINTF configuration used with the // F28335 eZdsp, refer to the examples/run_from_xintf project. // Any changes to XINTF timing should only be made by code // running outside of the XINTF. // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT EALLOW; XintfRegs.XINTCNF2.bit.XTIMCLK = 0; // No write buffering XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT is enabled XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK/2 XintfRegs.XINTCNF2.bit.CLKMODE = 1; // Zone 0------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing XintfRegs.XTIMING0.bit.XWRLEAD = 1; XintfRegs.XTIMING0.bit.XWRACTIVE = 2; XintfRegs.XTIMING0.bit.XWRTRAIL = 1; // Zone read timing XintfRegs.XTIMING0.bit.XRDLEAD = 2; XintfRegs.XTIMING0.bit.XRDACTIVE = 4; XintfRegs.XTIMING0.bit.XRDTRAIL = 2; // double all Zone read/write lead/active/trail timing XintfRegs.XTIMING0.bit.X2TIMING = 0; // Zone will sample XREADY signal XintfRegs.XTIMING0.bit.USEREADY = 1; XintfRegs.XTIMING0.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved XintfRegs.XTIMING0.bit.XSIZE = 3; // Zone 6------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing XintfRegs.XTIMING6.bit.XWRLEAD = 2; XintfRegs.XTIMING6.bit.XWRACTIVE = 4; XintfRegs.XTIMING6.bit.XWRTRAIL = 2; // Zone read timing XintfRegs.XTIMING6.bit.XRDLEAD = 1;//2; XintfRegs.XTIMING6.bit.XRDACTIVE =7;// 4; XintfRegs.XTIMING6.bit.XRDTRAIL = 1;//2; // double all Zone read/write lead/active/trail timing XintfRegs.XTIMING6.bit.X2TIMING = 0; // Zone will sample XREADY signal XintfRegs.XTIMING6.bit.USEREADY = 1; XintfRegs.XTIMING6.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved XintfRegs.XTIMING6.bit.XSIZE = 3; // Zone 7------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing XintfRegs.XTIMING7.bit.XWRLEAD = 1; XintfRegs.XTIMING7.bit.XWRACTIVE = 2; XintfRegs.XTIMING7.bit.XWRTRAIL = 1; // Zone read timing XintfRegs.XTIMING7.bit.XRDLEAD = 1; XintfRegs.XTIMING7.bit.XRDACTIVE = 1; XintfRegs.XTIMING7.bit.XRDTRAIL = 1; // double all Zone read/write lead/active/trail timing XintfRegs.XTIMING7.bit.X2TIMING = 0; // Zone will sample XREADY signal XintfRegs.XTIMING7.bit.USEREADY = 1; XintfRegs.XTIMING7.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved XintfRegs.XTIMING7.bit.XSIZE = 3; // Bank switching // Assume Zone 7 is slow, so add additional BCYC cycles // when ever switching from Zone 7 to another Zone. // This will help avoid bus contention. XintfRegs.XBANK.bit.BANK = 7; XintfRegs.XBANK.bit.BCYC = 7; EDIS; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. InitXintf16Gpio(); // InitXintf32Gpio(); asm(" RPT #7 || NOP"); } void InitXintf32Gpio() { EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 3; // XD31 GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 3; // XD30 GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 3; // XD29 GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 3; // XD28 GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 3; // XD27 GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 3; // XD26 GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 3; // XD25 GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 3; // XD24 GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 3; // XD23 GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 3; // XD22 GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // XD21 GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // XD20 GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // XD19 GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // XD18 GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 3; // XD17 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3; // XD16 GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 3; // XD31 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 3; // XD30 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 3; // XD29 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 3; // XD28 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 3; // XD27 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 3; // XD26 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // XD25 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // XD24 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // XD23 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // XD22 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // XD21 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // XD20 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // XD19 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // XD18 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // XD17 asynchronous input GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // XD16 asynchronous input InitXintf16Gpio(); } 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; } //=========================================================================== // No more. //===========================================================================
Best Regards
Rayna
Rayna,
This information is included in the datasheet and XINTF user guide.
With respect to the XRD behavior, I would consider the latch operation to be completed when the signal is released back to high. The relevant setup time from the datasheet must be satisfied:
This is consistent with SRAM devices in general:
-Tommy