⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isd1700_spi.lst

📁 ISD1700语音芯片放音的ISP实现
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -