📄 main.lss
字号:
2fc: 83 b9 out 0x03, r24 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
2fe: 84 e8 ldi r24, 0x84 ; 132
300: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
302: 06 b6 in r0, 0x36 ; 54
304: 07 fe sbrs r0, 7
306: fd cf rjmp .-6 ; 0x302 <twi_read_byte+0xaa>
switch(twst = (TWSR&0xf8)) //twst=16
308: 81 b1 in r24, 0x01 ; 1
30a: 88 7f andi r24, 0xF8 ; 248
30c: 28 2f mov r18, r24
30e: 33 27 eor r19, r19
310: 20 34 cpi r18, 0x40 ; 64
312: 31 05 cpc r19, r1
314: 69 f0 breq .+26 ; 0x330 <twi_read_byte+0xd8>
316: 21 34 cpi r18, 0x41 ; 65
318: 31 05 cpc r19, r1
31a: 2c f4 brge .+10 ; 0x326 <twi_read_byte+0xce>
31c: 28 33 cpi r18, 0x38 ; 56
31e: 31 05 cpc r19, r1
320: 09 f4 brne .+2 ; 0x324 <twi_read_byte+0xcc>
322: a2 cf rjmp .-188 ; 0x268 <twi_read_byte+0x10>
324: 16 c0 rjmp .+44 ; 0x352 <twi_read_byte+0xfa>
326: 28 34 cpi r18, 0x48 ; 72
328: 31 05 cpc r19, r1
32a: 09 f4 brne .+2 ; 0x32e <twi_read_byte+0xd6>
32c: 98 cf rjmp .-208 ; 0x25e <twi_read_byte+0x6>
32e: 11 c0 rjmp .+34 ; 0x352 <twi_read_byte+0xfa>
{
case 0x40://TW_MR_SLA_ACK:
break;
case 0x48://TW_MR_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38://TW_MR_ARB_LOST:
goto begin;
default:
goto error;
}
TWCR = _BV(TWINT) | _BV(TWEN) ;//清TWINT,开始传输
330: 84 e8 ldi r24, 0x84 ; 132
332: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
334: 06 b6 in r0, 0x36 ; 54
336: 07 fe sbrs r0, 7
338: fd cf rjmp .-6 ; 0x334 <twi_read_byte+0xdc>
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
33a: 06 b6 in r0, 0x36 ; 54
33c: 07 fe sbrs r0, 7
33e: fd cf rjmp .-6 ; 0x33a <twi_read_byte+0xe2>
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
340: 06 b6 in r0, 0x36 ; 54
342: 07 fe sbrs r0, 7
344: fd cf rjmp .-6 ; 0x340 <twi_read_byte+0xe8>
switch(twst = (TWSR&0xf8))
346: 81 b1 in r24, 0x01 ; 1
348: 88 7f andi r24, 0xF8 ; 248
34a: 88 35 cpi r24, 0x58 ; 88
34c: 11 f4 brne .+4 ; 0x352 <twi_read_byte+0xfa>
{
case 0x58://TW_MR_DATA_NACK:
rv = TWDR;
34e: 93 b1 in r25, 0x03 ; 3
350: 01 c0 rjmp .+2 ; 0x354 <twi_read_byte+0xfc>
break;
default:
goto error;
}
quit:
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号
return rv;
error:
rv=0x00;
352: 90 e0 ldi r25, 0x00 ; 0
354: 84 e9 ldi r24, 0x94 ; 148
356: 86 bf out 0x36, r24 ; 54
goto quit;
}
358: 89 2f mov r24, r25
35a: 99 27 eor r25, r25
35c: 08 95 ret
0000035e <twi_read_str>:
uchar twi_read_str( uchar sla,uchar address,uchar *p,uchar len) //读字符串,
{
35e: 78 2f mov r23, r24
360: fa 01 movw r30, r20
uchar i,twst,n=0x0,rv=0xff;
362: 30 e0 ldi r19, 0x00 ; 0
364: af ef ldi r26, 0xFF ; 255
restart:
if(n++>=max)
366: 83 2f mov r24, r19
368: 3f 5f subi r19, 0xFF ; 255
36a: 83 30 cpi r24, 0x03 ; 3
36c: 08 f0 brcs .+2 ; 0x370 <twi_read_str+0x12>
36e: 7f c0 rjmp .+254 ; 0x46e <twi_read_str+0x110>
goto error;
begin:
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送开始信号
370: 84 ea ldi r24, 0xA4 ; 164
372: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
374: 06 b6 in r0, 0x36 ; 54
376: 07 fe sbrs r0, 7
378: fd cf rjmp .-6 ; 0x374 <twi_read_str+0x16>
switch(twst = (TWSR&0xf8))
37a: 81 b1 in r24, 0x01 ; 1
37c: 88 7f andi r24, 0xF8 ; 248
37e: 99 27 eor r25, r25
380: 80 31 cpi r24, 0x10 ; 16
382: 91 05 cpc r25, r1
384: 39 f0 breq .+14 ; 0x394 <twi_read_str+0x36>
386: 81 31 cpi r24, 0x11 ; 17
388: 91 05 cpc r25, r1
38a: 0c f0 brlt .+2 ; 0x38e <twi_read_str+0x30>
38c: 44 c0 rjmp .+136 ; 0x416 <twi_read_str+0xb8>
38e: 08 97 sbiw r24, 0x08 ; 8
390: 09 f0 breq .+2 ; 0x394 <twi_read_str+0x36>
392: 6d c0 rjmp .+218 ; 0x46e <twi_read_str+0x110>
{
case 0x10://TW_REP_START://有可能出现
case 0x08://TW_START:
break;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_WRITE;//发送SLA+W
394: 73 b9 out 0x03, r23 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
396: 84 e8 ldi r24, 0x84 ; 132
398: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
39a: 06 b6 in r0, 0x36 ; 54
39c: 07 fe sbrs r0, 7
39e: fd cf rjmp .-6 ; 0x39a <twi_read_str+0x3c>
switch(twst = (TWSR&0xf8))
3a0: 81 b1 in r24, 0x01 ; 1
3a2: 88 7f andi r24, 0xF8 ; 248
3a4: 99 27 eor r25, r25
3a6: 80 32 cpi r24, 0x20 ; 32
3a8: 91 05 cpc r25, r1
3aa: e9 f2 breq .-70 ; 0x366 <twi_read_str+0x8>
3ac: 81 32 cpi r24, 0x21 ; 33
3ae: 91 05 cpc r25, r1
3b0: 94 f5 brge .+100 ; 0x416 <twi_read_str+0xb8>
3b2: 48 97 sbiw r24, 0x18 ; 24
3b4: 09 f0 breq .+2 ; 0x3b8 <twi_read_str+0x5a>
3b6: 5b c0 rjmp .+182 ; 0x46e <twi_read_str+0x110>
{
case 0x18://TW_MT_SLA_ACK:
break;
case 0x20://TW_MT_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
/* TWDR = address>>8;//传输地址高8位
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
switch((twst = TW_STATUS))
{
case TW_MT_DATA_ACK:
break;
case TW_MT_DATA_NACK:
goto quit;
case TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}*/
TWDR = address;//传输地址低8位
3b8: 63 b9 out 0x03, r22 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
3ba: 84 e8 ldi r24, 0x84 ; 132
3bc: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
3be: 06 b6 in r0, 0x36 ; 54
3c0: 07 fe sbrs r0, 7
3c2: fd cf rjmp .-6 ; 0x3be <twi_read_str+0x60>
switch(twst = (TWSR&0xf8))
3c4: 81 b1 in r24, 0x01 ; 1
3c6: 88 7f andi r24, 0xF8 ; 248
3c8: 99 27 eor r25, r25
3ca: 80 33 cpi r24, 0x30 ; 48
3cc: 91 05 cpc r25, r1
3ce: 09 f4 brne .+2 ; 0x3d2 <twi_read_str+0x74>
3d0: 4f c0 rjmp .+158 ; 0x470 <twi_read_str+0x112>
3d2: 81 33 cpi r24, 0x31 ; 49
3d4: 91 05 cpc r25, r1
3d6: fc f4 brge .+62 ; 0x416 <twi_read_str+0xb8>
3d8: 88 97 sbiw r24, 0x28 ; 40
3da: 09 f0 breq .+2 ; 0x3de <twi_read_str+0x80>
3dc: 48 c0 rjmp .+144 ; 0x46e <twi_read_str+0x110>
{
case 0x28://TW_MT_DATA_ACK:
break;
case 0x30://TW_MT_DATA_NACK:
goto quit;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//发送(重新)开始信号
3de: 84 ea ldi r24, 0xA4 ; 164
3e0: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待发送完毕
3e2: 06 b6 in r0, 0x36 ; 54
3e4: 07 fe sbrs r0, 7
3e6: fd cf rjmp .-6 ; 0x3e2 <twi_read_str+0x84>
switch(twst =(TWSR&0xf8))
3e8: 81 b1 in r24, 0x01 ; 1
3ea: 88 7f andi r24, 0xF8 ; 248
3ec: 99 27 eor r25, r25
3ee: 80 31 cpi r24, 0x10 ; 16
3f0: 91 05 cpc r25, r1
3f2: 89 f4 brne .+34 ; 0x416 <twi_read_str+0xb8>
{
case 0x10://TW_REP_START://正确的状态
break;
case 0x38://TW_MT_ARB_LOST:
goto begin;
default:
goto error;
}
TWDR = sla | TW_READ;//发送SLA+R
3f4: 87 2f mov r24, r23
3f6: 81 60 ori r24, 0x01 ; 1
3f8: 83 b9 out 0x03, r24 ; 3
TWCR = _BV(TWINT) | _BV(TWEN);//清TWINT,开始传输
3fa: 84 e8 ldi r24, 0x84 ; 132
3fc: 86 bf out 0x36, r24 ; 54
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
3fe: 06 b6 in r0, 0x36 ; 54
400: 07 fe sbrs r0, 7
402: fd cf rjmp .-6 ; 0x3fe <twi_read_str+0xa0>
switch(twst = (TWSR&0xf8))
404: 81 b1 in r24, 0x01 ; 1
406: 88 7f andi r24, 0xF8 ; 248
408: 99 27 eor r25, r25
40a: 80 34 cpi r24, 0x40 ; 64
40c: 91 05 cpc r25, r1
40e: 61 f0 breq .+24 ; 0x428 <twi_read_str+0xca>
410: 81 34 cpi r24, 0x41 ; 65
412: 91 05 cpc r25, r1
414: 24 f4 brge .+8 ; 0x41e <twi_read_str+0xc0>
416: c8 97 sbiw r24, 0x38 ; 56
418: 09 f4 brne .+2 ; 0x41c <twi_read_str+0xbe>
41a: aa cf rjmp .-172 ; 0x370 <twi_read_str+0x12>
41c: 28 c0 rjmp .+80 ; 0x46e <twi_read_str+0x110>
41e: 88 34 cpi r24, 0x48 ; 72
420: 91 05 cpc r25, r1
422: 09 f4 brne .+2 ; 0x426 <twi_read_str+0xc8>
424: a0 cf rjmp .-192 ; 0x366 <twi_read_str+0x8>
426: 23 c0 rjmp .+70 ; 0x46e <twi_read_str+0x110>
{
case 0x40://TW_MR_SLA_ACK:
break;
case 0x48://TW_MR_SLA_NACK://器件忙,有可能处于内部写周期
goto restart;
case 0x38://TW_MR_ARB_LOST:
goto begin;
default:
goto error;
}
for(i=0;i<len;i++)
428: 30 e0 ldi r19, 0x00 ; 0
42a: 32 17 cp r19, r18
42c: 08 f5 brcc .+66 ; 0x470 <twi_read_str+0x112>
42e: 42 2f mov r20, r18
430: 55 27 eor r21, r21
432: 41 50 subi r20, 0x01 ; 1
434: 50 40 sbci r21, 0x00 ; 0
436: 74 e8 ldi r23, 0x84 ; 132
438: 64 ec ldi r22, 0xC4 ; 196
{
if(i==(len-1))
43a: 83 2f mov r24, r19
43c: 99 27 eor r25, r25
43e: 84 17 cp r24, r20
440: 95 07 cpc r25, r21
442: 11 f4 brne .+4 ; 0x448 <twi_read_str+0xea>
{
TWCR = _BV(TWINT) | _BV(TWEN) ;//清TWINT,开始传输(无应答)
444: 76 bf out 0x36, r23 ; 54
446: 01 c0 rjmp .+2 ; 0x44a <twi_read_str+0xec>
}
else
{
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWEA) ;//清TWINT,开始传输(有应答)
448: 66 bf out 0x36, r22 ; 54
}
while((TWCR & _BV(TWINT))==0x0);//等待传输完毕
44a: 06 b6 in r0, 0x36 ; 54
44c: 07 fe sbrs r0, 7
44e: fd cf rjmp .-6 ; 0x44a <twi_read_str+0xec>
switch(twst =(TWSR&0xf8))
450: 81 b1 in r24, 0x01 ; 1
452: 88 7f andi r24, 0xF8 ; 248
454: 99 27 eor r25, r25
456: 80 35 cpi r24, 0x50 ; 80
458: 91 05 cpc r25, r1
45a: 19 f0 breq .+6 ; 0x462 <twi_read_str+0x104>
45c: 88 35 cpi r24, 0x58 ; 88
45e: 91 05 cpc r25, r1
460: 31 f4 brne .+12 ; 0x46e <twi_read_str+0x110>
{
case 0x58://TW_MR_DATA_NACK:
case 0x50://TW_MR_DATA_ACK:
*p = TWDR;
462: 83 b1 in r24, 0x03 ; 3
464: 81 93 st Z+, r24
466: 3f 5f subi r19, 0xFF ; 255
468: 32 17 cp r19, r18
46a: 38 f3 brcs .-50 ; 0x43a <twi_read_str+0xdc>
46c: 01 c0 rjmp .+2 ; 0x470 <twi_read_str+0x112>
p++;
break;
default:
goto error;
}
}
quit:
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);//发送停止信号
return rv;
error:
rv=0x00;
46e: a0 e0 ldi r26, 0x00 ; 0
470: 84 e9 ldi r24, 0x94 ; 148
472: 86 bf out 0x36, r24 ; 54
goto quit;
}
474: 8a 2f mov r24, r26
476: 99 27 eor r25, r25
478: 08 95 ret
0000047a <CH375FileRead>:
#ifdef FILE_DATA_BUF_LEN
UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ]; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,起始地址建议为偶地址 */
UINT8 CH375FileRead( void ) /* 从当前文件读取数据 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -