📄 si4700.lss
字号:
172: 9c 99 sbic 0x13, 4 ; 19
174: b7 cf rjmp .-146 ; 0xe4 <OperationSi4700_2w+0x62>
}
scl(0);
176: ad 98 cbi 0x15, 5 ; 21
178: 1f 5f subi r17, 0xFF ; 255
17a: 21 96 adiw r28, 0x01 ; 1
17c: 11 96 adiw r26, 0x01 ; 1
17e: 14 17 cp r17, r20
180: 08 f4 brcc .+2 ; 0x184 <OperationSi4700_2w+0x102>
182: bb cf rjmp .-138 ; 0xfa <OperationSi4700_2w+0x78>
//_delay_us(2);
}
/****************************
STOP: make sure here: SCLK = 0
*****************************/
STOP:
BIT_SET(DDRC,4);
184: a4 9a sbi 0x14, 4 ; 20
sda(0)
186: ac 98 cbi 0x15, 4 ; 21
scl(1)
188: ad 9a sbi 0x15, 5 ; 21
sda(1)
18a: ac 9a sbi 0x15, 4 ; 21
//_delay_us(2);
return(error);
}
18c: 80 2f mov r24, r16
18e: 99 27 eor r25, r25
190: df 91 pop r29
192: cf 91 pop r28
194: 1f 91 pop r17
196: 0f 91 pop r16
198: 08 95 ret
0000019a <Si4700_Intialization>:
UINT32 g_bandl=87500,g_bandh=108000;
UINT8 g_space=100,g_vol_level=0x08;
/**************************************
Si4700_Intialization():
after initialization please make sure(FW/B15):
0x00: 0x1242
0x01: 0x080F/0A0F
0x07: 0x3C04
0x08: 0x0008
0x09: 0x0001
***************************************/
void Si4700_Intialization(void)
{
19a: cf 92 push r12
19c: df 92 push r13
19e: ef 92 push r14
1a0: ff 92 push r15
1a2: 0f 93 push r16
1a4: 1f 93 push r17
1a6: cf 93 push r28
1a8: df 93 push r29
1aa: cd b7 in r28, 0x3d ; 61
1ac: de b7 in r29, 0x3e ; 62
1ae: a8 97 sbiw r28, 0x28 ; 40
1b0: 0f b6 in r0, 0x3f ; 63
1b2: f8 94 cli
1b4: de bf out 0x3e, r29 ; 62
1b6: 0f be out 0x3f, r0 ; 63
1b8: cd bf out 0x3d, r28 ; 61
unsigned char si4700_initialization[] = {0x40,0x01,0x00,0x00,0x90,0x04,0x0c,0x18,0x00,0x20,0x81,0x00};
1ba: 6e 01 movw r12, r28
1bc: 08 94 sec
1be: c1 1c adc r12, r1
1c0: d1 1c adc r13, r1
1c2: d6 01 movw r26, r12
1c4: ea e6 ldi r30, 0x6A ; 106
1c6: f0 e0 ldi r31, 0x00 ; 0
1c8: 8c e0 ldi r24, 0x0C ; 12
1ca: 01 90 ld r0, Z+
1cc: 0d 92 st X+, r0
1ce: 81 50 subi r24, 0x01 ; 1
1d0: e1 f7 brne .-8 ; 0x1ca <Si4700_Intialization+0x30>
unsigned char error_ind = 0,reg_data[28]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},i;
1d2: 3d e0 ldi r19, 0x0D ; 13
1d4: e3 2e mov r14, r19
1d6: f1 2c mov r15, r1
1d8: ec 0e add r14, r28
1da: fd 1e adc r15, r29
1dc: 8c e1 ldi r24, 0x1C ; 28
1de: f7 01 movw r30, r14
1e0: 11 92 st Z+, r1
1e2: 8a 95 dec r24
1e4: e9 f7 brne .-6 ; 0x1e0 <Si4700_Intialization+0x46>
g_vol_level=si4700_initialization[7]&0xf;
1e6: 88 85 ldd r24, Y+8 ; 0x08
1e8: 8f 70 andi r24, 0x0F ; 15
1ea: 80 93 60 00 sts 0x0060, r24
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
__ticks = 0; /* i.e. 65536 */
1ee: 00 e0 ldi r16, 0x00 ; 0
1f0: 10 e0 ldi r17, 0x00 ; 0
1f2: c8 01 movw r24, r16
1f4: 01 97 sbiw r24, 0x01 ; 1
1f6: f1 f7 brne .-4 ; 0x1f4 <Si4700_Intialization+0x5a>
if(si4700_initialization[7]&0xc0==0x00){
g_bandl=87500;
g_bandh=108000;
}
else if(si4700_initialization[7]&0xc0==0x40){
g_bandl=76000;
g_bandh=108000;
}
else if(si4700_initialization[7]&0xc0==0x80){
g_bandl=76000;
g_bandh=90000;
}
if(si4700_initialization[7]&0x30==0x00){
g_space=200;
}
else if(si4700_initialization[7]&0x30==0x10){
g_space=100;
}
else if(si4700_initialization[7]&0x30==0x20){
g_space=50;
}
_delay_ms(100);
ResetSi4700_2w();
1f8: 3b df rcall .-394 ; 0x70 <ResetSi4700_2w>
error_ind = OperationSi4700_2w(WRITE, &(si4700_initialization[0]), 12);
1fa: 4c e0 ldi r20, 0x0C ; 12
1fc: be 01 movw r22, r28
1fe: 6f 5f subi r22, 0xFF ; 255
200: 7f 4f sbci r23, 0xFF ; 255
202: 80 e2 ldi r24, 0x20 ; 32
204: 3e df rcall .-388 ; 0x82 <OperationSi4700_2w>
if(error_ind)
206: 88 23 and r24, r24
208: a1 f4 brne .+40 ; 0x232 <Si4700_Intialization+0x98>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
20a: c8 01 movw r24, r16
20c: 01 97 sbiw r24, 0x01 ; 1
20e: f1 f7 brne .-4 ; 0x20c <Si4700_Intialization+0x72>
return;
_delay_ms(100);
/////////////////
error_ind = OperationSi4700_2w(READ, reg_data, 26);
210: 4a e1 ldi r20, 0x1A ; 26
212: b7 01 movw r22, r14
214: 81 e2 ldi r24, 0x21 ; 33
216: 35 df rcall .-406 ; 0x82 <OperationSi4700_2w>
if(error_ind)
218: 88 23 and r24, r24
21a: 59 f4 brne .+22 ; 0x232 <Si4700_Intialization+0x98>
return;
for(i=0;i<26;i++){
21c: 98 2f mov r25, r24
while(!(UCSRA & (1<<UDRE)));//等待发送缓冲器为空
21e: 5d 9b sbis 0x0b, 5 ; 11
220: fe cf rjmp .-4 ; 0x21e <Si4700_Intialization+0x84>
UDR=reg_data[i];
222: f6 01 movw r30, r12
224: e9 0f add r30, r25
226: f1 1d adc r31, r1
228: 84 85 ldd r24, Z+12 ; 0x0c
22a: 8c b9 out 0x0c, r24 ; 12
22c: 9f 5f subi r25, 0xFF ; 255
22e: 9a 31 cpi r25, 0x1A ; 26
230: b0 f3 brcs .-20 ; 0x21e <Si4700_Intialization+0x84>
232: a8 96 adiw r28, 0x28 ; 40
234: 0f b6 in r0, 0x3f ; 63
236: f8 94 cli
238: de bf out 0x3e, r29 ; 62
23a: 0f be out 0x3f, r0 ; 63
23c: cd bf out 0x3d, r28 ; 61
23e: df 91 pop r29
240: cf 91 pop r28
242: 1f 91 pop r17
244: 0f 91 pop r16
246: ff 90 pop r15
248: ef 90 pop r14
24a: df 90 pop r13
24c: cf 90 pop r12
24e: 08 95 ret
00000250 <Si4700_Channel_Selection>:
}
//////////
}
/**************************************
Si4700_Channel_Selection()
***************************************/
void Si4700_Channel_Selection(UINT32 frq)
{
250: af 92 push r10
252: bf 92 push r11
254: cf 92 push r12
256: df 92 push r13
258: ef 92 push r14
25a: ff 92 push r15
25c: 0f 93 push r16
25e: 1f 93 push r17
260: cf 93 push r28
262: df 93 push r29
264: cd b7 in r28, 0x3d ; 61
266: de b7 in r29, 0x3e ; 62
268: 2b 97 sbiw r28, 0x0b ; 11
26a: 0f b6 in r0, 0x3f ; 63
26c: f8 94 cli
26e: de bf out 0x3e, r29 ; 62
270: 0f be out 0x3f, r0 ; 63
272: cd bf out 0x3d, r28 ; 61
274: 7b 01 movw r14, r22
276: 8c 01 movw r16, r24
unsigned short loop_counter = 0;
278: cc 24 eor r12, r12
27a: dd 24 eor r13, r13
unsigned char si4700_reg_data[4];
unsigned char error_ind = 0;
unsigned char si4700_channel_start_tune[] = {0x40,0x01,0x80,0xCA}; //107.7MHz
27c: 80 e4 ldi r24, 0x40 ; 64
27e: 8c 83 std Y+4, r24 ; 0x04
280: 44 e0 ldi r20, 0x04 ; 4
282: a4 2e mov r10, r20
284: b1 2c mov r11, r1
286: ac 0e add r10, r28
288: bd 1e adc r11, r29
28a: 81 e0 ldi r24, 0x01 ; 1
28c: 8d 83 std Y+5, r24 ; 0x05
28e: 80 e8 ldi r24, 0x80 ; 128
290: 8e 83 std Y+6, r24 ; 0x06
292: 8a ec ldi r24, 0xCA ; 202
294: 8f 83 std Y+7, r24 ; 0x07
unsigned char si4700_channel_stop_tune[] = {0x40,0x01,0x00};
296: de 01 movw r26, r28
298: 11 96 adiw r26, 0x01 ; 1
29a: e6 e7 ldi r30, 0x76 ; 118
29c: f0 e0 ldi r31, 0x00 ; 0
29e: 83 e0 ldi r24, 0x03 ; 3
2a0: 01 90 ld r0, Z+
2a2: 0d 92 st X+, r0
2a4: 81 50 subi r24, 0x01 ; 1
2a6: e1 f7 brne .-8 ; 0x2a0 <Si4700_Channel_Selection+0x50>
si4700_channel_start_tune[3]=(frq-g_bandl)/g_space;//channel
2a8: 80 91 66 00 lds r24, 0x0066
2ac: 90 91 67 00 lds r25, 0x0067
2b0: a0 91 68 00 lds r26, 0x0068
2b4: b0 91 69 00 lds r27, 0x0069
2b8: e8 1a sub r14, r24
2ba: f9 0a sbc r15, r25
2bc: 0a 0b sbc r16, r26
2be: 1b 0b sbc r17, r27
2c0: 80 91 61 00 lds r24, 0x0061
2c4: 28 2f mov r18, r24
2c6: 33 27 eor r19, r19
2c8: 44 27 eor r20, r20
2ca: 55 27 eor r21, r21
2cc: c8 01 movw r24, r16
2ce: b7 01 movw r22, r14
2d0: 31 d3 rcall .+1634 ; 0x934 <__udivmodsi4>
2d2: f5 01 movw r30, r10
2d4: 23 83 std Z+3, r18 ; 0x03
//set tune bit
error_ind = OperationSi4700_2w(WRITE, &(si4700_channel_start_tune[0]), 4);
2d6: 44 e0 ldi r20, 0x04 ; 4
2d8: b5 01 movw r22, r10
2da: 80 e2 ldi r24, 0x20 ; 32
2dc: d2 de rcall .-604 ; 0x82 <OperationSi4700_2w>
if(error_ind)
2de: 88 23 and r24, r24
2e0: a1 f5 brne .+104 ; 0x34a <Si4700_Channel_Selection+0xfa>
return;
//wait STC=1
do
{
error_ind = OperationSi4700_2w(READ, &(si4700_reg_data[0]), 1);
2e2: 41 e0 ldi r20, 0x01 ; 1
2e4: be 01 movw r22, r28
2e6: 68 5f subi r22, 0xF8 ; 248
2e8: 7f 4f sbci r23, 0xFF ; 255
2ea: 81 e2 ldi r24, 0x21 ; 33
2ec: ca de rcall .-620 ; 0x82 <OperationSi4700_2w>
if(error_ind)
2ee: 88 23 and r24, r24
2f0: 61 f5 brne .+88 ; 0x34a <Si4700_Channel_Selection+0xfa>
return;
loop_counter++;
2f2: 08 94 sec
2f4: c1 1c adc r12, r1
2f6: d1 1c adc r13, r1
}
2f8: 88 85 ldd r24, Y+8 ; 0x08
2fa: 86 fd sbrc r24, 6
2fc: 04 c0 rjmp .+8 ; 0x306 <Si4700_Channel_Selection+0xb6>
2fe: ff ef ldi r31, 0xFF ; 255
300: cf 16 cp r12, r31
302: d1 04 cpc r13, r1
304: 70 f3 brcs .-36 ; 0x2e2 <Si4700_Channel_Selection+0x92>
while(((si4700_reg_data[0]&0x40) == 0) && (loop_counter < 0xff));
loop_counter = 0;
306: cc 24 eor r12, r12
308: dd 24 eor r13, r13
//clear tune bit
error_ind = OperationSi4700_2w(WRITE, &(si4700_channel_stop_tune[0]), 3);
30a: 43 e0 ldi r20, 0x03 ; 3
30c: be 01 movw r22, r28
30e: 6f 5f subi r22, 0xFF ; 255
310: 7f 4f sbci r23, 0xFF ; 255
312: 80 e2 ldi r24, 0x20 ; 32
314: b6 de rcall .-660 ; 0x82 <OperationSi4700_2w>
if(error_ind)
316: 88 23 and r24, r24
318: c1 f4 brne .+48 ; 0x34a <Si4700_Channel_Selection+0xfa>
return;
//wait STC=0
do
{
error_ind = OperationSi4700_2w(READ, &(si4700_reg_data[0]), 1);
31a: 41 e0 ldi r20, 0x01 ; 1
31c: be 01 movw r22, r28
31e: 68 5f subi r22, 0xF8 ; 248
320: 7f 4f sbci r23, 0xFF ; 255
322: 81 e2 ldi r24, 0x21 ; 33
324: ae de rcall .-676 ; 0x82 <OperationSi4700_2w>
if(error_ind)
326: 88 23 and r24, r24
328: 81 f4 brne .+32 ; 0x34a <Si4700_Channel_Selection+0xfa>
return;
loop_counter++;
32a: 08 94 sec
32c: c1 1c adc r12, r1
32e: d1 1c adc r13, r1
}
330: 88 85 ldd r24, Y+8 ; 0x08
332: 86 ff sbrs r24, 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -