?? dh980_icc.lst
字號:
03A9 F338 BCS 0x0391
(0065) }
(0066) return(data);
03AA 2F06 MOV R16,R22
03AB 940E0796 CALL pop_gset2
03AD 9508 RET
_Init5532:
data --> R20
i --> R22
03AE 940E07A8 CALL push_gset2
(0067) }
(0068) //初始化cs5532
(0069) void Init5532(void)
(0070) {
(0071) unsigned char i,data=0;
03B0 2744 CLR R20
(0072) SET_CS;
03B1 9A73 SBI 0x0E,3
(0073) delay_loop(2);
03B2 E002 LDI R16,2
03B3 E010 LDI R17,0
03B4 940E00A4 CALL _delay_loop
(0074) CLR_CS; //片選使能
03B6 B18E IN R24,0x0E
03B7 7F87 ANDI R24,0xF7
03B8 B98E OUT 0x0E,R24
(0075) delay_loop(2);
03B9 E002 LDI R16,2
03BA E010 LDI R17,0
03BB 940E00A4 CALL _delay_loop
(0076) CLR_SDI;
03BD B18E IN R24,0x0E
03BE 7E8F ANDI R24,0xEF
03BF B98E OUT 0x0E,R24
(0077) SET_SDO;
03C0 9A75 SBI 0x0E,5
(0078) CLR_SCK;
03C1 B18E IN R24,0x0E
03C2 7B8F ANDI R24,0xBF
03C3 B98E OUT 0x0E,R24
(0079) for(i=0;i<15;i++) AD_write(0xff); //初始化序列
03C4 2766 CLR R22
03C5 C003 RJMP 0x03C9
03C6 EF0F LDI R16,0xFF
03C7 DF96 RCALL _AD_write
03C8 9563 INC R22
03C9 306F CPI R22,0xF
03CA F3D8 BCS 0x03C6
(0080) // AD_write(0xfe);
(0081) for(i=0;i<6;i++) AD_write(ADResetData[i]); //復位cs5532
03CB 2766 CLR R22
03CC C009 RJMP 0x03D6
03CD EF8F LDI R24,0xFF
03CE E090 LDI R25,0
03CF 2FE6 MOV R30,R22
03D0 27FF CLR R31
03D1 0FE8 ADD R30,R24
03D2 1FF9 ADC R31,R25
03D3 9104 LPM R16,0(Z)
03D4 DF89 RCALL _AD_write
03D5 9563 INC R22
03D6 3066 CPI R22,6
03D7 F3A8 BCS 0x03CD
03D8 C007 RJMP 0x03E0
(0082) while(data!=0x10) //等待AD復位
(0083) {
(0084) AD_write(0x0b); //讀配置寄存器
03D9 E00B LDI R16,0xB
03DA DF83 RCALL _AD_write
(0085) data=AD_read();
03DB DFA9 RCALL _AD_read
03DC 2F40 MOV R20,R16
(0086) AD_read();
03DD DFA7 RCALL _AD_read
(0087) AD_read();
03DE DFA6 RCALL _AD_read
(0088) AD_read();
03DF DFA5 RCALL _AD_read
03E0 3140 CPI R20,0x10
03E1 F7B9 BNE 0x03D9
(0089) }
(0090) for(i=0;i<35;i++)
03E2 2766 CLR R22
03E3 C009 RJMP 0x03ED
(0091) {
(0092) AD_write(ADInitData[i]);
03E4 ED8C LDI R24,0xDC
03E5 E090 LDI R25,0
03E6 2FE6 MOV R30,R22
03E7 27FF CLR R31
03E8 0FE8 ADD R30,R24
03E9 1FF9 ADC R31,R25
03EA 9104 LPM R16,0(Z)
03EB DF72 RCALL _AD_write
03EC 9563 INC R22
03ED 3263 CPI R22,0x23
03EE F3A8 BCS 0x03E4
03EF 940E0796 CALL pop_gset2
03F1 9508 RET
_AD_sample:
data --> Y+0
03F2 9724 SBIW R28,4
(0093) }
(0094) }
(0095) //cs5532采樣
(0096) void AD_sample(void)
(0097) {
(0098) unsigned char data[4];
(0099) AD_write(0x0c);
03F3 E00C LDI R16,0xC
03F4 DF69 RCALL _AD_write
(0100) data[3]=0;
03F5 2422 CLR R2
03F6 822B STD Y+3,R2
(0101) data[2]=AD_read();
03F7 DF8D RCALL _AD_read
03F8 830A STD Y+2,R16
(0102) data[1]=AD_read();
03F9 DF8B RCALL _AD_read
03FA 8309 STD Y+1,R16
(0103) data[0]=AD_read();
03FB DF89 RCALL _AD_read
03FC 8308 STD Y+0,R16
(0104) AD_read();//狀態字節(溢出位和通道指示),沒有用到,丟棄.............
03FD DF87 RCALL _AD_read
03FE 9624 ADIW R28,4
03FF 9508 RET
_CS5532_Txd:
i --> R20
dat --> R22
0400 940E07A8 CALL push_gset2
0402 2F60 MOV R22,R16
(0105) }
(0106) void CS5532_Txd(unsigned char dat)//向CS5532寫一字節數據
(0107) {
(0108) unsigned char i;
(0109) CLR_SCK;//時鐘低
0403 B18E IN R24,0x0E
0404 7B8F ANDI R24,0xBF
0405 B98E OUT 0x0E,R24
(0110) CLR_CS;
0406 B18E IN R24,0x0E
0407 7F87 ANDI R24,0xF7
0408 B98E OUT 0x0E,R24
(0111) delay_loop(1);
0409 E001 LDI R16,1
040A E010 LDI R17,0
040B 940E00A4 CALL _delay_loop
(0112) for(i=0;i<8;i++)
040D 2744 CLR R20
040E C01D RJMP 0x042C
(0113) {
(0114) if((dat<<i)&0x80)
040F 2F06 MOV R16,R22
0410 2F14 MOV R17,R20
0411 940E07CD CALL lsl8
0413 2F80 MOV R24,R16
0414 7880 ANDI R24,0x80
0415 F011 BEQ 0x0418
(0115) SET_SDI; //數據送到SPI的SDI口
0416 9A74 SBI 0x0E,4
0417 C003 RJMP 0x041B
(0116) else
(0117) CLR_SDI;
0418 B18E IN R24,0x0E
0419 7E8F ANDI R24,0xEF
041A B98E OUT 0x0E,R24
(0118) delay_loop(2);
041B E002 LDI R16,2
041C E010 LDI R17,0
041D 940E00A4 CALL _delay_loop
(0119) SET_SCK; //時鐘高
041F 9A76 SBI 0x0E,6
(0120) delay_loop(2);
0420 E002 LDI R16,2
0421 E010 LDI R17,0
0422 940E00A4 CALL _delay_loop
(0121) CLR_SCK; //時鐘低
0424 B18E IN R24,0x0E
0425 7B8F ANDI R24,0xBF
0426 B98E OUT 0x0E,R24
(0122) delay_loop(2);
0427 E002 LDI R16,2
0428 E010 LDI R17,0
0429 940E00A4 CALL _delay_loop
042B 9543 INC R20
042C 3048 CPI R20,0x8
042D F308 BCS 0x040F
(0123) }
(0124) CLR_SDI;
042E B18E IN R24,0x0E
042F 7E8F ANDI R24,0xEF
0430 B98E OUT 0x0E,R24
0431 940E0796 CALL pop_gset2
0433 9508 RET
_CS5532_RXD:
c --> Y+4
RxdTxd4b --> Y+0
i --> R12
j --> R10
0434 940E07A4 CALL push_gset4
0436 9728 SBIW R28,0x8
(0125) }
(0126) unsigned long CS5532_RXD(void)
(0127) {
(0128) unsigned long c;
(0129) unsigned char RxdTxd4b[4];
(0130) unsigned char i,j;
(0131) c=0;
0437 E040 LDI R20,0
0438 E050 LDI R21,0
0439 E060 LDI R22,0
043A E070 LDI R23,0
043B 01FE MOVW R30,R28
043C 8344 STD Z+4,R20
043D 8355 STD Z+5,R21
043E 8366 STD Z+6,R22
043F 8377 STD Z+7,R23
(0132) CLR_SDI;
0440 B18E IN R24,0x0E
0441 7E8F ANDI R24,0xEF
0442 B98E OUT 0x0E,R24
(0133) for(j=0;j<4;j++)
0443 24AA CLR R10
0444 C035 RJMP 0x047A
(0134) {
(0135) for(i=0;i<8;i++)
0445 24CC CLR R12
0446 C02E RJMP 0x0475
(0136) {
(0137) SET_SCK; //時鐘高
0447 9A76 SBI 0x0E,6
(0138) delay_loop(2);
0448 E002 LDI R16,2
0449 E010 LDI R17,0
044A 940E00A4 CALL _delay_loop
(0139) RxdTxd4b[j]<<=1;
044C 01CE MOVW R24,R28
044D 2C2A MOV R2,R10
044E 2433 CLR R3
044F 0E28 ADD R2,R24
0450 1E39 ADC R3,R25
0451 01F1 MOVW R30,R2
0452 8040 LDD R4,Z+0
0453 0C44 LSL R4
0454 8240 STD Z+0,R4
(0140) if(SDO)
0455 9B65 SBIS 0x0C,5
0456 C00A RJMP 0x0461
(0141) RxdTxd4b[j]|=0x01; //從SDO讀取數據
0457 01CE MOVW R24,R28
0458 2C2A MOV R2,R10
0459 2433 CLR R3
045A 0E28 ADD R2,R24
045B 1E39 ADC R3,R25
045C 01F1 MOVW R30,R2
045D 8180 LDD R24,Z+0
045E 6081 ORI R24,1
045F 8380 STD Z+0,R24
0460 C008 RJMP 0x0469
(0142) else
(0143) RxdTxd4b[j]|=0x00; //從SDO讀取數據
0461 01CE MOVW R24,R28
0462 2C2A MOV R2,R10
0463 2433 CLR R3
0464 0E28 ADD R2,R24
0465 1E39 ADC R3,R25
0466 01F1 MOVW R30,R2
0467 8040 LDD R4,Z+0
0468 8240 STD Z+0,R4
(0144) delay_loop(2);
0469 E002 LDI R16,2
046A E010 LDI R17,0
046B 940E00A4 CALL _delay_loop
(0145) CLR_SCK; //時鐘低
046D B18E IN R24,0x0E
046E 7B8F ANDI R24,0xBF
046F B98E OUT 0x0E,R24
(0146) delay_loop(2);
0470 E002 LDI R16,2
0471 E010 LDI R17,0
0472 940E00A4 CALL _delay_loop
0474 94C3 INC R12
0475 2D8C MOV R24,R12
0476 3088 CPI R24,0x8
0477 F408 BCC 0x0479
0478 CFCE RJMP 0x0447
0479 94A3 INC R10
047A 2D8A MOV R24,R10
047B 3084 CPI R24,4
047C F408 BCC 0x047E
047D CFC7 RJMP 0x0445
(0147) }
(0148) }
(0149) c |= RxdTxd4b[0];
047E 8028 LDD R2,Y+0
047F 2433 CLR R3
0480 2444 CLR R4
0481 2455 CLR R5
0482 01FE MOVW R30,R28
0483 8064 LDD R6,Z+4
0484 8075 LDD R7,Z+5
0485 8086 LDD R8,Z+6
0486 8097 LDD R9,Z+7
0487 2862 OR R6,R2
0488 2873 OR R7,R3
0489 2884 OR R8,R4
048A 2895 OR R9,R5
048B 01FE MOVW R30,R28
048C 8264 STD Z+4,R6
048D 8275 STD Z+5,R7
048E 8286 STD Z+6,R8
048F 8297 STD Z+7,R9
(0150) c<<=8;
0490 E088 LDI R24,0x8
0491 E090 LDI R25,0
0492 01FE MOVW R30,R28
0493 8024 LDD R2,Z+4
0494 8035 LDD R3,Z+5
0495 8046 LDD R4,Z+6
0496 8057 LDD R5,Z+7
0497 938A ST R24,-Y
0498 0181 MOVW R16,R2
0499 0192 MOVW R18,R4
049A 940E07C1 CALL lsl32
049C 01FE MOVW R30,R28
049D 8304 STD Z+4,R16
049E 8315 STD Z+5,R17
049F 8326 STD Z+6,R18
04A0 8337 STD Z+7,R19
(0151) c |= RxdTxd4b[1];
04A1 8029 LDD R2,Y+1
04A2 2433 CLR R3
04A3 2444 CLR R4
04A4 2455 CLR R5
04A5 01FE MOVW R30,R28
04A6 8064 LDD R6,Z+4
04A7 8075 LDD R7,Z+5
04A8 8086 LDD R8,Z+6
04A9 8097 LDD R9,Z+7
04AA 2862 OR R6,R2
04AB 2873 OR R7,R3
04AC 2884 OR R8,R4
04AD 2895 OR R9,R5
04AE 01FE MOVW R30,R28
04AF 8264 STD Z+4,R6
04B0 8275 STD Z+5,R7
04B1 8286 STD Z+6,R8
04B2 8297 STD Z+7,R9
(0152) c<<=8;
04B3 E088 LDI R24,0x8
04B4 E090 LDI R25,0
04B5 01FE MOVW R30,R28
04B6 8024 LDD R2,Z+4
04B7 8035 LDD R3,Z+5
04B8 8046 LDD R4,Z+6
04B9 8057 LDD R5,Z+7
04BA 938A ST R24,-Y
04BB 0181 MOVW R16,R2
04BC 0192 MOVW R18,R4
04BD 940E07C1 CALL lsl32
04BF 01FE MOVW R30,R28
04C0 8304 STD Z+4,R16
04C1 8315 STD Z+5,R17
04C2 8326 STD Z+6,R18
04C3 8337 STD Z+7,R19
(0153) c |= RxdTxd4b[2];
04C4 802A LDD R2,Y+2
04C5 2433 CLR R3
04C6 2444 CLR R4
04C7 2455 CLR R5
04C8 01FE MOVW R30,R28
04C9 8064 LDD R6,Z+4
04CA 8075 LDD R7,Z+5
04CB 8086 LDD R8,Z+6
04CC 8097 LDD R9,Z+7
04CD 2862 OR R6,R2
04CE 2873 OR R7,R3
04CF 2884 OR R8,R4
04D0 2895 OR R9,R5
04D1 01FE MOVW R30,R28
04D2 8264 STD Z+4,R6
04D3 8275 STD Z+5,R7
04D4 8286 STD Z+6,R8
04D5 8297 STD Z+7,R9
(0154) c<<=8;
04D6 E088 LDI R24,0x8
04D7 E090 LDI R25,0
04D8 01FE MOVW R30,R28
04D9 8024 LDD R2,Z+4
04DA 8035 LDD R3,Z+5
04DB 8046 LDD R4,Z+6
04DC 8057 LDD R5,Z+7
04DD 938A ST R24,-Y
04DE 0181 MOVW R16,R2
04DF 0192 MOVW R18,R4
04E0 940E07C1 CALL lsl32
04E2 01FE MOVW R30,R28
04E3 8304 STD Z+4,R16
04E4 8315 STD Z+5,R17
04E5 8326 STD Z+6,R18
04E6 8337 STD Z+7,R19
(0155) c |= RxdTxd4b[3];
04E7 802B LDD R2,Y+3
04E8 2433 CLR R3
04E9 2444 CLR R4
04EA 2455 CLR R5
04EB 01FE MOVW R30,R28
04EC 8064 LDD R6,Z+4
04ED 8075 LDD R7,Z+5
04EE 8086 LDD R8,Z+6
04EF 8097 LDD R9,Z+7
04F0 2862 OR R6,R2
04F1 2873 OR R7,R3
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -