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

📄 bu2624.s

📁 sunplus spca514 cdmp3 源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module bu2624.c
	.area eeprom(rom, con, rel)
	.area data(ram, con, rel)
	.area text(rom, con, rel)
	.dbfile D:\avrmcu\AT980\bu2624\bu2624.c
	.dbfunc s soft_delay _soft_delay fI
;              i -> R16
	.even
_soft_delay::
	.dbline -1
	.dbline 75
; //Use SANYO LC72130 PLL Frequency Synthesizer  //dzh 2001/03/23
; #include "..\main.h"
; #include "..\bu1923\bu1923.h"
; #define BU2624
; //#define TEST_IF
; #ifdef BU2624
; #include <iom163.h>
; #include "bu2624.h"
; #include "..\io.h"
; #pragma data:eeprom
; NV_SETTINGS gps;
; #pragma data:data
; unsigned char search_dir;
; extern void MCU_mute(void);
; #ifdef SGJM_RDS
; extern unsigned char rds_status;
; extern unsigned char rds_display_type;
; extern unsigned char display_type;
; extern unsigned char rds_step,pty_is_searching;
; extern RDS_DATA_STRUCT rds_data;
; extern unsigned char rds_dis_string[65];
; #endif
; unsigned char rdelay20ms;
; extern unsigned char g_ui_tmp_msg_cnt;
; #ifdef TTY
; extern BOOL key_is_pressed;
; #endif
; #define AM_BAND      1
; static unsigned int dataout0;
; static unsigned char dataout1;
; static unsigned int  In_Pdata;
; static unsigned int In_Cdata;
; unsigned int radio_count;
; extern unsigned char muted;
; unsigned char radio_is_muted;
; //unsigned int   FMreq_DIVIDER;
; #include <eeprom.h>
; unsigned char autosrch_step;
; unsigned char search_ok;
; 		/*0--search is not ok
; 		 1-- search a station
; 		 2-- full search end;
; 		*/
; //unsigned char radio_delay200ms;
; unsigned char is_autosearching;
; unsigned char is_stereo;
; unsigned char   station_no;
; unsigned char amfm_flag;
; //unsigned char ok_count;
; //unsigned char unok_count;
; //#define  FM_SHIFT    1
; unsigned int freq;
; //unsigned long Ifcount;//Ifcount1;
; void mute_radio(void);
; //extern unsigned char radio_station_changed;
; //unsigned char station_num;
; #define IF_FM 1070
; #define IF_AM 450
; 
; #define IF_CENTER   160
; #define IFM_MIN (IF_FM*160-480+IF_CENTER)
; #define IFM_MAX (IF_FM*160+480+IF_CENTER)
; 
; #define IAM_MIN (IF_AM*16-64)
; #define IAM_MAX (IF_AM*16+64)
; 
; //void ps_restore_amfm();
; //void ps_restore_station();
; //void use_addr_as_io(void);
; void switch_fmam(void);
; #ifdef TTY
; extern void wait_key_pressed(void);
; #endif
; void soft_delay(void)
; {
	.dbline 77
;    register unsigned char i;
;    for(i=0;i<30;i++)
	clr R16
	xjmp L6
L3:
	.dbline 78
	.dbline 79
L4:
	.dbline 77
	inc R16
L6:
	.dbline 77
	cpi R16,30
	brlo L3
	.dbline -2
	.dbline 80
;    {
;    }
; }
L2:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbfunc s init_radio _init_radio fI
	.even
_init_radio::
	sbiw R28,2
	.dbline -1
	.dbline 83
; 
; void init_radio(void)    //default MONO out
; {
	.dbline 92
;    
;   //register unsigned char addr; 
;    //set_dout_in();
;    //radio_stb_lo();
;    //radio_clk_hi();
;    //AMreq_STEP = radio_country[gps->ps_radio_standard].AM_step;  
;    //FMreq_STEP = radio_country[gps->ps_radio_standard].FM_step;  
;    //unsigned int *addr;
;    radio_is_muted = 1;
	ldi R24,1
	sts _radio_is_muted,R24
	.dbline 93
;    mute_radio();
	xcall _mute_radio
	.dbline 94
;    delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 95
;    amfm_flag=EEPROMread((int)&(gps.ps_amfm_flag));
	ldi R16,<_gps
	ldi R17,>_gps
	xcall _EEPROMread
	movw R2,R16
	sts _amfm_flag,R2
	.dbline 96
;    if(amfm_flag)
	tst R2
	breq L8
	.dbline 97
;    {
	.dbline 98
;    		station_no = EEPROMread((int)&(gps.ps_am_no));
	ldi R16,<_gps+3
	ldi R17,>_gps+3
	xcall _EEPROMread
	movw R2,R16
	sts _station_no,R2
	.dbline 99
; 		if(station_no>=MAX_AM_STATION)
	mov R24,R2
	cpi R24,20
	brlo L11
	.dbline 100
; 		{
	.dbline 101
; 		  station_no = 0;
	clr R2
	sts _station_no,R2
	.dbline 102
; 		  EEPROMwrite((int)&(gps.ps_am_no),0);
	clr R18
	ldi R16,<_gps+3
	ldi R17,>_gps+3
	xcall _EEPROMwrite
	.dbline 103
L11:
	.dbline 103
; 		};
	.dbline 104
; 		EEPROM_READ((int)&gps.ps_amfre,freq);
	ldi R24,2
	ldi R25,0
	std y+0,R24
	std y+1,R25
	ldi R18,<_freq
	ldi R19,>_freq
	ldi R16,<_gps+6
	ldi R17,>_gps+6
	xcall _EEPROMReadBytes
	.dbline 106
;    	//station_no = gps.ps_am_no;
;    }
	xjmp L9
L8:
	.dbline 108
;    else
;    {
	.dbline 109
;    		station_no = EEPROMread((int)&(gps.ps_fm_no));
	ldi R16,<_gps+2
	ldi R17,>_gps+2
	xcall _EEPROMread
	movw R2,R16
	sts _station_no,R2
	.dbline 110
; 		if(station_no>=MAX_FM_STATION)
	mov R24,R2
	cpi R24,30
	brlo L16
	.dbline 111
; 		{
	.dbline 112
; 		  station_no = 0;
	clr R2
	sts _station_no,R2
	.dbline 113
; 		  EEPROMwrite((int)&(gps.ps_fm_no),0);
	clr R18
	ldi R16,<_gps+2
	ldi R17,>_gps+2
	xcall _EEPROMwrite
	.dbline 114
L16:
	.dbline 114
; 		};
	.dbline 116
; 		//*addr = &gps.ps_fm_station[station_no];
; 		 EEPROM_READ((int)&gps.ps_fmfre,freq);
	ldi R24,2
	ldi R25,0
	std y+0,R24
	std y+1,R25
	ldi R18,<_freq
	ldi R19,>_freq
	ldi R16,<_gps+4
	ldi R17,>_gps+4
	xcall _EEPROMReadBytes
	.dbline 117
;    }
L9:
	.dbline 123
;   // AMreq_MIN = radio_country[gps->ps_radio_standard].AM_start;
;   // AMreq_MAX = radio_country[gps->ps_radio_standard].AM_end;
;   // FMreq_MIN = radio_country[gps->ps_radio_standard].FM_start;
;   // FMreq_MAX = radio_country[gps->ps_radio_standard].FM_end;
; 
; 	is_autosearching = 0;
	clr R2
	sts _is_autosearching,R2
	.dbline 124
; 	switch_fmam();
	xcall _switch_fmam
	.dbline 125
; 	delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 126
; 	radio_is_muted = 0;
	clr R2
	sts _radio_is_muted,R2
	.dbline 127
; 	mute_radio();
	xcall _mute_radio
	.dbline 130
; 	
; 	#ifdef SGJM_RDS
; 	rds_init();
	xcall _rds_init
	.dbline 131
; 	pty_is_searching = 0;
	clr R2
	sts _pty_is_searching,R2
	.dbline -2
	.dbline 134
; 	#endif
; 	
; }
L7:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbfunc s send_word_to_bu2624 _send_word_to_bu2624 fI
;              i -> R20
;          data1 -> R22,R23
	.even
_send_word_to_bu2624::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 137
; 
; void send_word_to_bu2624( unsigned int data1)
; {
	.dbline 140
;    char i;
;    
;    for( i=0; i<16; i++)
	clr R20
	xjmp L24
L21:
	.dbline 141
;    {
	.dbline 142
;     	radio_clk_lo();
	CBI 0x12,4
	.dbline 143
;        	if( data1 & 0x01)
	movw R24,R22
	andi R24,1
	andi R25,0
	cpi R24,0
	cpc R24,R25
	breq L25
	.dbline 144
;     	{
	.dbline 145
;      		radio_din_hi();
	SBI 0x12,5
	.dbline 146
;        	}
	xjmp L26
L25:
	.dbline 148
;     	else
;     	{
	.dbline 149
;      		radio_din_lo();
	CBI 0x12,5
	.dbline 150
;        	}
L26:
	.dbline 151
	xcall _soft_delay
	.dbline 152
	SBI 0x12,4
	.dbline 153
	lsr R23
	ror R22
	.dbline 154
	xcall _soft_delay
	.dbline 155
L22:
	.dbline 140
	inc R20
L24:
	.dbline 140
	cpi R20,16
	brlo L21
	.dbline -2
	.dbline 156
;     	soft_delay();
;     	radio_clk_hi();
;        	data1 >>= 1;
;     	soft_delay();
;    	}
; }
L20:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r data1 22 i
	.dbfunc s send_cmd_to_bu2624 _send_cmd_to_bu2624 fI
	.even
_send_cmd_to_bu2624::
	.dbline -1
	.dbline 159
; 
; void  send_cmd_to_bu2624(void)
; {
	.dbline 161
;    
;    	 radio_clk_hi();
	SBI 0x12,4
	.dbline 162
;      radio_stb_hi();
	SBI 0x12,0
	.dbline 164
;    
;      soft_delay();
	xcall _soft_delay
	.dbline 165
;      send_word_to_bu2624(In_Pdata);
	lds R17,_In_Pdata+1
	lds R16,_In_Pdata
	xcall _send_word_to_bu2624
	.dbline 166
;      send_word_to_bu2624(In_Cdata);
	lds R17,_In_Cdata+1
	lds R16,_In_Cdata
	xcall _send_word_to_bu2624
	.dbline 167
;      radio_stb_lo();
	CBI 0x12,0
	.dbline -2
	.dbline 168
; }
L27:
	.dbline 0 ; func end
	ret
	.dbfunc s mute_radio _mute_radio fI
	.even
_mute_radio::
	.dbline -1
	.dbline 171
; 
; void mute_radio(void)
; {
	.dbline 172
;  if(radio_is_muted)
	lds R2,_radio_is_muted
	tst R2
	breq L29
	.dbline 173
;  {
	.dbline 174
;  	Enable_IF_OUT();//In_Cdata = In_Cdata&(~P1_IF_NOOUT);
	lds R25,_In_Cdata+1
	lds R24,_In_Cdata
	andi R24,253
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 175
;     muted = 1;
	ldi R24,1
	sts _muted,R24
	.dbline 176
;     MCU_mute();
	xcall _MCU_mute
	.dbline 177
;  }
	xjmp L30
L29:
	.dbline 179
;  else
;  {
	.dbline 180
;  	Disable_IF_OUT();//In_Cdata |= P1_IF_NOOUT;
	lds R25,_In_Cdata+1
	lds R24,_In_Cdata
	ori R24,2
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 181
;  	Enable_SD_OUT();//In_Cdata &=(~(COUNTER_START|IF_COUNTER_16MS));
	andi R24,127
	andi R25,191
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 182
;     muted = 0;  //
	clr R2
	sts _muted,R2
	.dbline 183
;  	MCU_mute();
	xcall _MCU_mute
	.dbline 185
;     
;  }
L30:
	.dbline 186
;  send_cmd_to_bu2624();
	xcall _send_cmd_to_bu2624
	.dbline -2
	.dbline 187
; }
L28:
	.dbline 0 ; func end
	ret
	.dbfunc s read_data_from_bu2624 _read_data_from_bu2624 fI
;         value1 -> R20
;              i -> R22
;          value -> R10,R11
	.even
_read_data_from_bu2624::
	xcall push_gset3
	.dbline -1
	.dbline 190
; 
; void  read_data_from_bu2624()
; {
	.dbline 194
;    	register unsigned int value;
; 	register unsigned char i,value1;
; 	//set_dout_in();
;     radio_stb_lo();
	CBI 0x12,0
	.dbline 195
;     soft_delay();
	xcall _soft_delay
	.dbline 196
;     dataout0 = 0;
	clr R2
	clr R3
	sts _dataout0+1,R3
	sts _dataout0,R2
	.dbline 197
; 	dataout1 = 0;
	sts _dataout1,R2
	.dbline 200
;    	
;  
;     value = 0;
	clr R10
	clr R11
	.dbline 201
;     for(i=0;i<16;i++)
	clr R22
	xjmp L35
L32:
	.dbline 202
; 	{
	.dbline 203
; 		value >>=1;
	lsr R11
	ror R10
	.dbline 204
; 		radio_clk_lo();
	CBI 0x12,4
	.dbline 205
;         soft_delay();
	xcall _soft_delay
	.dbline 206
;         if(radio_dout())  value |= 0x8000;
	sbis 0x10,7
	rjmp L36
	.dbline 206
	movw R24,R10
	ori R25,128
	movw R10,R24
L36:
	.dbline 208
	SBI 0x12,4
	.dbline 209
	xcall _soft_delay
	.dbline 210
L33:
	.dbline 201
	inc R22
L35:
	.dbline 201
	cpi R22,16
	brlo L32
	.dbline 211
; 
;         radio_clk_hi();
;         soft_delay();
;     }
;     dataout0 = value;
	sts _dataout0+1,R11
	sts _dataout0,R10
	.dbline 213
;     
;     value1 = 0;
	clr R20
	.dbline 214
;     for(i=0;i<8;i++)
	clr R22
	xjmp L41
L38:
	.dbline 215
;     {
	.dbline 216
;     	value1 >>=1;
	lsr R20
	.dbline 217
; 		radio_clk_lo();
	CBI 0x12,4
	.dbline 218
;         soft_delay();
	xcall _soft_delay
	.dbline 220
;         
;         if(radio_dout())  value1 |= 0x80;
	sbis 0x10,7
	rjmp L42
	.dbline 220
	ori R20,128
L42:
	.dbline 222
	SBI 0x12,4
	.dbline 223
	xcall _soft_delay
	.dbline 224
L39:
	.dbline 214
	inc R22
L41:
	.dbline 214
	cpi R22,8
	brlo L38
	.dbline 226
; 
;         radio_clk_hi();
;         soft_delay();
;     }
;      
;     dataout1 = value1;
	sts _dataout1,R20
	.dbline -2
	.dbline 227
; }
L31:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r value1 20 c
	.dbsym r i 22 c
	.dbsym r value 10 i
	.dbfunc s switch_audio_channel _switch_audio_channel fI
	.even
_switch_audio_channel::
	.dbline -1
	.dbline 231
; 
; 
; void switch_audio_channel(void)
; {
	.dbline 232
; 	if(is_stereo)
	lds R2,_is_stereo
	tst R2
	breq L45
	.dbline 233
;    	{
	.dbline 234
;     	Set_Stereo();//In_Cdata &= (~P4_MONO);
	lds R25,_In_Cdata+1
	lds R24,_In_Cdata
	andi R24,239
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 235
;    	}
	xjmp L46
L45:
	.dbline 237
;     else
;    	{
	.dbline 238
;    		Set_Mono();//In_Cdata |= P4_MONO;
	lds R25,_In_Cdata+1
	lds R24,_In_Cdata
	ori R24,16
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 239
;    	}
L46:
	.dbline 240
;     send_cmd_to_bu2624();
	xcall _send_cmd_to_bu2624
	.dbline -2
	.dbline 241
; }
L44:
	.dbline 0 ; func end
	ret
	.dbfunc s switch_fmam _switch_fmam fI
	.even
_switch_fmam::
	.dbline -1
	.dbline 244
; 
; void switch_fmam(void)
; {
	.dbline 246
; 	//unsigned char i;
;    	radio_is_muted = 1;
	ldi R24,1
	sts _radio_is_muted,R24
	.dbline 247
;    	if(amfm_flag)
	lds R2,_amfm_flag
	tst R2
	breq L48
	.dbline 248
;    	{
	.dbline 249
; 		if((freq < AMreq_MIN)||(freq > AMreq_MAX))
	lds R25,_freq+1
	lds R24,_freq
	cpi R24,10
	ldi R30,2
	cpc R25,R30
	brlo L52
	ldi R24,1611
	ldi R25,6
	lds R3,_freq+1
	lds R2,_freq
	cp R24,R2
	cpc R25,R3
	brsh L50
L52:
	.dbline 250
; 			freq = AMreq_MIN;
	ldi R24,522
	ldi R25,2
	sts _freq+1,R25
	sts _freq,R24
L50:
	.dbline 261
; 	      
; 	  /*  switch(AMreq_STEP)
; 		{
; 			case 9:
; 			    Rfreq = Rfreq_009KHZ;
; 			    break;
; 			case 10:
; 			     Rfreq = Rfreq_010KHZ;
; 			     break;    
; 		};*/
; 	    In_Cdata = P0_AM | P4_MONO | P3_MUTE | Rfreq_009KHZ| AMIN | IF2 | IF_COUNTER_8MS;
	ldi R24,11537
	ldi R25,45
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 264
;     	//AM:IF_OUT: MUTE ON : MONO:PLL OPERATION: RESET COUNT
;     	//:PLL :AMIN : PS=1:IF2:8MS: TS
;     	In_Pdata = ((freq+IF_AM)/AMreq_STEP)<<4;
	ldi R18,9
	ldi R19,0
	lds R17,_freq+1
	lds R16,_freq
	subi R16,62  ; offset = 450
	sbci R17,254
	xcall div16u
	movw R2,R16
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	sts _In_Pdata+1,R3
	sts _In_Pdata,R2
	.dbline 266
; 		//is_stereo = 0;
; 	}
	xjmp L49
L48:
	.dbline 268
; 	else
; 	{
	.dbline 269
; 		if((freq < FMreq_MIN)||(freq > FMreq_MAX))
	lds R25,_freq+1
	lds R24,_freq
	cpi R24,46
	ldi R30,34
	cpc R25,R30
	brlo L55
	ldi R24,10800
	ldi R25,42
	lds R3,_freq+1
	lds R2,_freq
	cp R24,R2
	cpc R25,R3
	brsh L53
L55:
	.dbline 270
; 			freq = FMreq_MIN;
	ldi R24,8750
	ldi R25,34
	sts _freq+1,R25
	sts _freq,R24
L53:
	.dbline 272
;           	//In_Cdata = 0;
;       	In_Cdata =(unsigned int) (P0_FM |P3_MUTE| Rfreq_025KHZ | FMIN | IF2 | IF_COUNTER_8MS);
	ldi R24,8192
	ldi R25,32
	sts _In_Cdata+1,R25
	sts _In_Cdata,R24
	.dbline 274
;       //FM:IF_OUT:PLL OPERATE:RESET COUNT:PLL: FMIN:PS=X: 16MS
;       	In_Pdata = ((freq+IF_FM)/5);
	ldi R18,5
	ldi R19,0
	lds R17,_freq+1
	lds R16,_freq
	subi R16,210  ; offset = 1070
	sbci R17,251
	xcall div16u
	sts _In_Pdata+1,R17
	sts _In_Pdata,R16
	.dbline 276
	lds R2,_is_stereo
	tst R2
	breq L58
	lds R2,_is_autosearching
	tst R2
	breq L56
L58:
	.dbline 276
;    	  	
;    	  	if(!is_stereo || is_autosearching) In_Cdata |= P4_MONO;
	lds R25,_In_Cdata+1
	lds R24,_In_Cdata

⌨️ 快捷键说明

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