📄 twi_1.lis
字号:
02BE X14:
02BE B2C1 xjmp L54
02C0 L88:
02C0 4834 cpi R20,72
02C2 E0E0 ldi R30,0
02C4 5E07 cpc R21,R30
02C6 09F4 brne X15
02C8 D5C0 xjmp L62
02CA X15:
02CA 88E4 ldi R24,72
02CC 90E0 ldi R25,0
02CE 8417 cp R24,R20
02D0 9507 cpc R25,R21
02D2 84F0 brlt L95
02D4 L94:
02D4 4833 cpi R20,56
02D6 E0E0 ldi R30,0
02D8 5E07 cpc R21,R30
02DA 09F4 brne X16
02DC D3C0 xjmp L63
02DE X16:
02DE 4833 cpi R20,56
02E0 E0E0 ldi R30,0
02E2 5E07 cpc R21,R30
02E4 0CF4 brge X17
02E6 9EC1 xjmp L54
02E8 X17:
02E8 L96:
02E8 4034 cpi R20,64
02EA E0E0 ldi R30,0
02EC 5E07 cpc R21,R30
02EE 09F4 brne X18
02F0 E6C0 xjmp L65
02F2 X18:
02F2 98C1 xjmp L54
02F4 L95:
02F4 4835 cpi R20,88
02F6 E0E0 ldi R30,0
02F8 5E07 cpc R21,R30
02FA 09F4 brne X19
02FC A6C0 xjmp L61
02FE X19:
02FE 88E5 ldi R24,88
0300 90E0 ldi R25,0
0302 8417 cp R24,R20
0304 9507 cpc R25,R21
0306 34F0 brlt L98
0308 L97:
0308 4035 cpi R20,80
030A E0E0 ldi R30,0
030C 5E07 cpc R21,R30
030E 09F4 brne X20
0310 C1C0 xjmp L64
0312 X20:
0312 88C1 xjmp L54
0314 L98:
0314 4036 cpi R20,96
0316 E0E0 ldi R30,0
0318 5E07 cpc R21,R30
031A 09F4 brne X21
031C FEC0 xjmp L72
031E X21:
031E 82C1 xjmp L54
0320 L86:
0320 403A cpi R20,160
0322 E0E0 ldi R30,0
0324 5E07 cpc R21,R30
0326 09F4 brne X22
0328 28C1 xjmp L77
032A X22:
032A 80EA ldi R24,160
032C 90E0 ldi R25,0
032E 8417 cp R24,R20
0330 9507 cpc R25,R21
0332 0CF4 brge X23
0334 30C0 xjmp L100
0336 X23:
0336 L99:
0336 4038 cpi R20,128
0338 E0E0 ldi R30,0
033A 5E07 cpc R21,R30
033C 09F4 brne X24
033E FBC0 xjmp L73
0340 X24:
0340 80E8 ldi R24,128
0342 90E0 ldi R25,0
0344 8417 cp R24,R20
0346 9507 cpc R25,R21
0348 84F0 brlt L102
034A L101:
034A 4037 cpi R20,112
034C E0E0 ldi R30,0
034E 5E07 cpc R21,R30
0350 09F4 brne X25
0352 E3C0 xjmp L72
0354 X25:
0354 4037 cpi R20,112
0356 E0E0 ldi R30,0
0358 5E07 cpc R21,R30
035A 0CF4 brge X26
035C 63C1 xjmp L54
035E X26:
035E L103:
035E 4837 cpi R20,120
0360 E0E0 ldi R30,0
0362 5E07 cpc R21,R30
0364 09F4 brne X27
0366 D9C0 xjmp L72
0368 X27:
0368 5DC1 xjmp L54
036A L102:
036A 4039 cpi R20,144
036C E0E0 ldi R30,0
036E 5E07 cpc R21,R30
0370 09F4 brne X28
0372 E1C0 xjmp L73
0374 X28:
0374 80E9 ldi R24,144
0376 90E0 ldi R25,0
0378 8417 cp R24,R20
037A 9507 cpc R25,R21
037C 34F0 brlt L105
037E L104:
037E 4838 cpi R20,136
0380 E0E0 ldi R30,0
0382 5E07 cpc R21,R30
0384 09F4 brne X29
0386 F6C0 xjmp L76
0388 X29:
0388 4DC1 xjmp L54
038A L105:
038A 4839 cpi R20,152
038C E0E0 ldi R30,0
038E 5E07 cpc R21,R30
0390 09F4 brne X30
0392 F0C0 xjmp L76
0394 X30:
0394 47C1 xjmp L54
0396 L100:
0396 483B cpi R20,184
0398 E0E0 ldi R30,0
039A 5E07 cpc R21,R30
039C 09F4 brne X31
039E 0DC1 xjmp L79
03A0 X31:
03A0 88EB ldi R24,184
03A2 90E0 ldi R25,0
03A4 8417 cp R24,R20
03A6 9507 cpc R25,R21
03A8 84F0 brlt L107
03AA L106:
03AA 483A cpi R20,168
03AC E0E0 ldi R30,0
03AE 5E07 cpc R21,R30
03B0 09F4 brne X32
03B2 F0C0 xjmp L78
03B4 X32:
03B4 483A cpi R20,168
03B6 E0E0 ldi R30,0
03B8 5E07 cpc R21,R30
03BA 0CF4 brge X33
03BC 33C1 xjmp L54
03BE X33:
03BE L108:
03BE 403B cpi R20,176
03C0 E0E0 ldi R30,0
03C2 5E07 cpc R21,R30
03C4 09F4 brne X34
03C6 E6C0 xjmp L78
03C8 X34:
03C8 2DC1 xjmp L54
03CA L107:
03CA 483C cpi R20,200
03CC E0E0 ldi R30,0
03CE 5E07 cpc R21,R30
03D0 09F4 brne X35
03D2 19C1 xjmp L82
03D4 X35:
03D4 88EC ldi R24,200
03D6 90E0 ldi R25,0
03D8 8417 cp R24,R20
03DA 9507 cpc R25,R21
03DC 34F0 brlt L110
03DE L109:
03DE 403C cpi R20,192
03E0 E0E0 ldi R30,0
03E2 5E07 cpc R21,R30
03E4 09F4 brne X36
03E6 0FC1 xjmp L82
03E8 X36:
03E8 1DC1 xjmp L54
03EA L110:
03EA 483F cpi R20,248
03EC E0E0 ldi R30,0
03EE 5E07 cpc R21,R30
03F0 09F4 brne X37
03F2 18C1 xjmp L55
03F4 X37:
03F4 17C1 xjmp L54
03F6 X2:
03F6 .dbline 295
03F6 ; {
03F6 L57:
03F6 .dbline 300
03F6 ; // 主方式
03F6 ; case TW_START: // 0x08: START 已发送
03F6 ; case TW_REP_START: // 0x10: 重复START 已发送
03F6 ; // 发送器件地址
03F6 ; i2cSendByte(I2cDeviceAddrRW);
03F6 00910F00 lds R16,_I2cDeviceAddrRW
03FA 4FDE xcall _i2cSendByte
03FC .dbline 301
03FC ; I2cNotAck = 0;
03FC 2224 clr R2
03FE 20920500 sts _I2cNotAck,R2
0402 .dbline 302
0402 ; break;
0402 10C1 xjmp L55
0404 L58:
0404 .dbline 308
0404 ;
0404 ; // 主发送,主接收状态码
0404 ; case TW_MT_SLA_ACK: // 0x18: SLA+W 已发送;接收到ACK
0404 ; case TW_MT_DATA_ACK: // 0x28: 数据已发送;接收到ACK
0404 ;
0404 ; if(I2cSendDataIndex < I2cSendDataLength)
0404 20900900 lds R2,_I2cSendDataLength
0408 30900A00 lds R3,_I2cSendDataLength+1
040C 40900B00 lds R4,_I2cSendDataIndex
0410 50900C00 lds R5,_I2cSendDataIndex+1
0414 4214 cp R4,R2
0416 5304 cpc R5,R3
0418 98F4 brsh L59
041A .dbline 309
041A ; {
041A .dbline 311
041A ; // 发送数据
041A ; i2cSendByte( *(I2cSendData+I2cSendDataIndex) );
041A 20900D00 lds R2,_I2cSendData
041E 30900E00 lds R3,_I2cSendData+1
0422 F201 movw R30,R4
0424 E20D add R30,R2
0426 F31D adc R31,R3
0428 0081 ldd R16,z+0
042A 37DE xcall _i2cSendByte
042C .dbline 312
042C ; I2cSendDataIndex++;
042C 80910B00 lds R24,_I2cSendDataIndex
0430 90910C00 lds R25,_I2cSendDataIndex+1
0434 0196 adiw R24,1
0436 90930C00 sts _I2cSendDataIndex+1,R25
043A 80930B00 sts _I2cSendDataIndex,R24
043E .dbline 313
043E ; }
043E F2C0 xjmp L55
0440 L59:
0440 .dbline 315
0440 ; else
0440 ; {
0440 .dbline 317
0440 ; // 发送停止条件,保持TWEA以便从接收
0440 ; i2cSendStop();
0440 23DE xcall _i2cSendStop
0442 .dbline 319
0442 ; // 设置状态
0442 ; I2cState = I2C_IDLE;
0442 2224 clr R2
0444 20921000 sts _I2cState,R2
0448 .dbline 320
0448 ; }
0448 .dbline 321
0448 ; break;
0448 EDC0 xjmp L55
044A L61:
044A .dbline 325
044A ; case TW_MR_DATA_NACK: // 0x58: 接收到数据;NOT ACK 已返回
044A ;
044A ; // 保存最终数据
044A ; *(I2cReceiveData+I2cReceiveDataIndex) = TWDR;
044A 20900700 lds R2,_I2cReceiveData
044E 30900800 lds R3,_I2cReceiveData+1
0452 E0910500 lds R30,_I2cReceiveDataIndex
0456 F0910600 lds R31,_I2cReceiveDataIndex+1
045A E20D add R30,R2
045C F31D adc R31,R3
045E 23B0 in R2,0x3
0460 2082 std z+0,R2
0462 .dbline 326
0462 ; I2cReceiveDataIndex++;
0462 80910500 lds R24,_I2cReceiveDataIndex
0466 90910600 lds R25,_I2cReceiveDataIndex+1
046A 0196 adiw R24,1
046C 90930600 sts _I2cReceiveDataIndex+1,R25
0470 80930500 sts _I2cReceiveDataIndex,R24
0474 L62:
0474 .dbline 333
0474 ; //继续发送条件
0474 ; case TW_MR_SLA_NACK: // 0x48: SLA+R 已发送,接收到NOT ACK
0474 ; case TW_MT_SLA_NACK: // 0x20: SLA+W 已发送,接收到NOT ACK
0474 ; case TW_MT_DATA_NACK: // 0x30: 数据已发送,接收到NOT ACK
0474 ;
0474 ; // 发送停止条件,保持TWEA以便从接收
0474 ; i2cSendStop();
0474 09DE xcall _i2cSendStop
0476 .dbline 336
0476 ; // 设置状态
0476 ; // if(status == TW_MR_SLA_NACK || status == TW_MT_SLA_NACK) /*此行有效则,数据发送过程中的模块断开不进行报错处理*/
0476 ; I2cNotAck = 0xff;
0476 8FEF ldi R24,255
0478 80930500 sts _I2cNotAck,R24
047C .dbline 337
047C ; I2cState = I2C_IDLE;
047C 2224 clr R2
047E 20921000 sts _I2cState,R2
0482 .dbline 338
0482 ; break;
0482 D0C0 xjmp L55
0484 L63:
0484 .dbline 343
0484 ; case TW_MT_ARB_LOST: // 0x38: SLA+W 或数据的仲裁失败
0484 ;
0484 ;
0484 ; // 释放总线
0484 ; TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT);
0484 86B7 in R24,0x36
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -