📄 test_isp.s
字号:
.module test_isp.c
.area text(rom, con, rel)
.dbfile H:\m128_test\test_isp.c
.dbfunc e spi_tranByte _spi_tranByte fc
; p -> R20,R21
; addr -> R18,R19
; cData -> R16
.even
_spi_tranByte::
xcall push_gset1
.dbline -1
.dbline 26
; //ICC-AVR application builder : 2005-3-21 10:06:01
; // Target : M128
; // Crystal: 16.000Mhz
;
; #include <iom128v.h>
; #include <macros.h>
; #include <stdio.h>
; #define CH1 1
; #define CH2 2
; #define CH3 4
; #define READY 0XAA
; #define STOP 0X00
; #define TEST 0x1A
;
; extern long len;
; //SPI initialize
; // clock rate: 2000000hz
;
;
;
;
;
;
;
; unsigned char spi_tranByte (unsigned char cData, int addr)
; {
.dbline 28
;
; unsigned char *p = (unsigned char *) addr;
movw R20,R18
.dbline 30
;
; *p = 0x00;
clr R2
movw R30,R20
std z+0,R2
.dbline 31
; SPDR = cData;
out 0xf,R16
L2:
.dbline 32
L3:
.dbline 32
; while (!(SPSR&0x80));
sbis 0xe,7
rjmp L2
.dbline 33
; return SPDR;
in R16,0xf
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r p 20 pc
.dbsym r addr 18 I
.dbsym r cData 16 c
.dbend
.dbfunc e spi_cnt _spi_cnt fL
; temp -> y+0
; buf -> R10
; cha -> R12
.even
_spi_cnt::
xcall push_gset4
mov R12,R16
sbiw R28,4
.dbline -1
.dbline 40
;
; }
;
;
;
; long spi_cnt(unsigned char cha)
; {
.dbline 41
; long temp=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 42
; unsigned char buf=0;
clr R10
.dbline 43
; temp=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 44
; switch (cha)
clr R13
movw R24,R12
cpi R24,1
ldi R30,0
cpc R25,R30
breq L9
cpi R24,2
ldi R30,0
cpc R25,R30
brne X1
xjmp L13
X1:
cpi R24,4
ldi R30,0
cpc R25,R30
brne X2
xjmp L17
X2:
xjmp L6
X0:
.dbline 45
; {
L9:
L10:
.dbline 47
; case CH1: do
; {
.dbline 48
; buf=spi_tranByte (CH1,0X9000);
ldi R18,36864
ldi R19,144
ldi R16,1
xcall _spi_tranByte
mov R10,R16
.dbline 49
; asm ("nop");
nop
.dbline 50
; asm ("nop");
nop
.dbline 51
; asm ("nop");
nop
.dbline 52
; }
L11:
.dbline 53
; while(buf!=READY);
mov R24,R10
cpi R24,170
brne L10
.dbline 54
; delay_nus(100);
ldi R16,100
ldi R17,0
xcall _delay_nus
.dbline 55
; buf=spi_tranByte (CH1,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,1
xcall _spi_tranByte
mov R10,R16
.dbline 56
; temp=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
.dbline 57
; temp=temp*256;
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 59
;
; buf=spi_tranByte (CH1,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,1
xcall _spi_tranByte
mov R10,R16
.dbline 60
; temp=temp+buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 61
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 62
; buf=spi_tranByte (CH1,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,1
xcall _spi_tranByte
mov R10,R16
.dbline 63
; temp=temp+buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 64
; temp*256;
.dbline 65
; buf=spi_tranByte (CH1,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,1
xcall _spi_tranByte
mov R10,R16
.dbline 66
; temp=temp+buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 67
; break;
xjmp L7
L13:
L14:
.dbline 70
;
; case CH2: do
; {
.dbline 71
; buf=spi_tranByte (CH2,0X9000);
ldi R18,36864
ldi R19,144
ldi R16,2
xcall _spi_tranByte
mov R10,R16
.dbline 72
; asm ("nop");
nop
.dbline 73
; asm ("nop");
nop
.dbline 74
; asm ("nop");
nop
.dbline 75
; }
L15:
.dbline 76
; while(buf!=READY);
mov R24,R10
cpi R24,170
brne L14
.dbline 77
; delay_nus(100);
ldi R16,100
ldi R17,0
xcall _delay_nus
.dbline 78
; buf=spi_tranByte (CH2,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,2
xcall _spi_tranByte
mov R10,R16
.dbline 79
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 80
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 81
; buf=spi_tranByte (CH2,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,2
xcall _spi_tranByte
mov R10,R16
.dbline 82
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 83
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 84
; buf=spi_tranByte (CH2,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,2
xcall _spi_tranByte
mov R10,R16
.dbline 85
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 86
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 87
; buf=spi_tranByte (CH2,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,2
xcall _spi_tranByte
mov R10,R16
.dbline 88
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 89
; break;
xjmp L7
L17:
L18:
.dbline 92
;
; case CH3: do
; {
.dbline 93
; buf=spi_tranByte (CH3,0X9000);
ldi R18,36864
ldi R19,144
ldi R16,4
xcall _spi_tranByte
mov R10,R16
.dbline 94
; asm ("nop");
nop
.dbline 95
; asm ("nop");
nop
.dbline 96
; asm ("nop");
nop
.dbline 97
; }
L19:
.dbline 98
; while(buf!=READY);
mov R24,R10
cpi R24,170
brne L18
.dbline 99
; delay_nus(100);
ldi R16,100
ldi R17,0
xcall _delay_nus
.dbline 100
; buf=spi_tranByte (CH3,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,4
xcall _spi_tranByte
mov R10,R16
.dbline 101
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 102
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 103
; buf=spi_tranByte (CH3,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,4
xcall _spi_tranByte
mov R10,R16
.dbline 104
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 105
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 106
; buf=spi_tranByte (CH3,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,4
xcall _spi_tranByte
mov R10,R16
.dbline 107
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 108
; temp=temp*256;
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R20,0
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 109
; buf=spi_tranByte (CH3,0x9000);
ldi R18,36864
ldi R19,144
ldi R16,4
xcall _spi_tranByte
mov R10,R16
.dbline 110
; temp+=buf;
mov R2,R10
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 111
; break;
L6:
L7:
.dbline 116
;
;
;
; }
; len=temp;
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
sts _len+1,R3
sts _len,R2
sts _len+2+1,R5
sts _len+2,R4
.dbline 118
;
; return temp;
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
.dbline -2
L5:
adiw R28,4
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym l temp 0 L
.dbsym r buf 10 c
.dbsym r cha 12 c
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 123
; }
;
;
; void port_init(void)
; {
.dbline 124
; DDRB = 0x07;
ldi R24,7
out 0x17,R24
.dbline 125
; MCUCR |= 0X80;
in R24,0x35
ori R24,128
out 0x35,R24
.dbline 126
; XMCRA = 0X00;
clr R2
sts 109,R2
.dbline 127
; XMCRB = 0X80;
ldi R24,128
sts 108,R24
.dbline -2
.dbline 129
;
; }
L21:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 137
; //SPI initialize
; // clock rate: 4000000hz
;
;
;
;
; void spi_init(void)
; {
.dbline 138
; SPCR = 0x50; //setup SPI
ldi R24,80
out 0xd,R24
.dbline 139
; SPSR = 0x00; //setup SPI
clr R2
out 0xe,R2
.dbline -2
.dbline 140
; }
L22:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_isp_devices _init_isp_devices fV
.even
_init_isp_devices::
.dbline -1
.dbline 144
;
;
; void init_isp_devices(void)
; {
.dbline 146
;
; port_init();
xcall _port_init
.dbline 147
; spi_init();
.dbline -2
.dbline 149
;
; }
L23:
.dbline 0 ; func end
xjmp _spi_init
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -