📄 cs5460a.lis
字号:
.module Cs5460A.c
.area text(rom, con, rel)
0000 .dbfile Cs5460A.c
0000 .dbfile E:\工作项目\手操器\Cs5460A.c
0000 .dbfunc e SPI_RW _SPI_RW fc
0000 ; Vol -> R10
0000 ; Value -> R16
.even
0000 _SPI_RW::
0000 AA92 st -y,R10
0002 .dbline -1
0002 .dbline 6
0002 ; //-------------------------------------------------------------
0002 ; #include"cs5460a.h"
0002 ; //-----------------------------------------------------------------------------
0002 ;
0002 ; unsigned char SPI_RW(unsigned char Value)
0002 ; {
0002 .dbline 8
0002 ;
0002 ; unsigned char Vol=0;
0002 AA24 clr R10
0004 .dbline 25
0004 ; /* unsigned char i;
0004 ; for(i=0;i<8;i++)
0004 ; {
0004 ; Clr_CLK();
0004 ; if(Value&0x80)
0004 ; Set_MOSI();
0004 ; else
0004 ; Clr_MOSI();
0004 ; Value<<=1;
0004 ; Set_CLK();
0004 ; Vol<<=1;
0004 ; if(MOSI)
0004 ; Vol|=1;
0004 ; }
0004 ; Clr_CLK();
0004 ; return(Vol);*/
0004 ; SPDR = Value; /* 启动数据传输 */
0004 0FB9 out 0xf,R16
0006 L3:
0006 .dbline 26
0006 ; while(!(SPSR & BIT(SPIF))); /* 等待传输结束 */
0006 L4:
0006 .dbline 26
0006 779B sbis 0xe,7
0008 FECF rjmp L3
000A X0:
000A .dbline 27
000A ; Vol=SPDR; /* 清除中断标志 */
000A AFB0 in R10,0xf
000C .dbline 28
000C ; return SPDR;
000C 0FB1 in R16,0xf
000E .dbline -2
000E L2:
000E .dbline 0 ; func end
000E A990 ld R10,y+
0010 0895 ret
0012 .dbsym r Vol 10 c
0012 .dbsym r Value 16 c
0012 .dbend
0012 .dbfunc e CS5460a_Write_Byte _CS5460a_Write_Byte fV
0012 ; command -> R10
.even
0012 _CS5460a_Write_Byte::
0012 AA92 st -y,R10
0014 A02E mov R10,R16
0016 .dbline -1
0016 .dbline 33
0016 ; }
0016 ;
0016 ; //-------------------------------------------------------------
0016 ; void CS5460a_Write_Byte(unsigned char command)
0016 ; {
0016 .dbline 34
0016 ; Clr_CS();
0016 82B3 in R24,0x12
0018 8B7F andi R24,251
001A 82BB out 0x12,R24
001C .dbline 35
001C ; SPI_RW(command);
001C 0A2D mov R16,R10
001E F0DF rcall _SPI_RW
0020 .dbline 36
0020 ; Set_CS();
0020 929A sbi 0x12,2
0022 .dbline 37
0022 ; return;
0022 .dbline -2
0022 L6:
0022 .dbline 0 ; func end
0022 A990 ld R10,y+
0024 0895 ret
0026 .dbsym r command 10 c
0026 .dbend
0026 .dbfunc e CS5460a_Write _CS5460a_Write fV
0026 ; l_byte -> R10
0026 ; m_byte -> R12
0026 ; h_byte -> R14
0026 ; command -> R20
.even
0026 _CS5460a_Write::
0026 00D0 rcall push_xgset30FC
0028 E22E mov R14,R18
002A 402F mov R20,R16
002C C884 ldd R12,y+8
002E AA84 ldd R10,y+10
0030 .dbline -1
0030 .dbline 44
0030 ; }
0030 ; //-------------------------------------------------------------
0030 ; void CS5460a_Write(unsigned char command,
0030 ; unsigned char h_byte,
0030 ; unsigned char m_byte,
0030 ; unsigned char l_byte)
0030 ; {
0030 .dbline 45
0030 ; SPI_RW(command);
0030 042F mov R16,R20
0032 E6DF rcall _SPI_RW
0034 .dbline 46
0034 ; SPI_RW(h_byte);
0034 0E2D mov R16,R14
0036 E4DF rcall _SPI_RW
0038 .dbline 47
0038 ; SPI_RW(m_byte);
0038 0C2D mov R16,R12
003A E2DF rcall _SPI_RW
003C .dbline 48
003C ; SPI_RW(l_byte);
003C 0A2D mov R16,R10
003E E0DF rcall _SPI_RW
0040 .dbline 49
0040 ; return;
0040 .dbline -2
0040 L7:
0040 .dbline 0 ; func end
0040 00C0 rjmp pop_xgset30FC
0042 .dbsym r l_byte 10 c
0042 .dbsym r m_byte 12 c
0042 .dbsym r h_byte 14 c
0042 .dbsym r command 20 c
0042 .dbend
0042 .dbfunc e CS5460A_REG_WR _CS5460A_REG_WR fV
0042 ; l_byte -> R14
0042 ; m_byte -> R12
0042 ; h_byte -> R10
0042 ; command -> R20
.even
0042 _CS5460A_REG_WR::
0042 00D0 rcall push_xgset30FC
0044 A22E mov R10,R18
0046 402F mov R20,R16
0048 2397 sbiw R28,3
004A CB84 ldd R12,y+11
004C ED84 ldd R14,y+13
004E .dbline -1
004E .dbline 56
004E ; }
004E ; //-------------------------------------------------------------
004E ; void CS5460A_REG_WR(unsigned char command,
004E ; unsigned char h_byte,
004E ; unsigned char m_byte,
004E ; unsigned char l_byte)
004E ; {
004E .dbline 57
004E ; Clr_CS();
004E 82B3 in R24,0x12
0050 8B7F andi R24,251
0052 82BB out 0x12,R24
0054 .dbline 58
0054 ; command<<=1;
0054 440F lsl R20
0056 .dbline 59
0056 ; command|=0x40;
0056 4064 ori R20,64
0058 .dbline 60
0058 ; CS5460a_Write(command,h_byte,m_byte,l_byte);
0058 EA82 std y+2,R14
005A C882 std y+0,R12
005C 2A2D mov R18,R10
005E 042F mov R16,R20
0060 E2DF rcall _CS5460a_Write
0062 .dbline 61
0062 ; Set_CS();
0062 929A sbi 0x12,2
0064 .dbline 62
0064 ; return;
0064 .dbline -2
0064 L8:
0064 .dbline 0 ; func end
0064 2396 adiw R28,3
0066 00C0 rjmp pop_xgset30FC
0068 .dbsym r l_byte 14 c
0068 .dbsym r m_byte 12 c
0068 .dbsym r h_byte 10 c
0068 .dbsym r command 20 c
0068 .dbend
0068 .dbfunc e CS5460a_Read _CS5460a_Read fL
0068 .dbstruct 0 4 .1
0068 .dbfield 0 l_byte c
0068 .dbfield 1 m_byte c
0068 .dbfield 2 h_byte c
0068 .dbfield 3 command c
0068 .dbend
0068 .dbunion 0 4 WORD_BYTE
0068 .dbfield 0 Byte S[.1]
0068 .dbfield 0 Word l
0068 .dbend
0068 ; Vol -> y+0
0068 ; Reg -> R10
.even
0068 _CS5460a_Read::
0068 AA92 st -y,R10
006A A02E mov R10,R16
006C 2497 sbiw R28,4
006E .dbline -1
006E .dbline 66
006E ; }
006E ; //-----------------------------------------------------------------------------
006E ; long CS5460a_Read(unsigned char Reg)
006E ; {
006E .dbline 68
006E ; union WORD_BYTE Vol;
006E ; Clr_CS();
006E 82B3 in R24,0x12
0070 8B7F andi R24,251
0072 82BB out 0x12,R24
0074 .dbline 69
0074 ; Reg<<=1;
0074 AA0C lsl R10
0076 .dbline 70
0076 ; Vol.Byte.command=SPI_RW(Reg);
0076 0A2D mov R16,R10
0078 C3DF rcall _SPI_RW
007A 0B83 std y+3,R16
007C .dbline 71
007C ; Vol.Byte.h_byte =SPI_RW(0xfe);
007C 0EEF ldi R16,254
007E C0DF rcall _SPI_RW
0080 0A83 std y+2,R16
0082 .dbline 72
0082 ; Vol.Byte.m_byte =SPI_RW(0xfe);
0082 0EEF ldi R16,254
0084 BDDF rcall _SPI_RW
0086 A02E mov R10,R16
0088 A982 std y+1,R10
008A .dbline 73
008A ; Vol.Byte.l_byte =SPI_RW(0xfe);
008A 0EEF ldi R16,254
008C B9DF rcall _SPI_RW
008E A02E mov R10,R16
0090 A882 std y+0,R10
0092 .dbline 74
0092 ; Set_CS();
0092 929A sbi 0x12,2
0094 .dbline 76
0094 ;
0094 ; return(Vol.Word);
0094 0881 ldd R16,y+0
0096 1981 ldd R17,y+1
0098 2A81 ldd R18,y+2
009A 3B81 ldd R19,y+3
009C .dbline -2
009C L9:
009C .dbline 0 ; func end
009C 2496 adiw R28,4
009E A990 ld R10,y+
00A0 0895 ret
00A2 .dbsym l Vol 0 S[WORD_BYTE]
00A2 .dbsym r Reg 10 c
00A2 .dbend
00A2 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -