📄 mp3.lst
字号:
(0326) {
(0327) uint8 retval = TWI_OK;
0B85 2744 CLR R20
(0328) WDR(); //喂狗;
0B86 95A8 WDR
(0329) // 关Twi_中断
(0330) TWCR&=~(1<<TWIE);
0B87 B786 IN R24,0x36
0B88 7F8E ANDI R24,0xFE
0B89 BF86 OUT 0x36,R24
(0331)
(0332) //发送开始条件
(0333)
(0334) Twi_Start();
0B8A B786 IN R24,0x36
0B8B 708F ANDI R24,0xF
0B8C 6A80 ORI R24,0xA0
0B8D BF86 OUT 0x36,R24
(0335) WDR(); //喂狗;
0B8E 95A8 WDR
(0336) Twi_WaitForComplete();
0B8F B626 IN R2,0x36
0B90 FE27 SBRS R2,7
0B91 CFFD RJMP 0x0B8F
(0337) // 发送器件读地址
(0338) Twi_SendByte( deviceAddr | 0x01 );
0B92 2F80 MOV R24,R16
0B93 6081 ORI R24,1
0B94 B983 OUT 0x03,R24
0B95 B786 IN R24,0x36
0B96 708F ANDI R24,0xF
0B97 6880 ORI R24,0x80
0B98 BF86 OUT 0x36,R24
(0339) WDR(); //喂狗;
0B99 95A8 WDR
(0340) Twi_WaitForComplete();
0B9A B626 IN R2,0x36
0B9B FE27 SBRS R2,7
0B9C CFFD RJMP 0x0B9A
(0341) // 检查器件是否可用
(0342) if( TWSR == TW_MR_SLA_ACK)
0B9D B181 IN R24,0x01
0B9E 3480 CPI R24,0x40
0B9F F4E9 BNE 0x0BBD
(0343) {
0BA0 C00D RJMP 0x0BAE
(0344) // 接收数据并回应
(0345) while(length > 1)
(0346) {
(0347) Twi_Ack();
0BA1 B786 IN R24,0x36
0BA2 708F ANDI R24,0xF
0BA3 6C80 ORI R24,0xC0
0BA4 BF86 OUT 0x36,R24
(0348) Twi_WaitForComplete();
0BA5 B626 IN R2,0x36
0BA6 FE27 SBRS R2,7
0BA7 CFFD RJMP 0x0BA5
(0349) *data++ = TWDR;
0BA8 B023 IN R2,0x03
0BA9 01FB MOVW R30,R22
0BAA 9221 ST R2,Z+
0BAB 01BF MOVW R22,R30
(0350) length--;
0BAC 952A DEC R18
(0351) WDR(); //喂狗;
0BAD 95A8 WDR
0BAE E081 LDI R24,1
0BAF 1782 CP R24,R18
0BB0 F380 BCS 0x0BA1
(0352) }
(0353) // 接收数据无回应 (末位信号)
(0354) Twi_NoAcK();
0BB1 B786 IN R24,0x36
0BB2 708F ANDI R24,0xF
0BB3 6880 ORI R24,0x80
0BB4 BF86 OUT 0x36,R24
(0355) Twi_WaitForComplete();
0BB5 B626 IN R2,0x36
0BB6 FE27 SBRS R2,7
0BB7 CFFD RJMP 0x0BB5
(0356) *data++ = TWDR;
0BB8 B023 IN R2,0x03
0BB9 01FB MOVW R30,R22
0BBA 9221 ST R2,Z+
0BBB 01BF MOVW R22,R30
(0357) }
0BBC C001 RJMP 0x0BBE
(0358) else
(0359) {
(0360) // 如未回应器件地址,停止发送,返回错误
(0361) retval = TWI_ERROR_NODEV;
0BBD E041 LDI R20,1
(0362) }
(0363) // 发送停止条件,保持TWEA以便从接收
(0364) Twi_Stop();
0BBE B786 IN R24,0x36
0BBF 708F ANDI R24,0xF
0BC0 6D80 ORI R24,0xD0
0BC1 BF86 OUT 0x36,R24
(0365) // 开Twi_中断
(0366) TWCR|=TWIE;
0BC2 B626 IN R2,0x36
0BC3 BE26 OUT 0x36,R2
(0367) return retval;
0BC4 2F04 MOV R16,R20
0BC5 940E190F CALL pop_gset2
0BC7 9508 RET
_Twi_SlaveReceiveService:
i --> R20
0BC8 940E1923 CALL push_gset1
(0368) }
(0369) /*********************************************************************************************************
(0370) ** 函数名称:Twi_SlaveReceiveService
(0371) ** 功能描述:此函数在本机被选中为从写入时运行
(0372) ** 输 入: receiveDataLength:接收数据长度
(0373) ** * receiveData:数据缓冲区指针
(0374) ** 输 出:
(0375) ** 全局变量:
(0376) ** 调用模块:
(0377) ** 说明:
(0378) ** 注意:
(0379) ** 日 期: 2006年8月29日
(0380) ********************************************************************************************************/
(0381) void Twi_SlaveReceiveService()
(0382) {
(0383) uint8 i;
(0384) WDR(); //喂狗;
0BCA 95A8 WDR
(0385) //此函数在本机被选中为从写入时运行
(0386) // 接收到的数据存入本地缓冲区
(0387) if((Twi_LocalBuffer.status==TWI_DATA_RECEIVE)&&(Twi_ReceiveBuffer.status==TWI_DATA_RECEIVE))
0BCB 918000D8 LDS R24,0xD8
0BCD 3081 CPI R24,1
0BCE F4D1 BNE 0x0BE9
0BCF 918000CF LDS R24,0xCF
0BD1 3081 CPI R24,1
0BD2 F4B1 BNE 0x0BE9
(0388) {
(0389) for(i=0;!EmptyQueue(&Twi_ReceiveBuffer); i++)
0BD3 2744 CLR R20
0BD4 C00A RJMP 0x0BDF
(0390) {
(0391) EnQueue(&Twi_LocalBuffer, DeQueue(&Twi_ReceiveBuffer));
0BD5 EC08 LDI R16,0xC8
0BD6 E010 LDI R17,0
0BD7 940E093E CALL _DeQueue
0BD9 2F20 MOV R18,R16
0BDA ED01 LDI R16,0xD1
0BDB E010 LDI R17,0
0BDC 940E090B CALL _EnQueue
0BDE 9543 INC R20
0BDF 902000CA LDS R2,Twi_ReceiveBuffer+2
0BE1 2022 TST R2
0BE2 F791 BNE 0x0BD5
(0392) }
(0393) Twi_ReceiveBuffer.status=TWI_DATA_FREE;
0BE3 2422 CLR R2
0BE4 922000CF STS 0xCF,R2
(0394) Twi_LocalBuffer.status=TWI_DATA_READY;
0BE6 E083 LDI R24,3
0BE7 938000D8 STS 0xD8,R24
(0395) }
0BE9 940E1926 CALL pop_gset1
0BEB 9508 RET
_Twi_SlaveTransmitService:
i --> R20
0BEC 940E1923 CALL push_gset1
(0396) }
(0397) /*********************************************************************************************************
(0398) ** 函数名称:Twi_SlaveTransmitService
(0399) ** 功能描述:此函数在本机被选中为从读出时运行
(0400) ** 输 入: transmitDataLengthMax
(0401) ** 输 出:
(0402) ** 全局变量:
(0403) ** 调用模块:
(0404) ** 说明:
(0405) ** 注意:
(0406) ** 日 期: 2006年8月29日
(0407) ********************************************************************************************************/
(0408) uint8 Twi_SlaveTransmitService(void)
(0409) {
(0410) uint8 i=0;
0BEE 2744 CLR R20
(0411) WDR(); //喂狗;
0BEF 95A8 WDR
(0412) //此函数在本机被选中为从读出时运行
(0413) //要发送的数据存入发送缓冲区
(0414)
(0415)
(0416) if ((Twi_LocalBuffer.status==TWI_DATA_SEND)&&Twi_SendBuffer.status==TWI_DATA_FREE)
0BF0 918000D8 LDS R24,0xD8
0BF2 3082 CPI R24,2
0BF3 F511 BNE 0x0C16
0BF4 902000C6 LDS R2,0xC6
0BF6 2022 TST R2
0BF7 F4F1 BNE 0x0C16
(0417) {
(0418) InitQueue(&Twi_SendBuffer); //清除上次发送的信息
0BF8 EB0F LDI R16,0xBF
0BF9 E010 LDI R17,0
0BFA 940E08FE CALL _InitQueue
(0419) for(i=0; (Twi_LocalBuffer.count>0)&&(Twi_SendBuffer.errorcode!=QUEUE_OVERFLOW); i++)
0BFC C00A RJMP 0x0C07
(0420) {
(0421) EnQueue(&Twi_SendBuffer,DeQueue(&Twi_LocalBuffer));
0BFD ED01 LDI R16,0xD1
0BFE E010 LDI R17,0
0BFF 940E093E CALL _DeQueue
0C01 2F20 MOV R18,R16
0C02 EB0F LDI R16,0xBF
0C03 E010 LDI R17,0
0C04 940E090B CALL _EnQueue
0C06 9543 INC R20
0C07 2422 CLR R2
0C08 903000D3 LDS R3,Twi_LocalBuffer+2
0C0A 1423 CP R2,R3
0C0B F420 BCC 0x0C10
0C0C 918000C5 LDS R24,0xC5
0C0E 3081 CPI R24,1
0C0F F769 BNE 0x0BFD
(0422) }
(0423) Twi_SendBuffer.status= TWI_DATA_SEND;
0C10 E082 LDI R24,2
0C11 938000C6 STS 0xC6,R24
(0424) Twi_LocalBuffer.status=TWI_DATA_FREE;
0C13 2422 CLR R2
0C14 922000D8 STS 0xD8,R2
(0425) }
(0426) return i;
0C16 2F04 MOV R16,R20
0C17 940E1926 CALL pop_gset1
0C19 9508 RET
_twi_isr:
status --> R20
0C1A 940E195F CALL push_lset
0C1C 940E1921 CALL push_gset2
(0427) }
(0428) /*********************************************************************************************************
(0429) ** 函数名称:
(0430) ** 功能描述:Twi_ (TWI) 中断服务程序
(0431) ** 输 入:
(0432) ** 输 出:
(0433) ** 全局变量:
(0434) ** 调用模块:
(0435) ** 说明:
(0436) ** 注意:
(0437) ** 日 期: 2006年8月29日
(0438) ********************************************************************************************************/
(0439) #pragma interrupt_handler twi_isr: iv_TWI
(0440) void twi_isr(void)
(0441) {
(0442) //读状态位
(0443) uint8 status;
(0444) status = TWSR & TWSR_STATUS_MASK;
0C1E B141 IN R20,0x01
0C1F 7F48 ANDI R20,0xF8
(0445) switch(status)
0C20 2F64 MOV R22,R20
0C21 2777 CLR R23
0C22 3668 CPI R22,0x68
0C23 E0E0 LDI R30,0
0C24 077E CPC R23,R30
0C25 F409 BNE 0x0C27
0C26 C131 RJMP 0x0D58
0C27 E688 LDI R24,0x68
0C28 E090 LDI R25,0
0C29 1786 CP R24,R22
0C2A 0797 CPC R25,R23
0C2B F40C BGE 0x0C2D
0C2C C06A RJMP 0x0C97
0C2D 3360 CPI R22,0x30
0C2E E0E0 LDI R30,0
0C2F 077E CPC R23,R30
0C30 F409 BNE 0x0C32
0C31 C0F8 RJMP 0x0D2A
0C32 E380 LDI R24,0x30
0C33 E090 LDI R25,0
0C34 1786 CP R24,R22
0C35 0797 CPC R25,R23
0C36 F40C BGE 0x0C38
0C37 C02F RJMP 0x0C67
0C38 3160 CPI R22,0x10
0C39 E0E0 LDI R30,0
0C3A 077E CPC R23,R30
0C3B F409 BNE 0x0C3D
0C3C C0C5 RJMP 0x0D02
0C3D E180 LDI R24,0x10
0C3E E090 LDI R25,0
0C3F 1786 CP R24,R22
0C40 0797 CPC R25,R23
0C41 F07C BLT 0x0C51
0C42 3060 CPI R22,0
0C43 0767 CPC R22,R23
0C44 F409 BNE 0x0C46
0C45 C178 RJMP 0x0DBE
0C46 3060 CPI R22,0
0C47 E0E0 LDI R30,0
0C48 077E CPC R23,R30
0C49 F40C BGE 0x0C4B
0C4A C17A RJMP 0x0DC5
0C4B 3068 CPI R22,0x8
0C4C E0E0 LDI R30,0
0C4D 077E CPC R23,R30
0C4E F409 BNE 0x0C50
0C4F C0B2 RJMP 0x0D02
0C50 C174 RJMP 0x0DC5
0C51 3260 CPI R22,0x20
0C52 E0E0 LDI R30,0
0C53 077E CPC R23,R30
0C54 F409 BNE 0x0C56
0C55 C0D4 RJMP 0x0D2A
0C56 E280 LDI R24,0x20
0C57 E090 LDI R25,0
0C58 1786 CP R24,R22
0C59 0797 CPC R25,R23
0C5A F034 BLT 0x0C61
0C5B 3168 CPI R22,0x18
0C5C E0E0 LDI R30,0
0C5D 077E CPC R23,R30
0C5E F409 BNE 0x0C60
0C5F C0AA RJMP 0x0D0A
0C60 C164 RJMP 0x0DC5
0C61 3268 CPI R22,0x28
0C62 E0E0 LDI R30,0
0C63 077E CPC R23,R30
0C64 F409 BNE 0x0C66
0C65 C0A4 RJMP 0x0D0A
0C66 C15E RJMP 0x0DC5
0C67 3468 CPI R22,0x48
0C68 E0E0 LDI R30,0
0C69 077E CPC R23,R30
0C6A F409 BNE 0x0C6C
0C6B C0BE RJMP 0x0D2A
0C6C E488 LDI R24,0x48
0C6D E090 LDI R25,0
0C6E 1786 CP R24,R22
0C6F 0797 CPC R25,R23
0C70 F084 BLT 0x0C81
0C71 3368 CPI R22,0x38
0C72 E0E0 LDI R30,0
0C73 077E CPC R23,R30
0C74 F409 BNE 0x0C76
0C75 C0BC RJMP 0x0D32
0C76 3368 CPI R22,0x38
0C77 E0E0 LDI R30,0
0C78 077E CPC R23,R30
0C79 F40C BGE 0x0C7B
0C7A C14A RJMP 0x0DC5
0C7B 3460 CPI R22,0x40
0C7C E0E0 LDI R30,0
0C7D 077E CPC R23,R30
0C7E F409 BNE 0x0C80
0C7F C0BF RJMP 0x0D3F
0C80 C144 RJMP 0x0DC5
0C81 3568 CPI R22,0x58
0C82 E0E0 LDI R30,0
0C83 077E CPC R23,R30
0C84 F409 BNE 0x0C86
0C85 C09F RJMP 0x0D25
0C86 E588 LDI R24,0x58
0C87 E090 LDI R25,0
0C88 1786 CP R24,R22
0C89 0797 CPC R25,R23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -