📄 main.c.lss
字号:
00000206 <outportb>:
#define TXD232 1
#define INT_N 2
#define wait asm("nop")
void outportb(unsigned int Addr,unsigned char Data)
{
206: 9c 01 movw r18, r24
DDRA=0xff; //IOA OUT
208: 8f ef ldi r24, 0xFF ; 255
20a: 8a bb out 0x1a, r24 ; 26
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N); //IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;
20c: 88 e3 ldi r24, 0x38 ; 56
20e: 88 bb out 0x18, r24 ; 24
PORTA=Addr;
210: 2b bb out 0x1b, r18 ; 27
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=1,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
212: 98 e7 ldi r25, 0x78 ; 120
214: 98 bb out 0x18, r25 ; 24
// 在ALE 下降沿的时候,D12锁定地址;
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
216: 88 bb out 0x18, r24 ; 24
// 准备数据写入D12
PORTB=(0<<CS_N)|(0<<ALE)|(0<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=0,RD_N=1,RESET_N=1,INT_N=1
218: 88 e1 ldi r24, 0x18 ; 24
21a: 88 bb out 0x18, r24 ; 24
PORTA=Data;
21c: 6b bb out 0x1b, r22 ; 27
asm("NOP");
21e: 00 00 nop
asm("NOP");
220: 00 00 nop
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
222: 98 bb out 0x18, r25 ; 24
224: 08 95 ret
00000226 <inportb>:
}
unsigned char inportb(unsigned Addr)
{
226: 9c 01 movw r18, r24
unsigned char temp;
DDRA=0xff; //IOA IN
228: 8f ef ldi r24, 0xFF ; 255
22a: 8a bb out 0x1a, r24 ; 26
PORTB=0b00111010; //IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;
22c: 8a e3 ldi r24, 0x3A ; 58
22e: 88 bb out 0x18, r24 ; 24
PORTA=Addr;
230: 2b bb out 0x1b, r18 ; 27
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=1,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
232: 88 e7 ldi r24, 0x78 ; 120
234: 88 bb out 0x18, r24 ; 24
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
236: 98 e3 ldi r25, 0x38 ; 56
238: 98 bb out 0x18, r25 ; 24
DDRA=0x00;
23a: 1a ba out 0x1a, r1 ; 26
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(0<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=0;RESET_N=1,INT_N=1
23c: 88 e2 ldi r24, 0x28 ; 40
23e: 88 bb out 0x18, r24 ; 24
temp=PORTA;
240: 8b b3 in r24, 0x1b ; 27
asm("NOP");
242: 00 00 nop
asm("NOP");
244: 00 00 nop
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
246: 98 bb out 0x18, r25 ; 24
return temp;
}
248: 99 27 eor r25, r25
24a: 08 95 ret
0000024c <D12_SetAddressEnable>:
//设置地址使能命令
void D12_SetAddressEnable(unsigned char bAddress,unsigned char bEnable)
{
24c: 1f 93 push r17
24e: cf 93 push r28
250: c8 2f mov r28, r24
252: 16 2f mov r17, r22
outportb(D12_COMMAND,0xD0);
254: 60 ed ldi r22, 0xD0 ; 208
256: 70 e0 ldi r23, 0x00 ; 0
258: 83 e0 ldi r24, 0x03 ; 3
25a: 90 e0 ldi r25, 0x00 ; 0
25c: 0e 94 03 01 call 0x206 <outportb>
if(bEnable)
260: 11 11 cpse r17, r1
bAddress|=0x80;
262: c0 68 ori r28, 0x80 ; 128
outportb(D12_DATA,bAddress);
264: 8c 2f mov r24, r28
266: 99 27 eor r25, r25
268: bc 01 movw r22, r24
26a: 82 e0 ldi r24, 0x02 ; 2
26c: 90 e0 ldi r25, 0x00 ; 0
26e: 0e 94 03 01 call 0x206 <outportb>
272: cf 91 pop r28
274: 1f 91 pop r17
276: 08 95 ret
00000278 <D12_SetEndpointEnable>:
}
//设置端点使能命令
void D12_SetEndpointEnable(unsigned char bEnable)
{
278: 1f 93 push r17
outportb(D12_COMMAND,0xD8);
27a: 68 ed ldi r22, 0xD8 ; 216
27c: 70 e0 ldi r23, 0x00 ; 0
27e: 83 e0 ldi r24, 0x03 ; 3
280: 90 e0 ldi r25, 0x00 ; 0
282: 0e 94 03 01 call 0x206 <outportb>
if(bEnable)
outportb(D12_DATA,1);
else
outportb(D12_DATA,1);
286: 61 e0 ldi r22, 0x01 ; 1
288: 70 e0 ldi r23, 0x00 ; 0
28a: 82 e0 ldi r24, 0x02 ; 2
28c: 90 e0 ldi r25, 0x00 ; 0
28e: 0e 94 03 01 call 0x206 <outportb>
292: 1f 91 pop r17
294: 08 95 ret
00000296 <D12_SetMode>:
}
//设置模式命令
void D12_SetMode(unsigned char bConfig,unsigned char bClkDiv)
{
296: 0f 93 push r16
298: 1f 93 push r17
29a: 18 2f mov r17, r24
29c: 06 2f mov r16, r22
outportb(D12_COMMAND,0xF3);
29e: 63 ef ldi r22, 0xF3 ; 243
2a0: 70 e0 ldi r23, 0x00 ; 0
2a2: 83 e0 ldi r24, 0x03 ; 3
2a4: 90 e0 ldi r25, 0x00 ; 0
2a6: 0e 94 03 01 call 0x206 <outportb>
outportb(D12_DATA,bConfig);
2aa: 81 2f mov r24, r17
2ac: 99 27 eor r25, r25
2ae: bc 01 movw r22, r24
2b0: 82 e0 ldi r24, 0x02 ; 2
2b2: 90 e0 ldi r25, 0x00 ; 0
2b4: 0e 94 03 01 call 0x206 <outportb>
outportb(D12_DATA,bClkDiv);
2b8: 80 2f mov r24, r16
2ba: 99 27 eor r25, r25
2bc: bc 01 movw r22, r24
2be: 82 e0 ldi r24, 0x02 ; 2
2c0: 90 e0 ldi r25, 0x00 ; 0
2c2: 0e 94 03 01 call 0x206 <outportb>
2c6: 1f 91 pop r17
2c8: 0f 91 pop r16
2ca: 08 95 ret
000002cc <D12_SetDMA>:
}
//设置DMA
void D12_SetDMA(unsigned char bMode)
{
2cc: 1f 93 push r17
2ce: 18 2f mov r17, r24
outportb(D12_COMMAND,0xFB);
2d0: 6b ef ldi r22, 0xFB ; 251
2d2: 70 e0 ldi r23, 0x00 ; 0
2d4: 83 e0 ldi r24, 0x03 ; 3
2d6: 90 e0 ldi r25, 0x00 ; 0
2d8: 0e 94 03 01 call 0x206 <outportb>
outportb(D12_DATA,bMode);
2dc: 81 2f mov r24, r17
2de: 99 27 eor r25, r25
2e0: bc 01 movw r22, r24
2e2: 82 e0 ldi r24, 0x02 ; 2
2e4: 90 e0 ldi r25, 0x00 ; 0
2e6: 0e 94 03 01 call 0x206 <outportb>
2ea: 1f 91 pop r17
2ec: 08 95 ret
000002ee <D12_ReadInterruptRegister>:
}
//读取中断寄存器
unsigned short D12_ReadInterruptRegister(void)
{
2ee: 1f 93 push r17
unsigned char b1;
unsigned int j;
outportb(D12_COMMAND,0xF4);
2f0: 64 ef ldi r22, 0xF4 ; 244
2f2: 70 e0 ldi r23, 0x00 ; 0
2f4: 83 e0 ldi r24, 0x03 ; 3
2f6: 90 e0 ldi r25, 0x00 ; 0
2f8: 0e 94 03 01 call 0x206 <outportb>
b1=inportb(D12_DATA)&0xff;
2fc: 82 e0 ldi r24, 0x02 ; 2
2fe: 90 e0 ldi r25, 0x00 ; 0
300: 0e 94 13 01 call 0x226 <inportb>
304: 18 2f mov r17, r24
j=inportb(D12_DATA)&0x01;
306: 82 e0 ldi r24, 0x02 ; 2
308: 90 e0 ldi r25, 0x00 ; 0
30a: 0e 94 13 01 call 0x226 <inportb>
30e: 81 70 andi r24, 0x01 ; 1
310: 90 70 andi r25, 0x00 ; 0
// put_c(b1);
// put_c(j);
j<<=8;
312: 98 2f mov r25, r24
314: 88 27 eor r24, r24
j+=b1;
return j;
}
316: 81 0f add r24, r17
318: 91 1d adc r25, r1
31a: 1f 91 pop r17
31c: 08 95 ret
0000031e <D12_SelectEndpoint>:
//端点选择命令
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
unsigned char c;
outportb(D12_COMMAND,bEndp);
31e: 99 27 eor r25, r25
320: bc 01 movw r22, r24
322: 83 e0 ldi r24, 0x03 ; 3
324: 90 e0 ldi r25, 0x00 ; 0
326: 0e 94 03 01 call 0x206 <outportb>
c=inportb(D12_DATA);
32a: 82 e0 ldi r24, 0x02 ; 2
32c: 90 e0 ldi r25, 0x00 ; 0
32e: 0e 94 13 01 call 0x226 <inportb>
return c;
}
332: 99 27 eor r25, r25
334: 08 95 ret
00000336 <D12_ReadLastTransactionStatus>:
//读取端点最后处理状态
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
unsigned char c;
outportb(D12_COMMAND,0x40+bEndp);
336: 99 27 eor r25, r25
338: 80 5c subi r24, 0xC0 ; 192
33a: 9f 4f sbci r25, 0xFF ; 255
33c: bc 01 movw r22, r24
33e: 83 e0 ldi r24, 0x03 ; 3
340: 90 e0 ldi r25, 0x00 ; 0
342: 0e 94 03 01 call 0x206 <outportb>
c=inportb(D12_DATA);
346: 82 e0 ldi r24, 0x02 ; 2
348: 90 e0 ldi r25, 0x00 ; 0
34a: 0e 94 13 01 call 0x226 <inportb>
return c;
}
34e: 99 27 eor r25, r25
350: 08 95 ret
00000352 <D12_SetEndpointStatus>:
//设置端点状态
void D12_SetEndpointStatus(unsigned char bEndp,unsigned char bStalled)
{
352: 1f 93 push r17
354: 16 2f mov r17, r22
outportb(D12_COMMAND,0x40+bEndp);
356: 99 27 eor r25, r25
358: 80 5c subi r24, 0xC0 ; 192
35a: 9f 4f sbci r25, 0xFF ; 255
35c: bc 01 movw r22, r24
35e: 83 e0 ldi r24, 0x03 ; 3
360: 90 e0 ldi r25, 0x00 ; 0
362: 0e 94 03 01 call 0x206 <outportb>
outportb(D12_DATA,bStalled);
366: 81 2f mov r24, r17
368: 99 27 eor r25, r25
36a: bc 01 movw r22, r24
36c: 82 e0 ldi r24, 0x02 ; 2
36e: 90 e0 ldi r25, 0x00 ; 0
370: 0e 94 03 01 call 0x206 <outportb>
374: 1f 91 pop r17
376: 08 95 ret
00000378 <D12_ReadEndpointStatus>:
}
//读取端点状态
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
unsigned char temp;
outportb(D12_COMMAND,0x80+bEndp);
378: 99 27 eor r25, r25
37a: 80 58 subi r24, 0x80 ; 128
37c: 9f 4f sbci r25, 0xFF ; 255
37e: bc 01 movw r22, r24
380: 83 e0 ldi r24, 0x03 ; 3
382: 90 e0 ldi r25, 0x00 ; 0
384: 0e 94 03 01 call 0x206 <outportb>
temp=inportb(D12_DATA);
388: 82 e0 ldi r24, 0x02 ; 2
38a: 90 e0 ldi r25, 0x00 ; 0
38c: 0e 94 13 01 call 0x226 <inportb>
return temp;
}
390: 99 27 eor r25, r25
392: 08 95 ret
00000394 <D12_SendResume>:
//发送恢复命令
void D12_SendResume(void)
{
outportb(D12_COMMAND,0xF6);
394: 66 ef ldi r22, 0xF6 ; 246
396: 70 e0 ldi r23, 0x00 ; 0
398: 83 e0 ldi r24, 0x03 ; 3
39a: 90 e0 ldi r25, 0x00 ; 0
39c: 0e 94 03 01 call 0x206 <outportb>
3a0: 08 95 ret
000003a2 <D12_ReadCurrentFrameNumber>:
}
//读取当前帧标志
unsigned short D12_ReadCurrentFrameNumber(void)
{
3a2: 0f 93 push r16
3a4: 1f 93 push r17
unsigned short i,j;
outportb(D12_COMMAND,0xF5);
3a6: 65 ef ldi r22, 0xF5 ; 245
3a8: 70 e0 ldi r23, 0x00 ; 0
3aa: 83 e0 ldi r24, 0x03 ; 3
3ac: 90 e0 ldi r25, 0x00 ; 0
3ae: 0e 94 03 01 call 0x206 <outportb>
i=inportb(D12_DATA);
3b2: 82 e0 ldi r24, 0x02 ; 2
3b4: 90 e0 ldi r25, 0x00 ; 0
3b6: 0e 94 13 01 call 0x226 <inportb>
3ba: 8c 01 movw r16, r24
j=inportb(D12_DATA);
3bc: 82 e0 ldi r24, 0x02 ; 2
3be: 90 e0 ldi r25, 0x00 ; 0
3c0: 0e 94 13 01 call 0x226 <inportb>
i+=(j<<8);
3c4: 98 2f mov r25, r24
3c6: 88 27 eor r24, r24
return i;
}
3c8: 80 0f add r24, r16
3ca: 91 1f adc r25, r17
3cc: 1f 91 pop r17
3ce: 0f 91 pop r16
3d0: 08 95 ret
000003d2 <D12_ReadEndpoint>:
//读取端点数据
unsigned char D12_ReadEndpoint(unsigned char endp,unsigned char len,unsigned char *buf)
{
3d2: df 92 push r13
3d4: ef 92 push r14
3d6: ff 92 push r15
3d8: 0f 93 push r16
3da: 1f 93 push r17
3dc: cf 93 push r28
3de: df 93 push r29
3e0: e8 2e mov r14, r24
3e2: d6 2e mov r13, r22
3e4: 8a 01 movw r16, r20
unsigned char i,j;
outportb(D12_COMMAND,endp); //读取端点缓冲区状态
3e6: c8 2f mov r28, r24
3e8: dd 27 eor r29, r29
3ea: be 01 movw r22, r28
3ec: 83 e0 ldi r24, 0x03 ; 3
3ee: 90 e0 ldi r25, 0x00 ; 0
3f0: 0e 94 03 01 call 0x206 <outportb>
if((inportb(D12_DATA) & D12_FULLEMPTY)==0)
3f4: 82 e0 ldi r24, 0x02 ; 2
3f6: 90 e0 ldi r25, 0x00 ; 0
3f8: 0e 94 13 01 call 0x226 <inportb>
3fc: 80 fd sbrc r24, 0
3fe: 03 c0 rjmp .+6 ; 0x406 <D12_ReadEndpoint+0x34>
return 0; //当前缓冲区为空,返回
400: 80 e0 ldi r24, 0x00 ; 0
402: 90 e0 ldi r25, 0x00 ; 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -