?? mainloop.lst
字號:
C51 COMPILER V7.06 MAINLOOP 04/14/2004 12:09:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Mainloop.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <string.h>
3
4 #include <reg51.h> /* special function register declarations */
5
6 #include "epphal.h"
7 #include "d12ci.h"
8 #include "mainloop.h"
9 #include "usb100.h"
10 #include "chap_9.h"
11 #include "protodma.h"
12 /*
13 //*************************************************************************
14 // USB protocol function pointer arrays
15 //*************************************************************************
16 */
17
18
19 //USB標準請求
20 code void (*StandardDeviceRequest[])(void) =
21 {
22 get_status,
23 clear_feature,
24 reserved,
25 set_feature,
26 reserved,
27 set_address,
28 get_descriptor,
29 reserved,
30 get_configuration,
31 set_configuration,
32 get_interface,
33 set_interface,
34 reserved,
35 reserved,
36 reserved,
37 reserved
38 };
39
40 //用戶廠商請求
41 code void (*VendorDeviceRequest[])(void) =
42 {
43 reserved,
44 reserved,
45 reserved,
46 reserved,
47 reserved,
48 reserved,
49 reserved,
50 reserved,
51 reserved,
52 reserved,
53 reserved,
54 reserved,
55 read_write_register,
C51 COMPILER V7.06 MAINLOOP 04/14/2004 12:09:05 PAGE 2
56 reserved,
57 reserved,
58 reserved
59 };
60
61 /*
62 //*************************************************************************
63 // Public static data
64 //*************************************************************************
65 */
66
67 extern EPPFLAGS bEPPflags;
68 extern unsigned long ClockTicks;
69 extern unsigned char idata GenEpBuf[];
70 extern IO_REQUEST idata ioRequest;
71
72 extern unsigned char ioSize, ioCount;
73 extern unsigned char idata EpBuf[];
74
75 CONTROL_XFER ControlData;
76 BOOL bNoRAM;
77
78 code char * _NAME_USB_REQUEST_DIRECTION[] =
79 {
80 "Host_to_device",
81 "Device_to_host"
82 };
83
84 code char * _NAME_USB_REQUEST_RECIPIENT[] =
85 {
86 "Device",
87 "Interface",
88 "Endpoint(0)",
89 "Other"
90 };
91
92 code char * _NAME_USB_REQUEST_TYPE[] =
93 {
94 "Standard",
95 "Class",
96 "Vendor",
97 "Reserved"
98 };
99
100 code char * _NAME_USB_STANDARD_REQUEST[] =
101 {
102 "GET_STATUS",
103 "CLEAR_FEATURE",
104 "RESERVED",
105 "SET_FEATURE",
106 "RESERVED",
107 "SET_ADDRESS",
108 "GET_DESCRIPTOR",
109 "SET_DESCRIPTOR",
110 "GET_CONFIGURATION",
111 "SET_CONFIGURATION",
112 "GET_INTERFACE",
113 "SET_INTERFACE",
114 "SYNC_FRAME"
115 };
116
117
C51 COMPILER V7.06 MAINLOOP 04/14/2004 12:09:05 PAGE 3
118 void help_devreq(unsigned char typ, unsigned char req)
119 {
120 1 typ >>= 5;
121 1
122 1 if(typ == USB_STANDARD_REQUEST) {
123 2 }
124 1 else {
125 2 if(bEPPflags.bits.verbose)
126 2 printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
127 2 req);
128 2 }
129 1 }
130
131 /* Configure Timer 0
132 - Mode = 1
133 - Interrupt = ENABLED
134 - Clock Source = INTERNAL
135 - Enable Gating Control = DISABLED
136 */
137 //定時器0初始化程序
138 //定時器用來定時檢測按鍵狀態
139 void init_timer0(void)
140 {
141 1 TMOD &= 0XF0; /* clear Timer 0 */
142 1 TMOD |= 0X1;
143 1 TL0 = 0X0; /* value set by user */
144 1 TH0 = 0X0; /* value set by user */
145 1 ET0 = 1; /* IE.1*/
146 1 TR0 = 1; /* TCON.4 start timer */
147 1 PT0 = 1;
148 1
149 1 EA = 1;
150 1 }
151
152 /* Interrupt Control Unit */
153 /* **** Enabled interrupts in Interrupt Enable Register ****
154 **** GLOBAL INTERRUPT MUST BE ENABLED FOR ANY OTHER
155 **** INTERRUPT TO WORK!
156 */
157 /* GLOBAL INTERRUPT DISABLED ALL INTERRUPTS
158 ARE DISABLED */
159 /* External interrupt 0 */
160 /* Priority Level = 0 */
161 /* Timer 0 interrupt */
162 /* Priority Level = 0 */
163 //中斷設置
164 void init_special_interrupts(void)
165 {
166 1 IT0 = 0;
167 1 EX0 = 1;
168 1 PX0 = 0;
169 1 }
170
171 //I/O口初始化程序
172 void init_port()
173 {
174 1 P0 = 0xFF;
175 1 P1 = 0xFF;
176 1 P2 = 0xFF;
177 1 P3 = 0xFF;
178 1 MCU_D12CS = 0x0;
179 1 D12SUSPD = 0;
C51 COMPILER V7.06 MAINLOOP 04/14/2004 12:09:05 PAGE 4
180 1 }
181
182 /*Serial Port */
183 /*Mode = 1 /8-bit UART
184 Serial Port Interrupt = Disabled */
185 /*Receive = Enabled */
186 /*Auto Addressing = Disabled */
187 //串行口設置
188 void init_serial(void)
189 {
190 1 SCON = 0X52;
191 1 PCON = 0X80 | PCON;
192 1 TMOD = 0X20;
193 1 TCON = 0x69; // TCON
194 1 TH1 = 0xF3;
195 1 }
196
197
198 void main(void)
199 {
200 1 unsigned char key, i;
201 1
202 1 init_port();//初始化I/O口
203 1 init_serial();//初始化串行口
204 1 //注:串行口是用來外擴LCD和鍵盤,用于查詢顯示當前的工作狀態
205 1 //在USB Smart Board標準配置中并未帶該LCD和鍵盤,這里給出的程序僅供參考
206 1
207 1 init_timer0();//初始化定時器0
208 1 init_special_interrupts();//設置中斷
209 1
210 1 MCU_D12CS = 0x1;
211 1
212 1 MCU_D12CS = 0x0;
213 1
214 1 D12_ReadChipID();
215 1
216 1 if(MCU_SWM0 == 0 && MCU_SWM1 == 0) {
217 2 MCU_D12RST = 0;//DMA設置
218 2 MCU_D12RST = 1;
219 2 D12_SetDMA(0x0);
220 2 }
221 1
222 1 bEPPflags.value = 0;
223 1 reconnect_USB();//重新連接USB
224 1 /*
225 1 if((i = D12_GetDMA()) == 0xC3) {
226 1 D12_SendResume();//發送恢復處理
227 1 }
228 1 else {
229 1 bEPPflags.value = 0;
230 1 reconnect_USB();//重新連接USB
231 1 }
232 1 */
233 1 /* Main program loop */
234 1
235 1 while( TRUE ){
236 2
237 2 if (bEPPflags.bits.timer){
238 3 DISABLE;//定時器溢出,檢測按鍵狀態
239 3 bEPPflags.bits.timer = 0;
240 3 ENABLE;
241 3
C51 COMPILER V7.06 MAINLOOP 04/14/2004 12:09:05 PAGE 5
242 3 if(bEPPflags.bits.configuration)//設備未配置返回
243 3 check_key_LED();
244 3 }
245 2
246 2 if(RI) {
247 3 key = _getkey();//按鍵輸入
248 3 switch(key) {//顯示查詢狀態
249 4 case 'i':
250 4 if(bEPPflags.bits.control_state == USB_IDLE)
251 4 printf("Control state = USB_IDLE.");
252 4 else if(bEPPflags.bits.control_state == USB_RECEIVE)
253 4 printf("Control state = USB_RECEIVE.");
254 4 else if(bEPPflags.bits.control_state == USB_TRANSMIT)
255 4 printf("Control state = USB_TRANSMIT.");
256 4 printf(" ControlData.wCount = %x.\n", ControlData.wCount);
257 4 printf("Endpoint 4 (Bulk Out) Status = %bx, Endpoint 5 (Bulk In) Status = %bx.\n",
258 4 D12_ReadEndpointStatus(4), D12_ReadEndpointStatus(5));
259 4 if(bEPPflags.bits.dma_state == DMA_IDLE)
260 4 printf("DMA_State = DMA_IDLE.\n");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -