📄 cs5532.s
字号:
.module cs5532.c
.area lit(rom, con, rel)
_ADInitData::
.byte 'A,254
.byte 0,0
.byte 0,254
.byte 0,0
.byte 0,254
.byte 0,0
.byte 0,254
.byte 0,0
.byte 0,'E
.byte 49,192
.byte 49,192
.byte 49,192
.byte 49,192
.byte 49,192
.byte 49,192
.byte 49,192
.byte 49,192
.byte 192
.dbfile E:\mysoft\DH980\cs5532.c
.dbsym e ADInitData _ADInitData A[35:35]kc
_ADResetData::
.byte 254,3
.byte 32,0
.byte 0,0
.dbsym e ADResetData _ADResetData A[6:6]kc
.area text(rom, con, rel)
.dbfile E:\mysoft\DH980\cs5532.c
.dbfunc e AD_delay _AD_delay fV
.even
_AD_delay::
.dbline -1
.dbline 24
; #define _CS5532_C
; #include <iom169v.h>
; #include <macros.h>
; #include <stdio.h>
; #include "main.h"
; #include "cs5532.h"
;
; const unsigned char ADInitData[35]=
; {0x41,
; 0xfe,0x00,0x00,0x00, //通道0
; 0xfe,0x00,0x00,0x00, //通道1
; 0xfe,0x00,0x00,0x00, //通道2
; 0xfe,0x00,0x00,0x00, //通道3
; 0x45, //设置所有通道设置寄存器
; 0x31,0xc0,0x31,0xc0, //0x31:12.5Hz,通道1(1、2脚)
; 0x31,0xc0,0x31,0xc0, //0x71,通道2(19、20脚)
; 0x31,0xc0,0x31,0xc0,
; 0x31,0xc0,0x31,0xc0,
; 0xc0}; //执行多路连续转换
; const unsigned char ADResetData[6]=
; {0xfe,0x03,0x20,0x00,0x00,0x00}; //配置寄存器RS位置1,AD复位
; //cs5532操作IO延时
; void AD_delay(void)
; {
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e AD_write _AD_write fV
; temp -> R20
; i -> R22
; byte -> R22
.even
_AD_write::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 28
; }
; //cs5532写寄存器
; void AD_write(unsigned char byte)
; {
.dbline 30
; unsigned char i,temp;
; temp = byte;
mov R20,R22
.dbline 31
; for(i=0;i<8;i++)
clr R22
xjmp L6
L3:
.dbline 32
; {
.dbline 33
; if(temp&0x80)
sbrs R20,7
rjmp L7
.dbline 34
; SET_SDI; //数据送到SPI的SDI口
sbi 0xe,4
xjmp L8
L7:
.dbline 36
; else
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
L8:
.dbline 37
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 38
sbi 0xe,6
.dbline 39
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 40
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 41
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 42
lsl R20
.dbline 43
L4:
.dbline 31
inc R22
L6:
.dbline 31
cpi R22,8
brlo L3
.dbline 44
; delay_loop(2);
; SET_SCK; //时钟高
; delay_loop(2);
; CLR_SCK; //时钟低
; delay_loop(2);
; temp<<=1;
; }
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline -2
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r byte 22 c
.dbend
.dbfunc e AD_read _AD_read fc
; i -> R20
; data -> R22
.even
_AD_read::
xcall push_gset2
.dbline -1
.dbline 48
; }
; //cs5532读寄存器
; unsigned char AD_read(void)
; {
.dbline 49
; unsigned char i,data=0;
clr R22
.dbline 50
; CLR_SCK;//sclk=0
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 51
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 52
; for(i=0;i<8;i++)
clr R20
xjmp L13
L10:
.dbline 53
; {
.dbline 54
; SET_SCK; //时钟高
sbi 0xe,6
.dbline 55
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 56
; data<<=1;
lsl R22
.dbline 57
; if(SDO)
sbis 0xc,5
rjmp L14
.dbline 58
; data|=0x01;
ori R22,1
xjmp L15
L14:
.dbline 60
; else
; data &= 0xfe;
andi R22,254
L15:
.dbline 61
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 63
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 64
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 65
L11:
.dbline 52
inc R20
L13:
.dbline 52
cpi R20,8
brlo L10
.dbline 66
; delay_loop(2);
;
; CLR_SCK; //时钟低
; delay_loop(2);
; }
; return(data);
mov R16,R22
.dbline -2
L9:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 22 c
.dbend
.dbfunc e Init5532 _Init5532 fV
; data -> R20
; i -> R22
.even
_Init5532::
xcall push_gset2
.dbline -1
.dbline 70
; }
; //初始化cs5532
; void Init5532(void)
; {
.dbline 71
; unsigned char i,data=0;
clr R20
.dbline 72
; SET_CS;
sbi 0xe,3
.dbline 73
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 74
; CLR_CS; //片选使能
in R24,0xe
andi R24,247
out 0xe,R24
.dbline 75
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 76
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline 77
; SET_SDO;
sbi 0xe,5
.dbline 78
; CLR_SCK;
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 79
clr R22
xjmp L20
L17:
.dbline 79
ldi R16,255
xcall _AD_write
L18:
.dbline 79
inc R22
L20:
.dbline 79
; for(i=0;i<15;i++) AD_write(0xff); //初始化序列
cpi R22,15
brlo L17
.dbline 81
clr R22
xjmp L24
L21:
.dbline 81
ldi R24,<_ADResetData
ldi R25,>_ADResetData
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _AD_write
L22:
.dbline 81
inc R22
L24:
.dbline 81
; // AD_write(0xfe);
; for(i=0;i<6;i++) AD_write(ADResetData[i]); //复位cs5532
cpi R22,6
brlo L21
xjmp L26
L25:
.dbline 83
.dbline 84
ldi R16,11
xcall _AD_write
.dbline 85
xcall _AD_read
mov R20,R16
.dbline 86
xcall _AD_read
.dbline 87
xcall _AD_read
.dbline 88
xcall _AD_read
.dbline 89
L26:
.dbline 82
; while(data!=0x10) //等待AD复位
cpi R20,16
brne L25
.dbline 90
; {
; AD_write(0x0b); //读配置寄存器
; data=AD_read();
; AD_read();
; AD_read();
; AD_read();
; }
; for(i=0;i<35;i++)
clr R22
xjmp L31
L28:
.dbline 91
.dbline 92
ldi R24,<_ADInitData
ldi R25,>_ADInitData
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _AD_write
.dbline 93
L29:
.dbline 90
inc R22
L31:
.dbline 90
cpi R22,35
brlo L28
.dbline -2
L16:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r i 22 c
.dbend
.dbfunc e AD_sample _AD_sample fV
; data -> y+0
.even
_AD_sample::
sbiw R28,4
.dbline -1
.dbline 97
; {
; AD_write(ADInitData[i]);
; }
; }
; //cs5532采样
; void AD_sample(void)
; {
.dbline 99
; unsigned char data[4];
; AD_write(0x0c);
ldi R16,12
xcall _AD_write
.dbline 100
; data[3]=0;
clr R2
std y+3,R2
.dbline 101
; data[2]=AD_read();
xcall _AD_read
std y+2,R16
.dbline 102
; data[1]=AD_read();
xcall _AD_read
std y+1,R16
.dbline 103
; data[0]=AD_read();
xcall _AD_read
std y+0,R16
.dbline 104
; AD_read();//状态字节(溢出位和通道指示),没有用到,丢弃.............
xcall _AD_read
.dbline -2
L32:
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l data 0 A[4:4]c
.dbend
.dbfunc e CS5532_Txd _CS5532_Txd fV
; i -> R20
; dat -> R22
.even
_CS5532_Txd::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 107
; }
; void CS5532_Txd(unsigned char dat)//向CS5532写一字节数据
; {
.dbline 109
; unsigned char i;
; CLR_SCK;//时钟低
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 110
; CLR_CS;
in R24,0xe
andi R24,247
out 0xe,R24
.dbline 111
; delay_loop(1);
ldi R16,1
ldi R17,0
xcall _delay_loop
.dbline 112
; for(i=0;i<8;i++)
clr R20
xjmp L40
L37:
.dbline 113
; {
.dbline 114
; if((dat<<i)&0x80)
mov R16,R22
mov R17,R20
xcall lsl8
mov R24,R16
andi R24,128
breq L41
.dbline 115
; SET_SDI; //数据送到SPI的SDI口
sbi 0xe,4
xjmp L42
L41:
.dbline 117
; else
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
L42:
.dbline 118
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 119
sbi 0xe,6
.dbline 120
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 121
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 122
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 123
L38:
.dbline 112
inc R20
L40:
.dbline 112
cpi R20,8
brlo L37
.dbline 124
; delay_loop(2);
; SET_SCK; //时钟高
; delay_loop(2);
; CLR_SCK; //时钟低
; delay_loop(2);
; }
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline -2
L36:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r dat 22 c
.dbend
.dbfunc e CS5532_RXD _CS5532_RXD fl
; c -> y+4
; RxdTxd4b -> y+0
; i -> R12
; j -> R10
.even
_CS5532_RXD::
xcall push_gset4
sbiw R28,8
.dbline -1
.dbline 127
; }
; unsigned long CS5532_RXD(void)
; {
.dbline 131
; unsigned long c;
; unsigned char RxdTxd4b[4];
; unsigned char i,j;
; c=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+4,R20
std z+5,R21
std z+6,R22
std z+7,R23
.dbline 132
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline 133
; for(j=0;j<4;j++)
clr R10
xjmp L47
L44:
.dbline 134
; {
.dbline 135
; for(i=0;i<8;i++)
clr R12
xjmp L51
L48:
.dbline 136
; {
.dbline 137
; SET_SCK; //时钟高
sbi 0xe,6
.dbline 138
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 139
; RxdTxd4b[j]<<=1;
movw R24,R28
mov R2,R10
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R4,z+0
lsl R4
std z+0,R4
.dbline 140
; if(SDO)
sbis 0xc,5
rjmp L52
.dbline 141
; RxdTxd4b[j]|=0x01; //从SDO读取数据
movw R24,R28
mov R2,R10
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
ori R24,1
std z+0,R24
xjmp L53
L52:
.dbline 143
; else
; RxdTxd4b[j]|=0x00; //从SDO读取数据
movw R24,R28
mov R2,R10
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R4,z+0
std z+0,R4
L53:
.dbline 144
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 145
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 146
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 147
L49:
.dbline 135
inc R12
L51:
.dbline 135
mov R24,R12
cpi R24,8
brsh X0
xjmp L48
X0:
.dbline 148
L45:
.dbline 133
inc R10
L47:
.dbline 133
mov R24,R10
cpi R24,4
brsh X1
xjmp L44
X1:
.dbline 149
; delay_loop(2);
; CLR_SCK; //时钟低
; delay_loop(2);
; }
; }
; c |= RxdTxd4b[0];
ldd R2,y+0
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
or R6,R2
or R7,R3
or R8,R4
or R9,R5
movw R30,R28
std z+4,R6
std z+5,R7
std z+6,R8
std z+7,R9
.dbline 150
; c<<=8;
ldi R24,8
ldi R25,0
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R30,R28
std z+4,R16
std z+5,R17
std z+6,R18
std z+7,R19
.dbline 151
; c |= RxdTxd4b[1];
ldd R2,y+1
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
or R6,R2
or R7,R3
or R8,R4
or R9,R5
movw R30,R28
std z+4,R6
std z+5,R7
std z+6,R8
std z+7,R9
.dbline 152
; c<<=8;
ldi R24,8
ldi R25,0
movw R30,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -