VC5509的通用GEL代码
GEL是通用扩展语言(General Extension Language)的英文缩写,GEL是一个大小写敏感但缺少类型检测的解释性语言,只有int类型,在语法上可看作是C语言的一个子集。GEL主要用来扩展CCS的功能,方便用户调试程序,但不是必需的。当我们希望上电后立刻开启或实现某些功能,那么可以在项目中装载GEL文件(由TI提供或用户自行编写)来实现这个目的。此外,项目添加TI公司提供的GEL文件后往往会在CCS的GEL菜单中出现相关的子菜单,用户可以使用它,主要用于程序的调试控制。GEL文件可以看成你所建项目的“秘书”,可以帮你打打杂,处理一些繁琐的事情。
下面是一段VC5509的通用GEL文件代码:
1 StartUp()
2 {
3 GEL_MapOn();
4 GEL_MapReset();
5 GEL_MapAdd(0x0000C0,0,0x00FF40,1,1);
6 GEL_MapAdd(0x010000,0,0x030000,1,1);
7 GEL_MapAdd(0x040000,0,0x3C0000,1,1);
8 GEL_MapAdd(0x400000,0,0x400000,1,1);
9 GEL_MapAdd(0x800000,0,0x400000,1,1);
10
11 GEL_MapAdd(0xC00000,0,0x400000,1,1);
12
13 GEL_MapAdd(0xFF0000,0,0x010000,1,0);
14
15 GEL_MapAdd(0x000000,1,0x000050,1,1);
16 GEL_MapAdd(0x000060,1,0x007FA0,1,1);
17 GEL_MapAdd(0x008000,1,0x018000,1,1);
18 GEL_MapAdd(0x020000,1,0x1E0000,1,1);
19 GEL_MapAdd(0x200000,1,0x200000,1,1);
20 GEL_MapAdd(0x400000,1,0x200000,1,1);
21
22 GEL_MapAdd(0x600000,1,0x200000,1,1);
23
24
25 GEL_MapAdd(0x0001,2,0x0002,1,1);
26 GEL_MapAdd(0x0400,2,0x0300,1,1);
27 GEL_MapAdd(0x07FE,2,0x0002,1,1);
28 GEL_MapAdd(0x0800,2,0x0014,1,1);
29 GEL_MapAdd(0x0C00,2,0x000C,1,1);
30 GEL_MapAdd(0x0C20,2,0x000C,1,1);
31 GEL_MapAdd(0x0C40,2,0x000C,1,1);
32 GEL_MapAdd(0x0C60,2,0x000C,1,1);
33 GEL_MapAdd(0x0C80,2,0x000C,1,1);
34 GEL_MapAdd(0x0CA0,2,0x000C,1,1);
35 GEL_MapAdd(0x0E00,2,0x0001,1,1);
36 GEL_MapAdd(0x0E03,2,0x0001,1,1);
37 GEL_MapAdd(0x1000,2,0x0004,1,1);
38 GEL_MapAdd(0x1800,2,0x000D,1,1);
39 GEL_MapAdd(0x1C00,2,0x0001,1,1);
40 GEL_MapAdd(0x1E00,2,0x0001,1,1);
41 GEL_MapAdd(0x2400,2,0x0004,1,1);
42 GEL_MapAdd(0x2800,2,0x001F,1,1);
43 GEL_MapAdd(0x2C00,2,0x001F,1,1);
44 GEL_MapAdd(0x3000,2,0x001F,1,1);
45 GEL_MapAdd(0x3400,2,0x0002,1,1);
46 GEL_MapAdd(0x3800,2,0x0005,1,1);
47 GEL_MapAdd(0x3C00,2,0x000D,1,1);
48 GEL_MapAdd(0x4000,2,0x0004,1,1);
49 GEL_MapAdd(0x4400,2,0x0006,1,1);
50 GEL_MapAdd(0x4800,2,0x001B,1,1);
51 GEL_MapAdd(0x4C00,2,0x001B,1,1);
52 GEL_MapAdd(0x5800,2,0x1000,1,1);
53 GEL_MapAdd(0x6800,2,0x0004,1,1);
54 GEL_MapAdd(0x6C00,2,0x0001,1,1);
55 GEL_MapAdd(0x7000,2,0x0002,1,1);
56 GEL_MapAdd(0x7400,2,0x0001,1,1);
57 GEL_TextOut("Gel StartUp Complete.\n");
58 }
59 OnTargetConnect()
60 {
61 C5509_Init();
62 }
63 menuitem "C5509_Configuration";
64 hotmenu CPU_Reset()
65 {
66 GEL_Reset();
67 GEL_TextOut("CPU Reset Complete.\n");
68 }
69
70 hotmenu C5509_Init()
71 {
72 GEL_Reset();
73 TMCR_Reset();
74 GEL_TextOut("C5509 Memory Map Initialization Complete.\n");
75 }
76
77 hotmenu C5509_USB_Enable()
78 {
79 GEL_MemoryFill(0x7000,2,1,0x0004);
80 GEL_TextOut("C5509 USB Module enabled.\n");
81 }
82 menuitem "C5509 EBSR Config";
83 hotmenu Data_EMIF_En()
84 {
85 GEL_MemoryFill(0x6C00,2,1,0x0200);
86 GEL_TextOut("C5509 Ext. Bus set to Data EMIF.\n");
87 }
88 hotmenu Full_EMIF_En()
89 {
90 GEL_MemoryFill(0x6C00,2,1,0x0201);
91 GEL_TextOut("C5509 Ext. Bus set to Full EMIF.\n");
92 }
93 hotmenu NonMuxed_EHPI_En()
94 {
95 GEL_MemoryFill(0x6C00,2,1,0x0202);
96 GEL_TextOut("C5509 Ext. Bus set to Non Muxed EHPI.\n");
97 }
98 hotmenu MuxEHPI_En()
99 {
100 GEL_MemoryFill(0x6C00,2,1,0x0203);
101 GEL_TextOut("C5509 Ext. Bus set to Muxed EHPI.\n");
102 }
103 menuitem "C5509 EMIF CE0 Config";
104 hotmenu CE0_Async16_En()
105 {
106 GEL_MemoryFill(0x0803,2,1,0x1FFF);
107 GEL_TextOut("C5509 CE0 set to 16-bit Async mode.\n");
108 }
109 menuitem "C5509 EMIF CE1 Config";
110 hotmenu CE1_Async16_En()
111 {
112 GEL_MemoryFill(0x0806,2,1,0x1FFF);
113 GEL_TextOut("C5509 CE1 set to 16-bit Async mode.\n");
114 }
115 menuitem "C5509 EMIF CE2 Config";
116 hotmenu CE2_Async16_En()
117 {
118 GEL_MemoryFill(0x0809,2,1,0x1FFF);
119 GEL_TextOut("C5509 CE2 set to 16-bit Async mode.\n");
120 }
121 menuitem "C5509 EMIF CE3 Config";
122 hotmenu CE3_Async16_En()
123 {
124 GEL_MemoryFill(0x080C,2,1,0x1FFF);
125 GEL_TextOut("C5509 CE3 set to 16-bit Async mode.\n");
126 }
127
128 TMCR_Reset()
129 {
130 #define TMCR_MGS3 0x07FE
131 #define TMCR_MM 0x07FF
132 *(short *)TMCR_MGS3@IO = 0x0510;
133 *(short *)TMCR_MM@IO = 0x0000;
134 }
可以看到:GEL文件主要用来对VC5509的程序空间、数据空间、I/O空间等进行初始化,同时配置CCS开发环境,建立子菜单供用户在调试程序时选择使用。CCS启动时,Startup()函数被执行。支持Connect/Disconnect的CCS启动时,Startup()函数中不包括访问目标处理器的代码,目标处理器由回调函数OnTargetConnect()来初始化。
注意:GEL文件在CCS启动后常驻内存,在仿真器和目标系统上电的时候起到初始DSP的作用。在上电后再改变GEL文件将不会对DSP产生影响。