#include "TuneUpPlane.h" #include "DSP281x_Examples.h" #include "DSP281x_Device.h" #include "DSP281x_Xintf.h" #define SelectWorkWithFlash() WriteOper(0,0,0,0) #define SelectStrob67_ForFlash() WriteOper(1,0,1,0) unsigned int cl_led1 = 0; unsigned int cl_led2 = 0; void SetupOperLine(); #pragma CODE_SECTION(Led1_Toggle,".fast_run"); #pragma CODE_SECTION(Led2_Toggle,".fast_run"); #pragma CODE_SECTION(i_led2_on_off,".fast_run"); void i_led2_on_off(int i) { EALLOW; if (i) GpioDataRegs.GPDSET.bit.GPIOD6=1; else GpioDataRegs.GPDCLEAR.bit.GPIOD6=1; EDIS; } #pragma CODE_SECTION(i_led1_on_off,".fast_run"); void i_led1_on_off(int i) { EALLOW; if (i) GpioDataRegs.GPASET.bit.GPIOA10=1; else GpioDataRegs.GPACLEAR.bit.GPIOA10=1; EDIS; } //#pragma CODE_SECTION(i_led2_on_off_special,".fast_run"); //void i_led2_on_off_special(int i) //{ // EALLOW; // // if (i) GpioDataRegs.GPDSET.bit.GPIOD6=1; // else GpioDataRegs.GPDCLEAR.bit.GPIOD6=1; // // // EDIS; //} #pragma CODE_SECTION(i_led1_on_off_special,".fast_run"); void i_led1_on_off_special(int i) { EALLOW; if (i) { GpioDataRegs.GPASET.bit.GPIOA10=1; cl_led1++; } else { if (cl_led1) cl_led1--; if (cl_led1 == 0) GpioDataRegs.GPACLEAR.bit.GPIOA10=1; } EDIS; } #pragma CODE_SECTION(i_led2_on_off_special,".fast_run"); void i_led2_on_off_special(int i) { EALLOW; if (i) { GpioDataRegs.GPDSET.bit.GPIOD6=1; cl_led2++; } else { if (cl_led2) cl_led2--; if (cl_led2 == 0) GpioDataRegs.GPDCLEAR.bit.GPIOD6=1; } EDIS; } void Led1_Toggle() { EALLOW; GpioDataRegs.GPATOGGLE.bit.GPIOA10=1; EDIS; } void Led2_Toggle() { EALLOW; GpioDataRegs.GPDTOGGLE.bit.GPIOD6=1; EDIS; } void SetupLedsLine() { EALLOW; GpioMuxRegs.GPDMUX.bit.T4CTRIP_SOCB_GPIOD6 = 0; GpioDataRegs.GPDDAT.bit.GPIOD6 = 0; GpioMuxRegs.GPDDIR.bit.GPIOD6 = 1; GpioMuxRegs.GPAMUX.bit.CAP3QI1_GPIOA10 = 0; GpioDataRegs.GPADAT.bit.GPIOA10 = 0; GpioMuxRegs.GPADIR.bit.GPIOA10 = 1; EDIS; } #pragma CODE_SECTION(pause_1000,".fast_run"); void pause_1000(unsigned long t) { unsigned long i; t = t >> 1; for (i = 0; i < t; i++) { DSP28x_usDelay(40L); } } //Xilinx Zone void XintfZone0_Timing(void) { // 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 = 3;//2; XintfRegs.XTIMING0.bit.XWRACTIVE = 5;//2;//1; // 1 XintfRegs.XTIMING0.bit.XWRTRAIL = 1;//0; // Zone read timing XintfRegs.XTIMING0.bit.XRDLEAD = 3; XintfRegs.XTIMING0.bit.XRDACTIVE = 5;//1 XintfRegs.XTIMING0.bit.XRDTRAIL = 1;//1 // do not double all Zone read/write lead/active/trail timing XintfRegs.XTIMING0.bit.X2TIMING = 0; // Zone will not sample READY XintfRegs.XTIMING0.bit.USEREADY = 0;//1; XintfRegs.XTIMING0.bit.READYMODE = 0;//1; // Size must be 1,1 - other values are reserved XintfRegs.XTIMING0.bit.XSIZE = 3; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. asm(" RPT #7 || NOP"); } void XintfZone6_And7_Timing(void) { // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = SYSCLKOUT/2 XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // Buffer up to 0 writes XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT is enabled XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK #ifdef XLOW_FREQUENCY_MODE XintfRegs.XINTCNF2.bit.CLKMODE = 1; #else XintfRegs.XINTCNF2.bit.CLKMODE = 0; #endif XintfRegs.XINTCNF2.bit.MPNMC = 0; // 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 = 3; XintfRegs.XTIMING6.bit.XWRACTIVE = 7; XintfRegs.XTIMING6.bit.XWRTRAIL = 3; // Zone read timing XintfRegs.XTIMING6.bit.XRDLEAD = 3; XintfRegs.XTIMING6.bit.XRDACTIVE = 7;//3; XintfRegs.XTIMING6.bit.XRDTRAIL = 3; // do not double all Zone read/write lead/active/trail timing XintfRegs.XTIMING6.bit.X2TIMING = 0; // Zone will not sample READY XintfRegs.XTIMING6.bit.USEREADY = 0;//1; XintfRegs.XTIMING6.bit.READYMODE = 0;//1; // Size must be 1,1 - 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 = 3; XintfRegs.XTIMING7.bit.XWRACTIVE = 7; XintfRegs.XTIMING7.bit.XWRTRAIL = 3; // Zone read timing XintfRegs.XTIMING7.bit.XRDLEAD = 3; XintfRegs.XTIMING7.bit.XRDACTIVE = 3; XintfRegs.XTIMING7.bit.XRDTRAIL = 3; // don't double all Zone read/write lead/active/trail timing XintfRegs.XTIMING7.bit.X2TIMING = 0; // Zone will not sample XREADY signal XintfRegs.XTIMING7.bit.USEREADY = 0; XintfRegs.XTIMING7.bit.READYMODE = 0; // Size must be 1,1 - other values are reserved XintfRegs.XTIMING7.bit.XSIZE = 3; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. asm(" RPT #7 || NOP"); } void XintfZone2_Timing(void) { // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = SYSCLKOUT/2 XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // Buffer up to 0 writes XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT is enabled XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK XintfRegs.XINTCNF2.bit.CLKMODE = 0; XintfRegs.XINTCNF2.bit.MPNMC = 0; // Zone 6------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing XintfRegs.XTIMING2.bit.XWRLEAD = 3;//2; XintfRegs.XTIMING2.bit.XWRACTIVE = 4;//2; XintfRegs.XTIMING2.bit.XWRTRAIL = 2;//2; // Zone read timing XintfRegs.XTIMING2.bit.XRDLEAD = 2; XintfRegs.XTIMING2.bit.XRDACTIVE = 3; //1; XintfRegs.XTIMING2.bit.XRDTRAIL = 1;//2;//0; // do not double all Zone read/write lead/active/trail timing XintfRegs.XTIMING2.bit.X2TIMING = 0; // Zone will not sample READY XintfRegs.XTIMING2.bit.USEREADY = 0;//1; XintfRegs.XTIMING2.bit.READYMODE = 0;//1; // Size must be 1,1 - other values are reserved XintfRegs.XTIMING2.bit.XSIZE = 3; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. asm(" RPT #7 || NOP"); } void FlashInit() { SetupOperLine(); SelectStrob67_ForFlash(); XintfZone6_And7_Timing(); SelectWorkWithFlash(); } void SetupOperLine() { EALLOW; GpioMuxRegs.GPAMUX.bit.C1TRIP_GPIOA13=0; GpioMuxRegs.GPAMUX.bit.C2TRIP_GPIOA14=0; GpioMuxRegs.GPAMUX.bit.C3TRIP_GPIOA15=0; GpioMuxRegs.GPBMUX.bit.C4TRIP_GPIOB13=0; GpioMuxRegs.GPBMUX.bit.C6TRIP_GPIOB15=0; GpioMuxRegs.GPADIR.bit.GPIOA13=1; GpioMuxRegs.GPADIR.bit.GPIOA14=1; GpioMuxRegs.GPADIR.bit.GPIOA15=1; GpioMuxRegs.GPBDIR.bit.GPIOB13=1; GpioMuxRegs.GPBDIR.bit.GPIOB15=1; GpioMuxRegs.GPAQUAL.all=0; GpioMuxRegs.GPBQUAL.all=0; EDIS; WriteOper(1,1,1,1); } void WriteOper(unsigned char oper_mode1,unsigned char oper_mode2, unsigned char oper_mode3, unsigned char oper_mode4) { EALLOW; GpioDataRegs.GPADAT.bit.GPIOA13=oper_mode1; GpioDataRegs.GPADAT.bit.GPIOA14=oper_mode2; GpioDataRegs.GPADAT.bit.GPIOA15=oper_mode3; GpioDataRegs.GPBDAT.bit.GPIOB13=oper_mode4; asm(" NOP"); GpioDataRegs.GPBDAT.bit.GPIOB15=0; asm(" NOP"); asm(" NOP"); asm(" NOP"); GpioDataRegs.GPBDAT.bit.GPIOB15=1; asm(" NOP"); asm(" NOP"); asm(" NOP"); GpioDataRegs.GPBDAT.bit.GPIOB15=0; asm(" NOP"); asm(" NOP"); asm(" NOP"); EDIS; }