📄 isd1700_spi.lst
字号:
__start:
__text_start:
4B EFCF LDI R28,0xFF
4C E1D0 LDI R29,0x10
4D BFCD OUT 0x3D,R28
4E BFDE OUT 0x3E,R29
4F 58C0 SUBI R28,0x80
50 40D0 SBCI R29,0
51 EA0A LDI R16,0xAA
52 8308 STD Y+0,R16
53 2400 CLR R0
54 E0E9 LDI R30,0x9
55 E0F1 LDI R31,1
56 E011 LDI R17,1
57 30ED CPI R30,0xD
58 07F1 CPC R31,R17
59 F011 BEQ 0x005C
5A 9201 ST R0,Z+
5B CFFB RJMP 0x0057
5C 8300 STD Z+0,R16
5D E8EC LDI R30,0x8C
5E E0F0 LDI R31,0
5F E0A0 LDI R26,0
60 E0B1 LDI R27,1
61 E010 LDI R17,0
62 E000 LDI R16,0
63 BF0B OUT 0x3B,R16
64 39E5 CPI R30,0x95
65 07F1 CPC R31,R17
66 F021 BEQ 0x006B
67 95C8 LPM
68 9631 ADIW R30,1
69 920D ST R0,X+
6A CFF9 RJMP 0x0064
6B 940E 017A CALL _main
_exit:
6D CFFF RJMP _exit
FILE: E:\AVR\ISD1700_ISP\src\main.c
(0001) #include <iom64v.h>
(0002) #include <macros.h>
(0003) #include <string.h>
(0004) #include "timer.h"
(0005) #include "main.h"
(0006)
(0007) unsigned int iProgRunCount=0;
(0008) unsigned int soundTime=0;
(0009) unsigned char data1,data2,data3,data4;
(0010)
(0011) // 端口初始化函数
(0012) void Port_Init(void)
(0013) {
(0014) PORTA = 0x00;
_Port_Init:
6E 2422 CLR R2
6F BA2B OUT 0x1B,R2
(0015) DDRA = 0x00;
70 BA2A OUT 0x1A,R2
(0016) PORTB = 0x01;
71 E081 LDI R24,1
72 BB88 OUT 0x18,R24
(0017) DDRB = 0xE7;
73 EE87 LDI R24,0xE7
74 BB87 OUT 0x17,R24
(0018) PORTC = 0x00;
75 BA25 OUT 0x15,R2
(0019) DDRC = 0x00;
76 BA24 OUT 0x14,R2
(0020) PORTD = 0x00;
77 BA22 OUT 0x12,R2
(0021) DDRD = 0xC0;
78 EC80 LDI R24,0xC0
79 BB81 OUT 0x11,R24
(0022) PORTE = 0x00;
7A B823 OUT 0x03,R2
(0023) DDRE = 0x00;
7B B822 OUT 0x02,R2
(0024) PORTF = 0x00;
7C 9220 0062 STS 0x0062,R2
(0025) DDRF = 0x00;
7E 9220 0061 STS 0x0061,R2
(0026) PORTG = 0x00;
80 9220 0065 STS 0x0065,R2
(0027) DDRG = 0x00;
82 9220 0064 STS 0x0064,R2
84 9508 RET
(0028) }
(0029)
(0030) //SPI initialize
(0031) // clock rate: 1000000hz
(0032) void spi_init(void)
(0033) {
(0034) //int i;
(0035) SPCR = 0x7e; //setup SPI
_spi_init:
85 E78E LDI R24,0x7E
86 B98D OUT 0x0D,R24
(0036) SPSR = 0x00; //setup SPI
87 2422 CLR R2
88 B82E OUT 0x0E,R2
(0037) PORTB |= (1<<PB0); //SS=1
89 9AC0 SBI 0x18,0
8A 9508 RET
(0038) }
(0039)
(0040) //call this routine to initialise all peripherals
(0041) void init_devices(void)
(0042) {
(0043) //unsigned char temp=0;
(0044) //stop errant interrupts until set up
(0045) CLI(); //disable all interrupts
_init_devices:
8B 94F8 BCLR 7
(0046) XDIV = 0x00; //xtal divider
8C 2422 CLR R2
8D BE2C OUT 0x3C,R2
(0047) XMCRA = 0x40; //external memory
8E E480 LDI R24,0x40
8F 9380 006D STS 0x006D,R24
(0048) Port_Init();
91 DFDC RCALL _Port_Init
(0049) watchdog_init();
92 940E 01C9 CALL _watchdog_init
(0050) timer1_init();
94 940E 01CF CALL _timer1_init
(0051) spi_init();
96 DFEE RCALL _spi_init
(0052)
(0053) MCUCR = (1 << SRE); //0x80,外部存储使能
97 E880 LDI R24,0x80
98 BF85 OUT 0x35,R24
(0054) //EICRA:外部中断3-0敏感电平控制BIT7--0:ISC31|ISC30......ISC01|ISC00
(0055) //ISCn1|ISCn0:00-低电平触发,01-保留,10-下降沿触发,11-上升沿触发
(0056) EICRA = 0x02;
99 E082 LDI R24,2
9A 9380 006A STS 0x006A,R24
(0057) //EICRB:外部中断7-4敏感电平控制BIT7--0:ISC71|ISC70......ISC41|ISC40
(0058) //ISCn1|ISCn0:00-低电平触发,01-任意逻辑电平变化,10-两次采用发生下降沿就触发,11-两次采用发生上升沿就触发
(0059) EICRB = 0x00;
9C 2422 CLR R2
9D BE2A OUT 0x3A,R2
(0060) EIMSK = 0x01; //外部中断屏蔽寄存器BIT7--0:INT7--INT0,1使能0关闭
9E E081 LDI R24,1
9F BF89 OUT 0x39,R24
(0061) //TIMSK:定时器中断屏蔽寄存器BIT7--0:OCIE2|TOIE2|TICIE1|OCIE1A|OCIE1B|TOIE1|OCIE0|TOIE0
(0062) TIMSK = (1 << TOIE1); //0x04
A0 E084 LDI R24,4
A1 BF87 OUT 0x37,R24
(0063) //ETIMSK:扩展定时器中断屏蔽寄存器BIT7--0:--|--|TICIE3|OCIE3A|OCIE3B|TOIE3|OCIE3C|OCIE1C
(0064) ETIMSK = 0x00; //(1<<TOIE3); //0x04
A2 9220 007D STS 0x007D,R2
(0065) SEI(); //re-enable interrupts
A4 9478 BSET 7
A5 9508 RET
(0066) //all peripherals are now initialised
(0067) }
(0068)
(0069) void isd1700_init(void)
(0070) {
(0071) int i;
(0072) for(i=0;i<=100;i++);
_isd1700_init:
i --> R16
A6 2700 CLR R16
A7 2711 CLR R17
A8 5F0F SUBI R16,0xFF
A9 4F1F SBCI R17,0xFF
AA E684 LDI R24,0x64
AB E090 LDI R25,0
AC 1780 CP R24,R16
AD 0791 CPC R25,R17
AE F7CC BGE 0x00A8
(0073) //芯片上电
(0074) PORTB &= ~(1<<PB0); //SS=0
AF 98C0 CBI 0x18,0
(0075) for(i=0;i<100;i++)
B0 2700 CLR R16
B1 2711 CLR R17
B2 5F0F SUBI R16,0xFF
B3 4F1F SBCI R17,0xFF
B4 3604 CPI R16,0x64
B5 E0E0 LDI R30,0
B6 071E CPC R17,R30
B7 F3D4 BLT 0x00B2
(0076) ;
(0077) SPDR = 0x10+0x01;
B8 E181 LDI R24,0x11
B9 B98F OUT 0x0F,R24
(0078) while (!(SPSR &(1 << SPIF)))
BA 9B77 SBIS 0x0E,7
BB CFFE RJMP 0x00BA
(0079) ;
(0080) SPDR = 0x00;
BC 2422 CLR R2
BD B82F OUT 0x0F,R2
(0081) while (!(SPSR &(1 << SPIF)))
BE 9B77 SBIS 0x0E,7
BF CFFE RJMP 0x00BE
(0082) ;
(0083) for(i=0;i<100;i++)
C0 2700 CLR R16
C1 2711 CLR R17
C2 5F0F SUBI R16,0xFF
C3 4F1F SBCI R17,0xFF
C4 3604 CPI R16,0x64
C5 E0E0 LDI R30,0
C6 071E CPC R17,R30
C7 F3D4 BLT 0x00C2
(0084) ;
(0085) PORTB |= (1<<PB0); //SS=1
C8 9AC0 SBI 0x18,0
(0086) for(i=0;i<=100;i++);
C9 2700 CLR R16
CA 2711 CLR R17
CB 5F0F SUBI R16,0xFF
CC 4F1F SBCI R17,0xFF
CD E684 LDI R24,0x64
CE E090 LDI R25,0
CF 1780 CP R24,R16
D0 0791 CPC R25,R17
D1 F7CC BGE 0x00CB
(0087) //设置APC寄存器
(0088) PORTB &= ~(1<<PB0); //SS=0
D2 98C0 CBI 0x18,0
(0089) for(i=0;i<100;i++)
D3 2700 CLR R16
D4 2711 CLR R17
D5 5F0F SUBI R16,0xFF
D6 4F1F SBCI R17,0xFF
D7 3604 CPI R16,0x64
D8 E0E0 LDI R30,0
D9 071E CPC R17,R30
DA F3D4 BLT 0x00D5
(0090) ;
(0091) SPDR = 0x10+0x45;
DB E585 LDI R24,0x55
DC B98F OUT 0x0F,R24
(0092) while (!(SPSR &(1 << SPIF)))
DD 9B77 SBIS 0x0E,7
DE CFFE RJMP 0x00DD
(0093) ;
(0094) SPDR = 0x40;
DF E480 LDI R24,0x40
E0 B98F OUT 0x0F,R24
(0095) while (!(SPSR &(1 << SPIF)))
E1 9B77 SBIS 0x0E,7
E2 CFFE RJMP 0x00E1
(0096) ;
(0097) SPDR = 0x0c;
E3 E08C LDI R24,0xC
E4 B98F OUT 0x0F,R24
(0098) while (!(SPSR &(1 << SPIF)))
E5 9B77 SBIS 0x0E,7
E6 CFFE RJMP 0x00E5
(0099) ;
(0100) PORTB |= (1<<PB0); //SS=1
E7 9AC0 SBI 0x18,0
(0101) for(i=0;i<=100;i++);
E8 2700 CLR R16
E9 2711 CLR R17
EA 5F0F SUBI R16,0xFF
EB 4F1F SBCI R17,0xFF
EC E684 LDI R24,0x64
ED E090 LDI R25,0
EE 1780 CP R24,R16
EF 0791 CPC R25,R17
F0 F7CC BGE 0x00EA
F1 9508 RET
(0102) }
(0103)
(0104) void Read_APC(void)
(0105) {
(0106) int i;
(0107) PORTB &= ~(1<<PB0); //SS=0
_Read_APC:
i --> R16
F2 98C0 CBI 0x18,0
(0108) for(i=0;i<100;i++)
F3 2700 CLR R16
F4 2711 CLR R17
F5 5F0F SUBI R16,0xFF
F6 4F1F SBCI R17,0xFF
F7 3604 CPI R16,0x64
F8 E0E0 LDI R30,0
F9 071E CPC R17,R30
FA F3D4 BLT 0x00F5
(0109) ;
(0110) SPDR = 0x10+0x44;
FB E584 LDI R24,0x54
FC B98F OUT 0x0F,R24
(0111) while (!(SPSR &(1 << SPIF)))
FD 9B77 SBIS 0x0E,7
FE CFFE RJMP 0x00FD
(0112) ;
(0113) data1=SPDR;
FF B02F IN R2,0x0F
100 9220 010C STS data1,R2
(0114) SPDR = 0x00;
102 2422 CLR R2
103 B82F OUT 0x0F,R2
(0115) while (!(SPSR &(1 << SPIF)))
104 9B77 SBIS 0x0E,7
105 CFFE RJMP 0x0104
(0116) ;
(0117) data2=SPDR;
106 B02F IN R2,0x0F
107 9220 010B STS data2,R2
(0118) SPDR = 0x00;
109 2422 CLR R2
10A B82F OUT 0x0F,R2
(0119) while (!(SPSR &(1 << SPIF)))
10B 9B77 SBIS 0x0E,7
10C CFFE RJMP 0x010B
(0120) ;
(0121) data3=SPDR;
10D B02F IN R2,0x0F
10E 9220 010A STS data3,R2
(0122) SPDR = 0x00;
110 2422 CLR R2
111 B82F OUT 0x0F,R2
(0123) while (!(SPSR &(1 << SPIF)))
112 9B77 SBIS 0x0E,7
113 CFFE RJMP 0x0112
(0124) ;
(0125) data4=SPDR;
114 B02F IN R2,0x0F
115 9220 0109 STS data4,R2
(0126)
(0127) if(data4==0x0c)
117 2D82 MOV R24,R2
118 308C CPI R24,0xC
119 F409 BNE 0x011B
(0128) RUN2_ON();
11A 9AC6 SBI 0x18,6
(0129)
(0130) for(i=0;i<100;i++)
11B 2700 CLR R16
11C 2711 CLR R17
11D 5F0F SUBI R16,0xFF
11E 4F1F SBCI R17,0xFF
11F 3604 CPI R16,0x64
120 E0E0 LDI R30,0
121 071E CPC R17,R30
122 F3D4 BLT 0x011D
(0131) ;
(0132) PORTB |= (1<<PB0); //SS=1
123 9AC0 SBI 0x18,0
124 9508 RET
(0133) }
(0134)
(0135) void Sound_Flay(void)
(0136) {
(0137) int i;
(0138) PORTB &= ~(1<<PB0); //SS=0
_Sound_Flay:
i --> R16
125 98C0 CBI 0x18,0
(0139) for(i=0;i<100;i++)
126 2700 CLR R16
127 2711 CLR R17
128 5F0F SUBI R16,0xFF
129 4F1F SBCI R17,0xFF
12A 3604 CPI R16,0x64
12B E0E0 LDI R30,0
12C 071E CPC R17,R30
12D F3D4 BLT 0x0128
(0140) ;
(0141) SPDR = 0x10+0x40;
12E E580 LDI R24,0x50
12F B98F OUT 0x0F,R24
(0142) while (!(SPSR &(1 << SPIF)))
130 9B77 SBIS 0x0E,7
131 CFFE RJMP 0x0130
(0143) ;
(0144) data1=SPDR;
132 B02F IN R2,0x0F
133 9220 010C STS data1,R2
(0145) SPDR = 0x00;
135 2422 CLR R2
136 B82F OUT 0x0F,R2
(0146) while (!(SPSR &(1 << SPIF)))
137 9B77 SBIS 0x0E,7
138 CFFE RJMP 0x0137
(0147) ;
(0148) data2=SPDR;
139 B02F IN R2,0x0F
13A 9220 010B STS data2,R2
(0149)
(0150) for(i=0;i<100;i++)
13C 2700 CLR R16
13D 2711 CLR R17
13E 5F0F SUBI R16,0xFF
13F 4F1F SBCI R17,0xFF
140 3604 CPI R16,0x64
141 E0E0 LDI R30,0
142 071E CPC R17,R30
143 F3D4 BLT 0x013E
(0151) ;
(0152) PORTB |= (1<<PB0); //SS=1
144 9AC0 SBI 0x18,0
145 9508 RET
_Sound_SetFlay:
i --> R20
startAdd --> R16
146 934A ST R20,-Y
147 935A ST R21,-Y
(0153) }
(0154)
(0155) void Sound_SetFlay(unsigned int startAdd)
(0156) {
(0157) int i;
(0158) PORTB &= ~(1<<PB0); //SS=0
148 98C0 CBI 0x18,0
(0159) for(i=0;i<100;i++)
149 2744 CLR R20
14A 2755 CLR R21
14B 5F4F SUBI R20,0xFF
14C 4F5F SBCI R21,0xFF
14D 3644 CPI R20,0x64
14E E0E0 LDI R30,0
14F 075E CPC R21,R30
150 F3D4 BLT 0x014B
(0160) ;
(0161) SPDR = 0x10+0x80; //cmd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -