📄 d12ic.lst
字号:
1 .file "d12ic.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
109 .global D12_SetAddressEnable
111 D12_SetAddressEnable:
1:d12ic.c **** //*************************************
2:d12ic.c **** //PDIUSB12命令接口 d12ci.c
3:d12ic.c **** //编译环境WINAVRGCC
4:d12ic.c **** //2007-01-9
5:d12ic.c **** //Hjxiang
6:d12ic.c **** //*************************************
7:d12ic.c **** //标准C头文件
8:d12ic.c **** #include <stdint.h>
9:d12ic.c **** #include <stdlib.h>
10:d12ic.c **** //AVR头文件
11:d12ic.c **** #include <avr/io.h>
12:d12ic.c **** #include <avr/signal.h>
13:d12ic.c **** #include <avr/delay.h>
14:d12ic.c **** //自定义头文件
15:d12ic.c **** #include "usb.h"
16:d12ic.c **** #include "d12ic.h"
17:d12ic.c ****
18:d12ic.c **** //宏定义
19:d12ic.c **** #define D12_DATA 0x02 //选择数据指令(A0=0)
20:d12ic.c **** #define D12_COMMAND 0x03 //选择命令指令(A0=1)
21:d12ic.c **** #define D12_FULLEMPTY 0x01 //端点缓冲区满
22:d12ic.c ****
23:d12ic.c ****
24:d12ic.c ****
25:d12ic.c **** //设置地址使能命令
26:d12ic.c **** void D12_SetAddressEnable(unsigned char bAddress,unsigned char bEnable)
27:d12ic.c **** {
113 .LM1:
114 /* prologue: frame size=0 */
115 0000 1F93 push r17
116 0002 CF93 push r28
117 /* prologue end (size=2) */
118 0004 C82F mov r28,r24
119 0006 162F mov r17,r22
28:d12ic.c **** outportb(D12_COMMAND,0xD0);
121 .LM2:
122 0008 60ED ldi r22,lo8(208)
123 000a 70E0 ldi r23,hi8(208)
124 000c 83E0 ldi r24,lo8(3)
125 000e 90E0 ldi r25,hi8(3)
126 0010 0E94 0000 call outportb
29:d12ic.c **** if(bEnable)
128 .LM3:
129 0014 1111 cpse r17,__zero_reg__
30:d12ic.c **** bAddress|=0x80;
131 .LM4:
132 0016 C068 ori r28,lo8(-128)
133 .L2:
31:d12ic.c **** outportb(D12_DATA,bAddress);
135 .LM5:
136 0018 8C2F mov r24,r28
137 001a 9927 clr r25
138 001c BC01 movw r22,r24
139 001e 82E0 ldi r24,lo8(2)
140 0020 90E0 ldi r25,hi8(2)
141 0022 0E94 0000 call outportb
142 /* epilogue: frame size=0 */
143 0026 CF91 pop r28
144 0028 1F91 pop r17
145 002a 0895 ret
146 /* epilogue end (size=3) */
147 /* function D12_SetAddressEnable size 23 (18) */
149 .Lscope0:
152 .global D12_SetEndpointEnable
154 D12_SetEndpointEnable:
32:d12ic.c **** }
33:d12ic.c **** //设置端点使能命令
34:d12ic.c **** void D12_SetEndpointEnable(unsigned char bEnable)
35:d12ic.c **** {
156 .LM6:
157 /* prologue: frame size=0 */
158 002c 1F93 push r17
159 /* prologue end (size=1) */
36:d12ic.c **** outportb(D12_COMMAND,0xD8);
161 .LM7:
162 002e 68ED ldi r22,lo8(216)
163 0030 70E0 ldi r23,hi8(216)
164 0032 83E0 ldi r24,lo8(3)
165 0034 90E0 ldi r25,hi8(3)
166 0036 0E94 0000 call outportb
37:d12ic.c **** if(bEnable)
38:d12ic.c **** outportb(D12_DATA,1);
39:d12ic.c **** else
40:d12ic.c **** outportb(D12_DATA,1);
168 .LM8:
169 003a 61E0 ldi r22,lo8(1)
170 003c 70E0 ldi r23,hi8(1)
171 003e 82E0 ldi r24,lo8(2)
172 0040 90E0 ldi r25,hi8(2)
173 0042 0E94 0000 call outportb
174 /* epilogue: frame size=0 */
175 0046 1F91 pop r17
176 0048 0895 ret
177 /* epilogue end (size=2) */
178 /* function D12_SetEndpointEnable size 15 (12) */
180 .Lscope1:
184 .global D12_SetMode
186 D12_SetMode:
41:d12ic.c **** }
42:d12ic.c **** //设置模式命令
43:d12ic.c **** void D12_SetMode(unsigned char bConfig,unsigned char bClkDiv)
44:d12ic.c **** {
188 .LM9:
189 /* prologue: frame size=0 */
190 004a 0F93 push r16
191 004c 1F93 push r17
192 /* prologue end (size=2) */
193 004e 182F mov r17,r24
194 0050 062F mov r16,r22
45:d12ic.c **** outportb(D12_COMMAND,0xF3);
196 .LM10:
197 0052 63EF ldi r22,lo8(243)
198 0054 70E0 ldi r23,hi8(243)
199 0056 83E0 ldi r24,lo8(3)
200 0058 90E0 ldi r25,hi8(3)
201 005a 0E94 0000 call outportb
46:d12ic.c **** outportb(D12_DATA,bConfig);
203 .LM11:
204 005e 812F mov r24,r17
205 0060 9927 clr r25
206 0062 BC01 movw r22,r24
207 0064 82E0 ldi r24,lo8(2)
208 0066 90E0 ldi r25,hi8(2)
209 0068 0E94 0000 call outportb
47:d12ic.c **** outportb(D12_DATA,bClkDiv);
211 .LM12:
212 006c 802F mov r24,r16
213 006e 9927 clr r25
214 0070 BC01 movw r22,r24
215 0072 82E0 ldi r24,lo8(2)
216 0074 90E0 ldi r25,hi8(2)
217 0076 0E94 0000 call outportb
218 /* epilogue: frame size=0 */
219 007a 1F91 pop r17
220 007c 0F91 pop r16
221 007e 0895 ret
222 /* epilogue end (size=3) */
223 /* function D12_SetMode size 27 (22) */
225 .Lscope2:
228 .global D12_SetDMA
230 D12_SetDMA:
48:d12ic.c ****
49:d12ic.c **** }
50:d12ic.c **** //设置DMA
51:d12ic.c **** void D12_SetDMA(unsigned char bMode)
52:d12ic.c **** {
232 .LM13:
233 /* prologue: frame size=0 */
234 0080 1F93 push r17
235 /* prologue end (size=1) */
236 0082 182F mov r17,r24
53:d12ic.c **** outportb(D12_COMMAND,0xFB);
238 .LM14:
239 0084 6BEF ldi r22,lo8(251)
240 0086 70E0 ldi r23,hi8(251)
241 0088 83E0 ldi r24,lo8(3)
242 008a 90E0 ldi r25,hi8(3)
243 008c 0E94 0000 call outportb
54:d12ic.c **** outportb(D12_DATA,bMode);
245 .LM15:
246 0090 812F mov r24,r17
247 0092 9927 clr r25
248 0094 BC01 movw r22,r24
249 0096 82E0 ldi r24,lo8(2)
250 0098 90E0 ldi r25,hi8(2)
251 009a 0E94 0000 call outportb
252 /* epilogue: frame size=0 */
253 009e 1F91 pop r17
254 00a0 0895 ret
255 /* epilogue end (size=2) */
256 /* function D12_SetDMA size 17 (14) */
258 .Lscope3:
260 .global D12_ReadInterruptRegister
262 D12_ReadInterruptRegister:
55:d12ic.c ****
56:d12ic.c **** }
57:d12ic.c **** //读取中断寄存器
58:d12ic.c **** unsigned short D12_ReadInterruptRegister(void)
59:d12ic.c **** {
264 .LM16:
265 /* prologue: frame size=0 */
266 00a2 1F93 push r17
267 /* prologue end (size=1) */
60:d12ic.c **** unsigned char b1;
61:d12ic.c **** unsigned int j;
62:d12ic.c **** outportb(D12_COMMAND,0xF4);
269 .LM17:
270 00a4 64EF ldi r22,lo8(244)
271 00a6 70E0 ldi r23,hi8(244)
272 00a8 83E0 ldi r24,lo8(3)
273 00aa 90E0 ldi r25,hi8(3)
274 00ac 0E94 0000 call outportb
63:d12ic.c **** b1=inportb(D12_DATA)&0xff;
276 .LM18:
277 00b0 82E0 ldi r24,lo8(2)
278 00b2 90E0 ldi r25,hi8(2)
279 00b4 0E94 0000 call inportb
280 00b8 182F mov r17,r24
64:d12ic.c **** j=inportb(D12_DATA)&0x01;
282 .LM19:
283 00ba 82E0 ldi r24,lo8(2)
284 00bc 90E0 ldi r25,hi8(2)
285 00be 0E94 0000 call inportb
286 00c2 8170 andi r24,lo8(1)
287 00c4 9070 andi r25,hi8(1)
65:d12ic.c **** // put_c(b1);
66:d12ic.c **** // put_c(j);
67:d12ic.c **** j<<=8;
289 .LM20:
290 00c6 982F mov r25,r24
291 00c8 8827 clr r24
68:d12ic.c **** j+=b1;
69:d12ic.c **** return j;
70:d12ic.c **** }
293 .LM21:
294 00ca 810F add r24,r17
295 00cc 911D adc r25,__zero_reg__
296 /* epilogue: frame size=0 */
297 00ce 1F91 pop r17
298 00d0 0895 ret
299 /* epilogue end (size=2) */
300 /* function D12_ReadInterruptRegister size 24 (21) */
306 .Lscope4:
309 .global D12_SelectEndpoint
311 D12_SelectEndpoint:
71:d12ic.c **** //端点选择命令
72:d12ic.c **** unsigned char D12_SelectEndpoint(unsigned char bEndp)
73:d12ic.c **** {
313 .LM22:
314 /* prologue: frame size=0 */
315 /* prologue end (size=0) */
74:d12ic.c **** unsigned char c;
75:d12ic.c **** outportb(D12_COMMAND,bEndp);
317 .LM23:
318 00d2 9927 clr r25
319 00d4 BC01 movw r22,r24
320 00d6 83E0 ldi r24,lo8(3)
321 00d8 90E0 ldi r25,hi8(3)
322 00da 0E94 0000 call outportb
76:d12ic.c **** c=inportb(D12_DATA);
324 .LM24:
325 00de 82E0 ldi r24,lo8(2)
326 00e0 90E0 ldi r25,hi8(2)
327 00e2 0E94 0000 call inportb
77:d12ic.c **** return c;
78:d12ic.c **** }
329 .LM25:
330 00e6 9927 clr r25
331 /* epilogue: frame size=0 */
332 00e8 0895 ret
333 /* epilogue end (size=1) */
334 /* function D12_SelectEndpoint size 12 (11) */
336 .Lscope5:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -