📄 sl811.lst
字号:
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE SL811
OBJECT MODULE PLACED IN .\out\SL811.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SL811.C LARGE BROWSE DEBUG OBJECTEXTEND OBJECT(.\out\SL811.obj)
stmt level source
1 #define SL811_FILE
2 #include "include.h"
3
4 //extern XXGFLAGS bdata bXXGFlags;
5
6 //XXGPKG usbstack;
7 //unsigned char remainder;
8 //extern UART_CMD_BLOCK xdata UartCmdBlock;
9 //extern UART_RSP_BLOCK xdata UartRspBlock;
10 //unsigned char xdata DBUF[BUFFER_LENGTH];
11 //extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
12 //pUSBDEV idata uDev; // Multiple USB devices attributes, Max 5 devices
13
14 //code unsigned char cmd_test_createfile[]=
15 // {0x07,
16 // 0x54,0x45,0x53,0x54,0x20,0x20,0x20,0x20,
17 // 0x44,0x41,0x54,0x20,0x20,0x75,0xcd,0xb4,
18 // 0xe2,0x2e,0xe2,0x20,0x20,0xce,0xb4,0xe2,
19 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
20 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
21 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
22 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
23 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20
24 // };
25 //code unsigned char cmd_test_writefile[]=
26 // {
27 // 0x09,
28 // 0x00,
29 // 0x00,0x70,
30 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
31 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
32 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
33 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
34 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
35 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
36 // 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20
37 // };
38 //*****************************************************************************************
39 // SL811H variables initialization
40 //*****************************************************************************************
41 unsigned char SL811_GetRev(void)
42 {
43 1 //SL811Write(SL811_ADDR_PORT, 0x0e);
44 1 return SL811Read(0x0e);
45 1 }
46
47 void USBReset(void)
48 {
49 1 unsigned char temp;
50 1 #ifdef ZLH_DEBUG
51 1 disp_data(2,"B3");
52 1 // disp_data(1, &temp);
53 1 #endif
54 1 temp=SL811Read(CtrlReg);
55 1 #ifdef ZLH_DEBUG
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 2
56 1 disp_data(2,"B1");
57 1 disp_data(1, &temp);
58 1 #endif
59 1 SL811Write(CtrlReg,temp|0x08);
60 1 // DelayMs(25);
61 1 DelayMs(10);
62 1 SL811Write(CtrlReg,temp);
63 1 #ifdef ZLH_DEBUG
64 1 disp_data(2,"B2");
65 1 disp_data(1, &temp);
66 1 #endif
67 1
68 1 }
69
70 //*****************************************************************************************
71 // usbXfer:
72 // successful transfer = return TRUE
73 // fail transfer = return FALSE
74 //*****************************************************************************************
75 unsigned char usbXfer(void)
76 {
77 1
78 1 unsigned char xferLen, data0, data1,cmd;
79 1 unsigned char intr,result,remainder,dataX,bufLen,addr,timeout;
80 1
81 1 //------------------------------------------------
82 1 // Default setting for usb trasnfer
83 1 //------------------------------------------------
84 1 dataX=timeout=0;
85 1 //result = SL811Read(EP0Status);
86 1 data0 = EP0_Buf; // DATA0 buffer address
87 1 data1 = data0 + (unsigned char)usbstack.wPayload; // DATA1 buffer address
88 1 bXXGFlags.bits.DATA_STOP=FALSE;
89 1 bXXGFlags.bits.TIMEOUT_ERR=FALSE;
90 1 //------------------------------------------------
91 1 // Define data transfer payload
92 1 //------------------------------------------------
93 1 if (usbstack.wLen >= usbstack.wPayload) // select proper data payload
94 1 xferLen = usbstack.wPayload; // limit to wPayload size
95 1 else // else take < payload len
96 1 xferLen = usbstack.wLen; //
97 1
98 1 // For IN token
99 1 if (usbstack.pid==PID_IN) // for current IN tokens
100 1 { //
101 2 cmd = sDATA0_RD; // FS/FS on Hub, sync to sof
102 2 }
103 1 // For OUT token
104 1 else if(usbstack.pid==PID_OUT) // for OUT tokens
105 1 {
106 2 if(xferLen) // only when there are
107 2 {
108 3 //intr=usbstack.setup.wLength;
109 3 //usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
110 3 SL811BufWrite(data0,usbstack.buffer,xferLen); // data to transfer on USB
111 3 //usbstack.setup.wLength=intr;
112 3 }
113 2 cmd = sDATA0_WR;
114 2 // FS/FS on Hub, sync to sof
115 2 // implement data toggle
116 2 bXXGFlags.bits.bData1 = uDev.bData1[usbstack.endpoint];
117 2 uDev.bData1[usbstack.endpoint] = (uDev.bData1[usbstack.endpoint] ? 0 : 1); // DataToggle
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 3
118 2
119 2 if(bXXGFlags.bits.bData1)
120 2 cmd |= 0x40; // Set Data1 bit in command
121 2
122 2 }
123 1 // For SETUP/OUT token
124 1 else // for current SETUP/OUT tokens
125 1 {
126 2 if(xferLen) // only when there are
127 2 {
128 3 intr=usbstack.setup.wLength;
129 3 usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
130 3 usbstack.setup.wIndex=WordSwap(usbstack.setup.wIndex);
131 3 usbstack.setup.wLength=WordSwap(usbstack.setup.wLength);
132 3 SL811BufWrite(data0,(unsigned char *)&usbstack.setup,xferLen); // data to transfer on USB
133 3 usbstack.setup.wLength=intr;
134 3 }
135 2 cmd = sDATA0_WR; // FS/FS on Hub, sync to sof
136 2 }
137 1 //------------------------------------------------
138 1 // For EP0's IN/OUT token data, start with DATA1
139 1 // Control Endpoint0's status stage.
140 1 // For data endpoint, IN/OUT data, start ????
141 1 //------------------------------------------------
142 1 if (usbstack.endpoint == 0 && usbstack.pid != PID_SETUP) // for Ep0's IN/OUT token
143 1 cmd |= 0x40; // always set DATA1
144 1 //------------------------------------------------
145 1 // Arming of USB data transfer for the first pkt
146 1 //------------------------------------------------
147 1 SL811Write(EP0Status,((usbstack.endpoint&0x0F)|usbstack.pid)); // PID + EP address
148 1 SL811Write(EP0Counter,usbstack.usbaddr); // USB address
149 1 SL811Write(EP0Address,data0); // buffer address, start with "data0"
150 1 SL811Write(EP0XferLen,xferLen); // data transfer length
151 1 SL811Write(IntStatus,INT_CLEAR); // clear interrupt status
152 1 SL811Write(EP0Control,cmd); // Enable ARM and USB transfer start here
153 1
154 1 //------------------------------------------------
155 1 // Main loop for completing a wLen data trasnfer
156 1 //------------------------------------------------
157 1 while(TRUE)
158 1 {
159 2 //---------------Wait for done interrupt------------------
160 2 while(TRUE) // always ensure requested device is
161 2 { // inserted at all time, then you will
162 3 //intr=SL811Read(cSOFcnt);
163 3 //intr=SL811Read(IntEna);
164 3 intr = SL811Read(IntStatus);
165 3 // wait for interrupt to be done, and
166 3 if((intr & USB_RESET) || (intr & INSERT_REMOVE)) // proceed to parse result from slave
167 3 { // device.
168 4 bXXGFlags.bits.DATA_STOP = TRUE; // if device is removed, set DATA_STOP
169 4 return FALSE; // flag true, so that main loop will
170 4 } // know this condition and exit gracefully
171 3 if(intr & USB_A_DONE)
172 3 break; // interrupt done !!!
173 3 }
174 2
175 2 SL811Write(IntStatus,INT_CLEAR); // clear interrupt status
176 2 result = SL811Read(EP0Status); // read EP0status register
177 2 remainder = SL811Read(EP0Counter); // remainder value in last pkt xfer
178 2 //while
179 2 //-------------------------ACK----------------------------
C51 COMPILER V7.00 SL811 09/22/2005 17:57:50 PAGE 4
180 2 if (result & EP0_ACK) // Transmission ACK
181 2 {
182 3
183 3 // SETUP TOKEN
184 3 if(usbstack.pid == PID_SETUP) // do nothing for SETUP/OUT token
185 3 break; // exit while(1) immediately
186 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -