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

📄 main.s

📁 ISD1700语音芯片放音的ISP实现
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile E:\AVR\ISD1700_ISP\src\main.c
	.area data(ram, con, rel)
	.dbfile E:\AVR\ISD1700_ISP\src\main.c
_iProgRunCount::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\AVR\ISD1700_ISP\src\main.c
	.dbsym e iProgRunCount _iProgRunCount i
_soundTime::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\AVR\ISD1700_ISP\src\main.c
	.dbsym e soundTime _soundTime i
	.area text(rom, con, rel)
	.dbfile E:\AVR\ISD1700_ISP\src\main.c
	.dbfunc e Port_Init _Port_Init fV
	.even
_Port_Init::
	.dbline -1
	.dbline 13
; #include <iom64v.h>
; #include <macros.h>
; #include <string.h>
; #include "timer.h"
; #include "main.h"
; 
; unsigned int iProgRunCount=0;
; unsigned int soundTime=0;
; unsigned char data1,data2,data3,data4;
; 
; // 端口初始化函数
; void Port_Init(void)
; {
	.dbline 14
;     PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 15
;     DDRA = 0x00;
	out 0x1a,R2
	.dbline 16
;     PORTB = 0x01;
	ldi R24,1
	out 0x18,R24
	.dbline 17
;     DDRB = 0xE7;
	ldi R24,231
	out 0x17,R24
	.dbline 18
;     PORTC = 0x00;
	out 0x15,R2
	.dbline 19
;     DDRC = 0x00;
	out 0x14,R2
	.dbline 20
;     PORTD = 0x00;
	out 0x12,R2
	.dbline 21
;     DDRD = 0xC0;
	ldi R24,192
	out 0x11,R24
	.dbline 22
;     PORTE = 0x00;
	out 0x3,R2
	.dbline 23
;     DDRE = 0x00;
	out 0x2,R2
	.dbline 24
;     PORTF = 0x00;
	sts 98,R2
	.dbline 25
;     DDRF = 0x00;
	sts 97,R2
	.dbline 26
;     PORTG = 0x00;
	sts 101,R2
	.dbline 27
;     DDRG = 0x00;
	sts 100,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e spi_init _spi_init fV
	.even
_spi_init::
	.dbline -1
	.dbline 33
; }
; 
; //SPI initialize
; // clock rate: 1000000hz
; void spi_init(void)
; {
	.dbline 35
;     //int i;
;     SPCR = 0x7e; //setup SPI
	ldi R24,126
	out 0xd,R24
	.dbline 36
;     SPSR = 0x00; //setup SPI
	clr R2
	out 0xe,R2
	.dbline 37
;     PORTB |= (1<<PB0);	//SS=1
	sbi 0x18,0
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 42
; }
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 45
;     //unsigned char temp=0;
;     //stop errant interrupts until set up
;     CLI(); //disable all interrupts
	cli
	.dbline 46
;     XDIV = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
	.dbline 47
;     XMCRA = 0x40; //external memory
	ldi R24,64
	sts 109,R24
	.dbline 48
;     Port_Init();
	xcall _Port_Init
	.dbline 49
;     watchdog_init();
	xcall _watchdog_init
	.dbline 50
;     timer1_init();
	xcall _timer1_init
	.dbline 51
;     spi_init();
	xcall _spi_init
	.dbline 53
; 
;     MCUCR = (1 << SRE); //0x80,外部存储使能
	ldi R24,128
	out 0x35,R24
	.dbline 56
;     //EICRA:外部中断3-0敏感电平控制BIT7--0:ISC31|ISC30......ISC01|ISC00
;     //ISCn1|ISCn0:00-低电平触发,01-保留,10-下降沿触发,11-上升沿触发
;     EICRA = 0x02;
	ldi R24,2
	sts 106,R24
	.dbline 59
;     //EICRB:外部中断7-4敏感电平控制BIT7--0:ISC71|ISC70......ISC41|ISC40
;     //ISCn1|ISCn0:00-低电平触发,01-任意逻辑电平变化,10-两次采用发生下降沿就触发,11-两次采用发生上升沿就触发
;     EICRB = 0x00;
	clr R2
	out 0x3a,R2
	.dbline 60
;     EIMSK = 0x01; //外部中断屏蔽寄存器BIT7--0:INT7--INT0,1使能0关闭
	ldi R24,1
	out 0x39,R24
	.dbline 62
;     //TIMSK:定时器中断屏蔽寄存器BIT7--0:OCIE2|TOIE2|TICIE1|OCIE1A|OCIE1B|TOIE1|OCIE0|TOIE0
;     TIMSK = (1 << TOIE1); //0x04
	ldi R24,4
	out 0x37,R24
	.dbline 64
;     //ETIMSK:扩展定时器中断屏蔽寄存器BIT7--0:--|--|TICIE3|OCIE3A|OCIE3B|TOIE3|OCIE3C|OCIE1C
;     ETIMSK = 0x00; //(1<<TOIE3);	//0x04
	sts 125,R2
	.dbline 65
;     SEI(); //re-enable interrupts
	sei
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e isd1700_init _isd1700_init fV
;              i -> R16,R17
	.even
_isd1700_init::
	.dbline -1
	.dbline 70
