📄 bu1923a.s
字号:
; rds_step = SEARCH_SYC_STEP;
ldi R24,1
sts _rds_step,R24
.dbline 195
; break;
xjmp L28
L49:
.dbline 198
; case SYC_C_STEP:
; case SYC_C1_STEP:
; if((temp_syc_word == C_SYC_WORD)||(temp_syc_word == C1_SYC_WORD))
cpi R16,92
ldi R30,2
cpc R17,R30
breq L52
cpi R16,204
ldi R30,3
cpc R17,R30
brne L50
L52:
.dbline 199
; {
.dbline 200
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 201
; rds_step = SYC_D_STEP;
ldi R24,6
sts _rds_step,R24
.dbline 202
; if(temp_syc_word == C_SYC_WORD)
cpi R16,92
ldi R30,2
cpc R17,R30
brne L53
.dbline 203
; c_word_val = C_OFF_WORD;
ldi R24,616
ldi R25,2
sts _c_word_val+1,R25
sts _c_word_val,R24
xjmp L28
L53:
.dbline 205
; else
; c_word_val = C1_OFF_WORD;
ldi R24,848
ldi R25,3
sts _c_word_val+1,R25
sts _c_word_val,R24
.dbline 207
; //rds_data.syc_flag = 1;
; }
xjmp L28
L50:
.dbline 209
; else
; rds_step = SEARCH_SYC_STEP;
ldi R24,1
sts _rds_step,R24
.dbline 210
; break;
xjmp L28
L55:
.dbline 212
; case SYC_D_STEP:
; if(temp_syc_word == D_SYC_WORD)
cpi R16,88
ldi R30,2
cpc R17,R30
brne L56
.dbline 213
; {
.dbline 214
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 215
; rds_step = FULL_SYCA_STEP;
ldi R24,7
sts _rds_step,R24
.dbline 216
; rds_data.syc_flag = 1;
ldi R24,1
sts _rds_data+10,R24
.dbline 218
; //rds_data.err_flag = 0;
; }
xjmp L28
L56:
.dbline 220
; else
; rds_step = SEARCH_SYC_STEP;
ldi R24,1
sts _rds_step,R24
.dbline 221
; break;
L27:
L28:
.dbline -2
.dbline 223
; }
; }
L22:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r p 20 pi
.dbsym r temp_syc_word 16 i
.dbsym r i 22 c
.dbfunc s get_rds_block _get_rds_block fI
.area func_lit(rom, con, rel)
L112:
.word `L70
.word `L75
.word `L81
.word `L87
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.even
_get_rds_block::
xcall push_gset3
.dbline -1
.dbline 226
;
; void get_rds_block(void)
; {
.dbline 228
;
; if(bit_count==0)
lds R2,_bit_count
tst R2
brne L61
.dbline 229
; {
.dbline 230
; syndrome_reg = 0;
clr R2
clr R3
sts _syndrome_reg+1,R3
sts _syndrome_reg,R2
.dbline 231
; }
L61:
.dbline 233
;
; if(rds_bit_buffer&0x1)
ldi R16,<L16
ldi R17,>L16
xcall lpm32
lds R5,_rds_bit_buffer+2+1
lds R4,_rds_bit_buffer+2
lds R3,_rds_bit_buffer+1
lds R2,_rds_bit_buffer
and R2,R16
and R3,R17
and R4,R18
and R5,R19
ldi R16,<L11
ldi R17,>L11
xcall lpm32
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
breq L63
.dbline 234
; syndrome_reg ^= matrix_H[bit_count];
ldi R24,<_matrix_H
ldi R25,>_matrix_H
lds R30,_bit_count
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
lds R3,_syndrome_reg+1
lds R2,_syndrome_reg
eor R2,R30
eor R3,R31
sts _syndrome_reg+1,R3
sts _syndrome_reg,R2
L63:
.dbline 236
;
; bit_count++;
lds R24,_bit_count
subi R24,255 ; addi 1
sts _bit_count,R24
.dbline 248
; /*if(bit_count>16)
; {
; }
; if(bit_count<=16)
; {
; };
; if(bit_count=16)
; {
; off_word_bit = 0x200;
; };*/
;
; if(bit_count==26)
cpi R24,26
breq X8
xjmp L65
X8:
.dbline 249
; {
.dbline 250
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 251
; buffer_reg = (rds_bit_buffer>>10);
ldi R24,10
ldi R25,0
lds R5,_rds_bit_buffer+2+1
lds R4,_rds_bit_buffer+2
lds R3,_rds_bit_buffer+1
lds R2,_rds_bit_buffer
st -y,R24
movw R16,R2
movw R18,R4
xcall lsr32
sts _buffer_reg+1,R17
sts _buffer_reg,R16
sts _buffer_reg+2+1,R19
sts _buffer_reg+2,R18
.dbline 252
; rds_bit_buffer = 0;
ldi R16,<L11
ldi R17,>L11
xcall lpm32
sts _rds_bit_buffer+1,R17
sts _rds_bit_buffer,R16
sts _rds_bit_buffer+2+1,R19
sts _rds_bit_buffer+2,R18
.dbline 254
; //error check;
; switch(rds_step)
lds R10,_rds_step
clr R11
ldi R24,7
ldi R25,0
cp R10,R24
cpc R11,R25
brge X9
xjmp L67
X9:
ldi R24,10
cp R24,R10
cpc R25,R11
brge X10
xjmp L67
X10:
ldi R24,<L112
ldi R25,>L112
movw R30,R10
sbiw R30,7
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X7:
.dbline 255
; {
L70:
.dbline 257
; case FULL_SYCA_STEP:
; if(syndrome_reg!=A_SYC_WORD)
lds R25,_syndrome_reg+1
lds R24,_syndrome_reg
cpi R24,216
ldi R30,3
cpc R25,R30
breq L71
.dbline 258
; {
.dbline 260
; //rds_data.err_flag |= A_WORD_ERR;
; rds_data.word_err_count++;
lds R24,_rds_data+9
subi R24,255 ; addi 1
sts _rds_data+9,R24
.dbline 261
; }
xjmp L72
L71:
.dbline 263
; else
; {
.dbline 264
; rds_data.A_word = (unsigned int)buffer_reg;
lds R3,_buffer_reg+1
lds R2,_buffer_reg
sts _rds_data+1,R3
sts _rds_data,R2
.dbline 265
; rds_data.err_flag |= A_WORD_UPDATE;
lds R24,_rds_data+11
ori R24,16
sts _rds_data+11,R24
.dbline 266
L72:
.dbline 266
; };
.dbline 267
; rds_step = FULL_SYCB_STEP;
ldi R24,8
sts _rds_step,R24
.dbline 268
; break;
xjmp L68
L75:
.dbline 270
; case FULL_SYCB_STEP:
; if(syndrome_reg!=B_SYC_WORD)
lds R25,_syndrome_reg+1
lds R24,_syndrome_reg
cpi R24,212
ldi R30,3
cpc R25,R30
breq L76
.dbline 271
; {
.dbline 273
; //rds_data.err_flag |= B_WORD_ERR;
; rds_data.word_err_count++;
lds R24,_rds_data+9
subi R24,255 ; addi 1
sts _rds_data+9,R24
.dbline 274
; }
xjmp L77
L76:
.dbline 276
; else
; {
.dbline 277
; rds_data.B_word = (unsigned int)buffer_reg;
lds R3,_buffer_reg+1
lds R2,_buffer_reg
sts _rds_data+2+1,R3
sts _rds_data+2,R2
.dbline 278
; rds_data.err_flag |= B_WORD_UPDATE;
lds R24,_rds_data+11
ori R24,32
sts _rds_data+11,R24
.dbline 279
; }
L77:
.dbline 280
; rds_step = FULL_SYCC_STEP;
ldi R24,9
sts _rds_step,R24
.dbline 281
; break;
xjmp L68
L81:
.dbline 283
; case FULL_SYCC_STEP:
; if((syndrome_reg!=C_SYC_WORD)&&(syndrome_reg!=C1_SYC_WORD))
lds R25,_syndrome_reg+1
lds R24,_syndrome_reg
cpi R24,92
ldi R30,2
cpc R25,R30
breq L82
cpi R24,204
ldi R30,3
cpc R25,R30
breq L82
.dbline 284
; {
.dbline 286
; //rds_data.err_flag |= C_WORD_ERR;
; rds_data.word_err_count++;
lds R24,_rds_data+9
subi R24,255 ; addi 1
sts _rds_data+9,R24
.dbline 287
; }
xjmp L83
L82:
.dbline 289
; else
; {
.dbline 290
; rds_data.C_word = (unsigned int)buffer_reg;
lds R3,_buffer_reg+1
lds R2,_buffer_reg
sts _rds_data+4+1,R3
sts _rds_data+4,R2
.dbline 291
; rds_data.err_flag |= C_WORD_UPDATE;
lds R24,_rds_data+11
ori R24,64
sts _rds_data+11,R24
.dbline 292
; }
L83:
.dbline 293
; rds_step = FULL_SYCD_STEP;
ldi R24,10
sts _rds_step,R24
.dbline 294
; break;
xjmp L68
L87:
.dbline 296
; case FULL_SYCD_STEP:
; if(syndrome_reg!=D_SYC_WORD)
lds R25,_syndrome_reg+1
lds R24,_syndrome_reg
cpi R24,88
ldi R30,2
cpc R25,R30
breq L88
.dbline 297
; {
.dbline 299
; //rds_data.err_flag |= D_WORD_ERR;
; rds_data.word_err_count++;
lds R24,_rds_data+9
subi R24,255 ; addi 1
sts _rds_data+9,R24
.dbline 300
; rds_data.err_flag = 0;
clr R2
sts _rds_data+11,R2
.dbline 301
; }
xjmp L89
L88:
.dbline 303
; else
; {
.dbline 304
; rds_data.D_word = (unsigned int)buffer_reg;
lds R3,_buffer_reg+1
lds R2,_buffer_reg
sts _rds_data+6+1,R3
sts _rds_data+6,R2
.dbline 305
; rds_data.err_flag |= D_WORD_UPDATE;
lds R24,_rds_data+11
ori R24,128
sts _rds_data+11,R24
.dbline 306
L89:
.dbline 306
; };
.dbline 307
; rds_step = FULL_SYCA_STEP;
ldi R24,7
sts _rds_step,R24
.dbline 309
;
; rds_data.block_count++;
lds R24,_rds_data+8
subi R24,255 ; addi 1
sts _rds_data+8,R24
.dbline 313
; //if(rds_data.err_flag&0x0f)
; //rds_data.word_err_count++;
; //STORE RDS_BLOCK TO RDS BLOCK BUFFER
; rds_buffer0_flag = rds_data.err_flag;
lds R2,_rds_data+11
sts _rds_buffer0_flag,R2
.dbline 314
; rds_buffer[0] = rds_data.A_word;
lds R3,_rds_data+1
lds R2,_rds_data
sts _rds_buffer+1,R3
sts _rds_buffer,R2
.dbline 315
; rds_buffer[1] = rds_data.B_word;
lds R3,_rds_data+2+1
lds R2,_rds_data+2
sts _rds_buffer+2+1,R3
sts _rds_buffer+2,R2
.dbline 316
; rds_buffer[2] = rds_data.C_word;
lds R3,_rds_data+4+1
lds R2,_rds_data+4
sts _rds_buffer+4+1,R3
sts _rds_buffer+4,R2
.dbline 317
; rds_buffer[3] = rds_data.D_word;
lds R3,_rds_data+6+1
lds R2,_rds_data+6
sts _rds_buffer+6+1,R3
sts _rds_buffer+6,R2
.dbline 319
; //CLEAR ERR_FLAG
; rds_data.err_flag = 0;
clr R2
sts _rds_data+11,R2
.dbline 322
;
; //Judge if losing syndrome; if yes,restart syndrome detecting
; if(rds_data.block_count>=30)
cpi R24,30
brlo L68
.dbline 323
; {
.dbline 324
; if(rds_data.word_err_count>20)
ldi R24,20
lds R2,_rds_data+9
cp R24,R2
brsh L106
.dbline 325
; {
.dbline 326
; rds_step = SEARCH_SYC_STEP; //restart search syc word
ldi R24,1
sts _rds_step,R24
.dbline 327
; rds_data.syc_flag = 0;
clr R2
sts _rds_data+10,R2
.dbline 328
; rds_status = 0;
sts _rds_status,R2
.dbline 329
; bit_count = 0;
sts _bit_count,R2
.dbline 330
; syndrome_reg = 0;
clr R3
sts _syndrome_reg+1,R3
sts _syndrome_reg,R2
.dbline 331
L106:
.dbline 331
; };
.dbline 332
; rds_data.word_err_count = 0;
clr R2
sts _rds_data+9,R2
.dbline 333
; rds_data.block_count = 0;
sts _rds_data+8,R2
.dbline 334
; };
.dbline 334
.dbline 336
;
; break;
L67:
L68:
.dbline 338
.dbline 339
L65:
.dbline -2
.dbline 341
;
; };
; }
;
; }
L60:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbfunc s rds_handler _rds_handler fI
.area func_lit(rom, con, rel)
L227:
.word `L140
.word `L156
.word `L158
.word `L188
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
; temp_buffer -> y+0
; i -> R20
; temp_buffer0_flag -> R22
.even
_rds_handler::
xcall push_gset2
sbiw R28,8
.dbline -1
.dbline 345
;
;
; void rds_handler(void)
; {
.dbline 358
; register unsigned char temp_buffer0_flag;
; unsigned int temp_buffer[4];
; register unsigned char i;
;
; //if(rds_delay)
; //{
; //rds_delay--;
; //if(!rds_delay)
; //rds_status = 0;
; //};
;
; //printf("rds handler\n");
; if(pty_is_searching==2)
lds R24,_pty_is_searching
cpi R24,2
brne L114
.dbline 359
; {
.dbline 360
; if(search_ok)
lds R2,_search_ok
tst R2
breq L116
.dbline 361
; {
.dbline 362
; if(pty_search_delay)
lds R2,_rds_dis_string+2
tst R2
breq L118
.dbline 363
; {
.dbline 364
; if((rds_status&PTY_EXIST)&&(pty_dis_type == pty_search_type))
lds R2,_rds_status
sbrs R2,1
rjmp L121
lds R2,_rds_dis_string+1
lds R3,_rds_dis_string
cp R3,R2
brne L121
.dbline 365
; {
.dbline 366
; pty_is_searching = 0;
clr R2
sts _pty_is_searching,R2
.dbline 368
; //pty_search_delay = 0;
; return;
xjmp L113
L121:
.dbline 369
; };
.dbline 370
; pty_search_delay--;
lds R24,_rds_dis_string+2
subi R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -