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.
例程使用的GEL文件为0250.evm5515.gel
我将GEL文件的功能用C文件实现,如下
/********************************************************************/ /* evm5515.gel */ /* Version 0.02 */ /* */ /* This GEL file is to be used with the 5515 EVM. */ /* Changes may be required to support specific hardware designs. */ /* */ /* Code Composer Studio supports six reserved GEL functions that */ /* automatically get executed if they are defined. They are: */ /* */ /* StartUp() - Executed whenever CCS is invoked */ /* OnReset() - Executed after Debug->Reset CPU */ /* OnRestart() - Executed after Debug->Restart */ /* OnPreFileLoaded() - Executed before File->Load Program */ /* OnFileLoaded() - Executed after File->Load Program */ /* OnTargetConnect() - Executed after Debug->Connect */ /* */ /* Version History */ /* v0.01 Initial Release */ /* v0.02 Corrected PLL settings */ /********************************************************************/ //StartUp() //{ // c5515_MapInit(); //} /*--------------------------------------------------------------*/ /* OnTargetConnect() -- this function is called after a target */ /* connect. */ /*--------------------------------------------------------------*/ void OnTargetConnect() { // GEL_Reset(); Peripheral_Reset(); ProgramPLL_100MHz(); SDRAM_INIT(); // GEL_TextOut("Target Connection Complete.\n"); } /*--------------------------------------------------------------*/ /* OnPreFileLoaded() */ /* This function is called automatically when the 'Load Program'*/ /* Menu item is selected. */ /*--------------------------------------------------------------*/ //OnPreFileLoaded() //{ // /* Reset the CPU to clean up state */ // //GEL_Reset(); //} /*--------------------------------------------------------------*/ /* OnRestart() */ /* This function is executed before a file is restarted. Disable*/ /* interrupts and DMA from the current program so pending */ /* events and transfers don't interfere with the new program. */ /*--------------------------------------------------------------*/ void OnRestart() { /* Disable interrupts */ *(volatile ioport Uint16 *)0x0003 = *(volatile ioport Uint16 *)0x0003 | 0x0800; //*(int*)0x0003 = *(int*)0x0003 | 0x0800; // Set INTM *(volatile ioport Uint16 *)0x0000 = 0; //*(int*)0x0000 = 0; // Clear IER0 *(volatile ioport Uint16 *)0x0045 = 0; //*(int*)0x0000 = 0; // Clear IER1 } /*--------------------------------------------------------------*/ /* OnReset() */ /* This function is called by CCS when you do Debug->Resest. */ /* The goal is to put the C55xx into a known good state with */ /* respect to cache, dma and interrupts. */ /*--------------------------------------------------------------*/ //OnReset( int nErrorCode ) //{ //} /*--------------------------------------------------------------*/ /* OnFileLoaded() */ /* This function is called by CCS when you do File->Load Program*/ /* The goal is to do in post file loaded configuration that may */ /* be needed. */ /*--------------------------------------------------------------*/ //OnFileLoaded() //{ //} #define ESCR 0x1c33 #define SDTIMR1 0x1020 #define SDTIMR2 0x1021 #define SDCR1 0x1008 #define SDCR2 0x1009 #define SDSRETR 0x103C #define SDRCR 0x100C #define PRCR 0x1C05 #define PCGCR1 0x1c02 #define PCGCR2 0x1c03 #define PSRCR 0x1c04 #define CLKCFGL 0x1c1e #define CCR2 0x1c1f #define CGCR1 0x1c20 #define CGCR2 0x1c21 #define CGCR3 0x1c22 #define CGCR4 0x1c23 #define CCSSR 0x1c24 #define IVPD 0x0049 // *************************************************************************** ///* Memory map based on MP/MC value (assume MP/MC = 0). */ //c5515_MapInit() { // GEL_MapOn(); // GEL_MapReset(); // // /*Program Space*/ // // /* DARAM */ // GEL_MapAdd(0x0000C0,0,0x001F40,1,1); /* DARAM0 */ // GEL_MapAdd(0x002000,0,0x002000,1,1); /* DARAM1 */ // GEL_MapAdd(0x004000,0,0x002000,1,1); /* DARAM2 */ // GEL_MapAdd(0x006000,0,0x002000,1,1); /* DARAM3 */ // GEL_MapAdd(0x008000,0,0x002000,1,1); /* DARAM4 */ // GEL_MapAdd(0x00A000,0,0x002000,1,1); /* DARAM5 */ // GEL_MapAdd(0x00C000,0,0x002000,1,1); /* DARAM6 */ // GEL_MapAdd(0x00E000,0,0x002000,1,1); /* DARAM7 */ // // /* SARAM */ // GEL_MapAdd(0x010000,0,0x002000,1,1); /* SARAM0 */ // GEL_MapAdd(0x012000,0,0x002000,1,1); /* SARAM1 */ // GEL_MapAdd(0x014000,0,0x002000,1,1); /* SARAM2 */ // GEL_MapAdd(0x016000,0,0x002000,1,1); /* SARAM3 */ // GEL_MapAdd(0x018000,0,0x002000,1,1); /* SARAM4 */ // GEL_MapAdd(0x01A000,0,0x002000,1,1); /* SARAM5 */ // GEL_MapAdd(0x01C000,0,0x002000,1,1); /* SARAM6 */ // GEL_MapAdd(0x01E000,0,0x002000,1,1); /* SARAM7 */ // GEL_MapAdd(0x020000,0,0x002000,1,1); /* SARAM8 */ // GEL_MapAdd(0x022000,0,0x002000,1,1); /* SARAM9 */ // GEL_MapAdd(0x024000,0,0x002000,1,1); /* SARAM10 */ // GEL_MapAdd(0x026000,0,0x002000,1,1); /* SARAM11 */ // GEL_MapAdd(0x028000,0,0x002000,1,1); /* SARAM12 */ // GEL_MapAdd(0x02A000,0,0x002000,1,1); /* SARAM13 */ // GEL_MapAdd(0x02C000,0,0x002000,1,1); /* SARAM14 */ // GEL_MapAdd(0x02E000,0,0x002000,1,1); /* SARAM15 */ // GEL_MapAdd(0x030000,0,0x002000,1,1); /* SARAM16 */ // GEL_MapAdd(0x032000,0,0x002000,1,1); /* SARAM17 */ // GEL_MapAdd(0x034000,0,0x002000,1,1); /* SARAM18 */ // GEL_MapAdd(0x036000,0,0x002000,1,1); /* SARAM19 */ // GEL_MapAdd(0x038000,0,0x002000,1,1); /* SARAM20 */ // GEL_MapAdd(0x03A000,0,0x002000,1,1); /* SARAM21 */ // GEL_MapAdd(0x03C000,0,0x002000,1,1); /* SARAM22 */ // GEL_MapAdd(0x03E000,0,0x002000,1,1); /* SARAM23 */ // GEL_MapAdd(0x040000,0,0x002000,1,1); /* SARAM24 */ // GEL_MapAdd(0x042000,0,0x002000,1,1); /* SARAM25 */ // GEL_MapAdd(0x044000,0,0x002000,1,1); /* SARAM26 */ // GEL_MapAdd(0x046000,0,0x002000,1,1); /* SARAM27 */ // GEL_MapAdd(0x048000,0,0x002000,1,1); /* SARAM28 */ // GEL_MapAdd(0x04A000,0,0x002000,1,1); /* SARAM29 */ // GEL_MapAdd(0x04C000,0,0x002000,1,1); /* SARAM30 */ // GEL_MapAdd(0x04E000,0,0x002000,1,1); /* SARAM31 */ // // /* External-Memory */ // GEL_MapAdd(0x050000,0,0x7B0000,1,1); /* External-SDRAM */ // GEL_MapAdd(0x800000,0,0x400000,1,1); /* External-Async */ // GEL_MapAdd(0xC00000,0,0x200000,1,1); /* External-Async */ // GEL_MapAdd(0xE00000,0,0x100000,1,1); /* External-Async */ // GEL_MapAdd(0xF00000,0,0x0E0000,1,1); /* External-Async */ // // /* ROM */ // GEL_MapAdd(0xFE0000,0,0x008000,1,0); /* SAROM0 */ // GEL_MapAdd(0xFE8000,0,0x008000,1,0); /* SAROM1 */ // GEL_MapAdd(0xFF0000,0,0x008000,1,0); /* SAROM2 */ // GEL_MapAdd(0xFF8000,0,0x008000,1,0); /* SAROM3 */ // // /* Data Space */ // // /* DARAM */ // GEL_MapAdd(0x000000,1,0x000060,1,1); /* MMRs */ // GEL_MapAdd(0x000060,1,0x000FA0,1,1); /* DARAM0 */ // GEL_MapAdd(0x001000,1,0x001000,1,1); /* DARAM1 */ // GEL_MapAdd(0x002000,1,0x001000,1,1); /* DARAM2 */ // GEL_MapAdd(0x003000,1,0x001000,1,1); /* DARAM3 */ // GEL_MapAdd(0x004000,1,0x001000,1,1); /* DARAM4 */ // GEL_MapAdd(0x005000,1,0x001000,1,1); /* DARAM5 */ // GEL_MapAdd(0x006000,1,0x001000,1,1); /* DARAM6 */ // GEL_MapAdd(0x007000,1,0x001000,1,1); /* DARAM7 */ // // /* SARAM */ // GEL_MapAdd(0x008000,1,0x001000,1,1); /* SARAM0 */ // GEL_MapAdd(0x009000,1,0x001000,1,1); /* SARAM1 */ // GEL_MapAdd(0x00A000,1,0x001000,1,1); /* SARAM2 */ // GEL_MapAdd(0x00B000,1,0x001000,1,1); /* SARAM3 */ // GEL_MapAdd(0x00C000,1,0x001000,1,1); /* SARAM4 */ // GEL_MapAdd(0x00D000,1,0x001000,1,1); /* SARAM5 */ // GEL_MapAdd(0x00E000,1,0x001000,1,1); /* SARAM6 */ // GEL_MapAdd(0x00F000,1,0x001000,1,1); /* SARAM7 */ // GEL_MapAdd(0x010000,1,0x001000,1,1); /* SARAM8 */ // GEL_MapAdd(0x011000,1,0x001000,1,1); /* SARAM9 */ // GEL_MapAdd(0x012000,1,0x001000,1,1); /* SARAM10 */ // GEL_MapAdd(0x013000,1,0x001000,1,1); /* SARAM11 */ // GEL_MapAdd(0x014000,1,0x001000,1,1); /* SARAM12 */ // GEL_MapAdd(0x015000,1,0x001000,1,1); /* SARAM13 */ // GEL_MapAdd(0x016000,1,0x001000,1,1); /* SARAM14 */ // GEL_MapAdd(0x017000,1,0x001000,1,1); /* SARAM15 */ // GEL_MapAdd(0x018000,1,0x001000,1,1); /* SARAM16 */ // GEL_MapAdd(0x019000,1,0x001000,1,1); /* SARAM17 */ // GEL_MapAdd(0x01A000,1,0x001000,1,1); /* SARAM18 */ // GEL_MapAdd(0x01B000,1,0x001000,1,1); /* SARAM19 */ // GEL_MapAdd(0x01C000,1,0x001000,1,1); /* SARAM20 */ // GEL_MapAdd(0x01D000,1,0x001000,1,1); /* SARAM21 */ // GEL_MapAdd(0x01E000,1,0x001000,1,1); /* SARAM22 */ // GEL_MapAdd(0x01F000,1,0x001000,1,1); /* SARAM23 */ // GEL_MapAdd(0x020000,1,0x001000,1,1); /* SARAM24 */ // GEL_MapAdd(0x021000,1,0x001000,1,1); /* SARAM25 */ // GEL_MapAdd(0x022000,1,0x001000,1,1); /* SARAM26 */ // GEL_MapAdd(0x023000,1,0x001000,1,1); /* SARAM27 */ // GEL_MapAdd(0x024000,1,0x001000,1,1); /* SARAM28 */ // GEL_MapAdd(0x025000,1,0x001000,1,1); /* SARAM29 */ // GEL_MapAdd(0x026000,1,0x001000,1,1); /* SARAM30 */ // GEL_MapAdd(0x027000,1,0x001000,1,1); /* SARAM31 */ // // /* External-Memory */ // GEL_MapAdd(0x028000,1,0x3D8000,1,1); /* External-SDRAM */ // GEL_MapAdd(0x400000,1,0x200000,1,1); /* External-Async */ // GEL_MapAdd(0x600000,1,0x100000,1,1); /* External-Async */ // GEL_MapAdd(0x700000,1,0x080000,1,1); /* External-Async */ // GEL_MapAdd(0x780000,1,0x070000,1,1); /* External-Async */ // // /* ROM */ // GEL_MapAdd(0x7F0000,1,0x004000,1,0); /* SAROM0 */ // GEL_MapAdd(0x7F4000,1,0x004000,1,0); /* SAROM1 */ // GEL_MapAdd(0x7F8000,1,0x004000,1,0); /* SAROM2 */ // GEL_MapAdd(0x7FC000,1,0x004000,1,0); /* SAROM3 */ // // /* IO Space */ // GEL_MapAdd(0x0000,2,0xFFFF,1,1); /* XPORT */ //} void Peripheral_Reset() { int i; *(volatile ioport Uint16 *)PSRCR = 0x0020;//*(short *)PSRCR@IO = 0x0020; *(volatile ioport Uint16 *)PRCR = 0x00BB;//*(short *)PRCR@IO = 0x00BB; for(i=0;i<0xff;i++); *(volatile ioport Uint16 *)IVPD = 0x027F;//*(short *)IVPD@data = 0x027F; // Load interrupt vector pointer //GEL_TextOut("Reset Peripherals is complete.\n"); } void ProgramPLL_100MHz() { int i; //GEL_TextOut("Configuring PLL (100.00 MHz).\n"); /* Enable clocks to all peripherals */ *(volatile ioport Uint16 *)PCGCR1 = 0x0;//*(short *)PCGCR1@IO = 0x0; *(volatile ioport Uint16 *)PCGCR2 = 0x0;//*(short *)PCGCR2@IO = 0x0; /* Bypass PLL */ *(volatile ioport Uint16 *)CCR2 = 0x0;//*(short *)CCR2@IO = 0x0; /* Set CLR_CNTL = 0 */ *(volatile ioport Uint16 *)CGCR1 = *(volatile ioport Uint16 *)CGCR1 & 0x7FFF;//*(short *)CGCR1@IO = *(short *)CGCR1@IO & 0x7FFF; *(volatile ioport Uint16 *)CGCR1 = 0x8BE8;//*(short *)CGCR1@IO = 0x8BE8; *(volatile ioport Uint16 *)CGCR2 = 0x8000;//*(short *)CGCR2@IO = 0x8000; *(volatile ioport Uint16 *)CGCR3 = 0x0806;//*(short *)CGCR3@IO = 0x0806; *(volatile ioport Uint16 *)CGCR4 = 0x0000;//*(short *)CGCR4@IO = 0x0000; /* Wait for PLL lock */ for(i=0;i<0x7fff;i++); /* Switch to PLL clk */ *(volatile ioport Uint16 *)CCR2 = 0x1;//*(short *)CCR2@IO = 0x1; // GEL_TextOut("PLL Init Done.\n"); } /* mSDRAM = MT48H4M16LF-8 */ /* Timings based on EMIF clk = 100MHz */ void SDRAM_INIT() { int i; /* reset EMIF */ *(volatile ioport Uint16 *)PRCR = 0x0002;//*(short *)PRCR@IO = 0x0002; for(i=0;i<0xff;i++); //enable SDRAM clock *(volatile ioport Uint16 *)CLKCFGL = 0x0001;//*(short*)CLKCFGL@IO=0x0001; /* enable word writes to EMIF regs */ *(volatile ioport Uint16 *)ESCR = 0;//*(short *)ESCR@IO = 0; /* step 1 */ *(volatile ioport Uint16 *)SDTIMR1 = 0x4710;//*(short *)SDTIMR1@IO = 0x4710; *(volatile ioport Uint16 *)SDTIMR2 = 0x3911;//*(short *)SDTIMR2@IO = 0x3911; *(volatile ioport Uint16 *)SDSRETR = 0x0007;//*(short *)SDSRETR@IO = 0x0007; /* step 2 */ *(volatile ioport Uint16 *)SDRCR = 0x04E3;//*(short *)SDRCR@IO = 0x04E3; /* step 3 */ *(volatile ioport Uint16 *)SDCR1 = 0x4720;//*(short *)SDCR1@IO = 0x4720; *(volatile ioport Uint16 *)SDCR2 = 0x0001;//*(short *)SDCR2@IO = 0x0001; /* step 4 */ for(i=0;i<0xff;i++); /* step 5 */ *(volatile ioport Uint16 *)SDRCR = 0x061A;//*(short *)SDRCR@IO = 0x061A; //GEL_TextOut("SDRAM Initialization Complete.\n"); }
并在main函数的开头调用
OnRestart();
OnTargetConnect();
调试结果正常,能够实现USB MSC功能,通过PC读写开发板上的文件。
生成bin文件下载到开发板上,运行不正常,PC无法识别USB设备。
你好!
你发的这个链接上的操作有点复杂,我不确定自己都做对了没有。
CCS Crashing when Connecting这个步骤不知道怎么弄。
能不能简单一点,因为开发板是EVM5515,例程也是TI官方的,能不能帮我验证这个例程,怎么才能获得能正确实现USB MSC功能的.bin文件。
我用前面描述的方法,在HID例程上能够正常实现USB鼠标的功能。
另外,我清空GEL文件的内容,即GEL文件实际上没有作任何操作,然后在C中实现GEL中的函数。
在调试模式下,能够正常实现USB MSC功能,生成bin文件下载后还是不正常。
我们产品的主要功能已经实现了,现在还差通过PC的USB接口读取TF卡的功能。
我已经尝试了很多次,都没有成功。不知道问题在哪里。
所以恳请帮帮忙,谢谢!
你好!
例程中,main()函数调用了CSL_mscTest()函数,该函数的前两行就是使能所有外设时钟
CSL_Status CSL_mscTest(void) { CSL_Status status; volatile Uint32 looper; *(ioport volatile int *)0x1c02 = 0x0; *(ioport volatile int *)0x1c03 = 0x0; ...... ...... }
在GEL文件中,ProgramPLL_100MHz()也对这两个寄存器进行了操作,我在evm5515.c中也实现了相同的操作。