;     //all peripherals are now initialised
; }
; 
; void isd1700_init(void)
; {
	.dbline 72
; 	int i;
; 	for(i=0;i<=100;i++);
	clr R16
	clr R17
L5:
	.dbline 72
L6:
	.dbline 72
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 72
	ldi R24,100
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brge L5
X0:
	.dbline 74
;     //芯片上电
; 	PORTB &= ~(1<<PB0);	//SS=0
	cbi 0x18,0
	.dbline 75
;     for(i=0;i<100;i++)
	clr R16
	clr R17
L9:
	.dbline 76
;     	;
L10:
	.dbline 75
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 75
	cpi R16,100
	ldi R30,0
	cpc R17,R30
	brlt L9
X1:
	.dbline 77
;     SPDR = 0x10+0x01;
	ldi R24,17
	out 0xf,R24
L13:
	.dbline 79
;     while (!(SPSR &(1 << SPIF)))
;         ;
L14:
	.dbline 78
	sbis 0xe,7
	rjmp L13
X2:
	.dbline 80
; 	SPDR = 0x00;
	clr R2
	out 0xf,R2
L16:
	.dbline 82
;     while (!(SPSR &(1 << SPIF)))
;         ;
L17:
	.dbline 81
	sbis 0xe,7
	rjmp L16
X3:
	.dbline 83
; 	for(i=0;i<100;i++)
	clr R16
	clr R17
L19:
	.dbline 84
;     	;
L20:
	.dbline 83
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 83
	cpi R16,100
	ldi R30,0
	cpc R17,R30
	brlt L19
X4:
	.dbline 85
;     PORTB |= (1<<PB0);	//SS=1
	sbi 0x18,0
	.dbline 86
;     for(i=0;i<=100;i++);
	clr R16
	clr R17
L23:
	.dbline 86
L24:
	.dbline 86
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 86
	ldi R24,100
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brge L23
X5:
	.dbline 88
;     //设置APC寄存器
;     PORTB &= ~(1<<PB0);	//SS=0
	cbi 0x18,0
	.dbline 89
;     for(i=0;i<100;i++)
	clr R16
	clr R17
L27:
	.dbline 90
;     	;
L28:
	.dbline 89
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 89
	cpi R16,100
	ldi R30,0
	cpc R17,R30
	brlt L27
X6:
	.dbline 91
;     SPDR = 0x10+0x45;
	ldi R24,85
	out 0xf,R24
L31:
	.dbline 93
;     while (!(SPSR &(1 << SPIF)))
;         ;
L32:
	.dbline 92
	sbis 0xe,7
	rjmp L31
X7:
	.dbline 94
; 	SPDR = 0x40;
	ldi R24,64
	out 0xf,R24
L34:
	.dbline 96
;     while (!(SPSR &(1 << SPIF)))
;         ;
L35:
	.dbline 95
	sbis 0xe,7
	rjmp L34
X8:
	.dbline 97
;     SPDR = 0x0c;
	ldi R24,12
	out 0xf,R24
L37:
	.dbline 99
;     while (!(SPSR &(1 << SPIF)))
;         ;
L38:
	.dbline 98
	sbis 0xe,7
	rjmp L37
X9:
	.dbline 100
; 	PORTB |= (1<<PB0);	//SS=1
	sbi 0x18,0
	.dbline 101
;     for(i=0;i<=100;i++);
	clr R16
	clr R17
L40:
	.dbline 101
L41:
	.dbline 101
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 101
	ldi R24,100
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brge L40
X10:
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 I
	.dbend
	.dbfunc e Read_APC _Read_APC fV
;              i -> R16,R17
	.even
_Read_APC::
	.dbline -1
	.dbline 105
; }
; 
; void Read_APC(void)
; {
	.dbline 107
; 	int i;
;     PORTB &= ~(1<<PB0);	//SS=0
	cbi 0x18,0
	.dbline 108
;     for(i=0;i<100;i++)
	clr R16
	clr R17
L45:
	.dbline 109
;     	;
L46:
	.dbline 108
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 108
	cpi R16,100
	ldi R30,0
	cpc R17,R30
	brlt L45
X11:
	.dbline 110
;     SPDR = 0x10+0x44;
	ldi R24,84
	out 0xf,R24
L49:
	.dbline 112
;     while (!(SPSR &(1 << SPIF)))
;         ;
L50:
	.dbline 111
	sbis 0xe,7
	rjmp L49
X12:
	.dbline 113
; 	data1=SPDR;
	in R2,0xf
	sts _data1,R2
	.dbline 114
;     SPDR = 0x00;
	clr R2
	out 0xf,R2
L52:
	.dbline 116
;     while (!(SPSR &(1 << SPIF)))
;         ;
L53:
	.dbline 115
	sbis 0xe,7
	rjmp L52
X13:
	.dbline 117
; 	data2=SPDR;
	in R2,0xf
	sts _data2,R2
	.dbline 118
; 	SPDR = 0x00;
	clr R2
	out 0xf,R2
L55:
	.dbline 120
;     while (!(SPSR &(1 << SPIF)))
;         ;
L56:
	.dbline 119
	sbis 0xe,7
	rjmp L55
X14:
	.dbline 121
; 	data3=SPDR;
	in R2,0xf
	sts _data3,R2
	.dbline 122
; 	SPDR = 0x00;
	clr R2
	out 0xf,R2
L58:
	.dbline 124
;     while (!(SPSR &(1 << SPIF)))
;         ;
L59:
	.dbline 123
	sbis 0xe,7
	rjmp L58
X15:
	.dbline 125
; 	data4=SPDR;
	in R2,0xf

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -