📄 uart.s
字号:
; }
L218:
; }
L216:
;
; // Switch RX part of CC1020 on
; WriteToCC1020Register(CC1020_MAIN,0x01);
ldi R18,1
clr R16
rcall _WriteToCC1020Register
;
; // Return LOCK status to application
; return (lock_status);
mov R16,R20
L209:
adiw R28,2
rcall pop_gset2
.dbline 0 ; func end
ret
; lock_status -> R20
; TimeOutCounter -> y+0
; PA_POWER -> R22
; TXANALOG -> R20
.even
_SetupCC1020TX::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,2
; }
;
; /****************************************************************************/
; /* This routine puts the CC1020 into TX mode (from RX). When switching to */
; /* TX from PD, use WakeupCC1020ToTX first */
; /****************************************************************************/
;
; char SetupCC1020TX(unsigned char TXANALOG,unsigned char PA_POWER)
; {
; volatile int TimeOutCounter;
; char lock_status;
;
; // Turn off PA to avoid frequency splatter
; WriteToCC1020Register(CC1020_PA_POWER,0x00);
clr R18
ldi R16,28
rcall _WriteToCC1020Register
;
; // Setup bias current adjustment
; WriteToCC1020Register(CC1020_ANALOG,TXANALOG);
mov R18,R20
ldi R16,23
rcall _WriteToCC1020Register
;
; // Switch into TX, switch to freq. reg B
; WriteToCC1020Register(CC1020_MAIN,0xC1);
ldi R18,193
clr R16
rcall _WriteToCC1020Register
;
; // WriteToCC1020Register(CC1020_MAIN,0x81);
;
; // Monitor LOCK
; for(TimeOutCounter=LOCK_TIMEOUT; TimeOutCounter>0; TimeOutCounter--)
ldi R24,32766
ldi R25,127
std y+1,R25
std y+0,R24
L220:
; {
; if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10) break;
ldi R16,64
rcall _ReadFromCC1020Register
mov R24,R16
andi R24,16
cpi R24,16
brne L224
rjmp L222
L224:
L221:
ldd R24,y+0
ldd R25,y+1
sbiw R24,1
std y+1,R25
std y+0,R24
clr R2
clr R3
cp R2,R24
cpc R3,R25
brlt L220
L222:
; }
;
; // If PLL in lock
; if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10){
ldi R16,64
rcall _ReadFromCC1020Register
mov R24,R16
andi R24,16
cpi R24,16
brne L226
; // Indicate PLL in LOCK
; lock_status = LOCK_OK;
ldi R20,1
rjmp L227
L226:
; // Else (PLL out of LOCK)
; }else{
; // If recalibration ok
; if(CalibrateCC1020(PA_POWER)){
mov R16,R22
rcall _CalibrateCC1020
tst R16
breq L228
; // Indicate PLL in LOCK
; lock_status = LOCK_RECAL_OK;
ldi R20,2
rjmp L229
L228:
; // Else (recalibration failed)
; }else{
; // Indicate PLL out of LOCK
; lock_status = LOCK_NOK;
clr R20
; }
L229:
; }
L227:
;
; // Restore PA setting
; WriteToCC1020Register(CC1020_PA_POWER,PA_POWER);
mov R18,R22
ldi R16,28
rcall _WriteToCC1020Register
;
; // Turn OFF DCLK squelch in TX
; WriteToCC1020Register(CC1020_INTERFACE,ReadFromCC1020Register(CC1020_INTERFACE)&~0x10);
ldi R16,1
rcall _ReadFromCC1020Register
mov R18,R16
andi R18,239
ldi R16,1
rcall _WriteToCC1020Register
;
; // Return LOCK status to application
; return (lock_status);
mov R16,R20
L219:
adiw R28,2
rcall pop_gset2
.dbline 0 ; func end
ret
.even
_SetupCC1020PD::
; }
;
;
; /****************************************************************************/
; /* This routine puts the CC1020 into power down mode. Use WakeUpCC1020ToRX */
; /* followed by SetupCC1020RX or WakeupCC1020ToTX followed by SetupCC1020TX */
; /* to wake up from power down */
; /****************************************************************************/
;
; void SetupCC1020PD(void)
; {
; // Put CC1020 into power-down
; WriteToCC1020Register(CC1020_MAIN,0x1F);
ldi R18,31
clr R16
rcall _WriteToCC1020Register
;
; // Turn off PA to minimise current draw
; WriteToCC1020Register(CC1020_PA_POWER,0x00);
clr R18
ldi R16,28
rcall _WriteToCC1020Register
L230:
.dbline 0 ; func end
ret
.even
_ResetCC1020::
; }
;
; /****************************************************************************/
; /* This routine resets the CC1020, clearing all registers. */
; /****************************************************************************/
;
; void ResetCC1020(void)
; {
; // Reset CC1020
; WriteToCC1020Register(CC1020_MAIN, 0x0F&~0x01);
ldi R18,14
clr R16
rcall _WriteToCC1020Register
;
; // Bring CC1020 out of reset
; WriteToCC1020Register(CC1020_MAIN, 0x1F);
ldi R18,31
clr R16
rcall _WriteToCC1020Register
L231:
.dbline 0 ; func end
ret
; value -> R22
; counter -> R20
.even
_ConfigureCC1020::
rcall push_gset2
; }
;
; /****************************************************************************/
; /* This routine sends new configuration data to the CC1020 */
; /****************************************************************************/
;
; void ConfigureCC1020(void)
; {
ldi R20,1
rjmp L236
L233:
ldi R24,<_DefaultConfig433-1
ldi R25,>_DefaultConfig433-1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
mov R18,R22
mov R16,R20
rcall _WriteToCC1020Register
L234:
inc R20
L236:
; unsigned char counter;
; unsigned char value;
; for(counter=0x01; counter<=0x20; counter++){
ldi R24,32
cp R24,R20
brsh L233
L232:
rcall pop_gset2
.dbline 0 ; func end
ret
; i -> <dead>
; j -> R10
.even
_main::
; value=DefaultConfig433[counter-1];
; WriteToCC1020Register(counter,value);
; }
; }
;
;
; /* RS232通信main函数 */
;
; void main(void)
; {
; uchar i,j;
; databak[0]=0x00;
clr R2
sts _databak,R2
; databak[1]=0x00;
sts _databak+1,R2
; databak[2]=0x00;
sts _databak+2,R2
; Tx_Rx=2;
ldi R24,2
sts _Tx_Rx,R24
; Rx_Time=0;
sts _Rx_Time,R2
; init_devices(); // MCU初始化
rcall _init_devices
; Initial(); // 变量初始化
rcall _Initial
; WDR(); // 喂狗
wdr
;
; port_init();
rcall _port_init
; uart_init();
rcall _uart_init
; SEI();
sei
;
; SetupCC1020PD();
rcall _SetupCC1020PD
; ResetCC1020() ;
rcall _ResetCC1020
; ConfigureCC1020();
rcall _ConfigureCC1020
;
; WakeUpCC1020ToRX(RXANALOG);
lds R16,_RXANALOG
rcall _WakeUpCC1020ToRX
; if(!CalibrateCC1020(PA_POWER))
lds R16,_PA_POWER
rcall _CalibrateCC1020
tst R16
brne L241
; boolval=2;
ldi R24,2
sts _boolval,R24
L241:
;
; WakeUpCC1020ToTX(TXANALOG);
lds R16,_TXANALOG
rcall _WakeUpCC1020ToTX
; if (!CalibrateCC1020(PA_POWER))
lds R16,_PA_POWER
rcall _CalibrateCC1020
tst R16
brne L243
; boolval=3;
ldi R24,3
sts _boolval,R24
L243:
;
; SetupAGC();
rcall _SetupAGC
; SetupCC1020PD() ;
rcall _SetupCC1020PD
; bool_val = SetupCC1020RX(RXANALOG, PA_POWER);
lds R18,_PA_POWER
lds R16,_RXANALOG
rcall _SetupCC1020RX
sts _bool_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
ldi R16,1
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
mov R18,R16
ldi R16,1
rcall _WriteToCC1020Register
rjmp L246
L245:
;
; while(1)
; {
; if(rsok40==1)
lds R24,_rsok40
cpi R24,1
brne L248
; {
; //串行通讯
; WDR();
wdr
; if(rscnt12==entercomm){
lds R24,_rscnt12
cpi R24,86
brne L250
; entcomm();
rcall _entcomm
; }
rjmp L251
L250:
; else if(rscnt12==voltagedata){
lds R24,_rscnt12
cpi R24,1
brne L252
; voltagerepol();
rcall _voltagerepol
; }
rjmp L253
L252:
; else if(rscnt12==currentdata){
lds R24,_rscnt12
cpi R24,2
brne L254
; currentrepol();
rcall _currentrepol
; }
L254:
; else{}
L255:
L253:
L251:
; rsok00=0;
clr R2
sts _rsok00,R2
; rsok10=0;
sts _rsok10,R2
; rsok20=0;
sts _rsok20,R2
; rsok30=0;
sts _rsok30,R2
; rsok40=0;
sts _rsok40,R2
; rscnt01=0;
sts _rscnt01,R2
; rscnt11=0;
sts _rscnt11,R2
; rscnt12=0x00;
sts _rscnt12,R2
; rscnt13=0x00;
sts _rscnt13,R2
; }
rjmp L249
L248:
; else{
; WDR();
wdr
; // P2MDOUT = 0xA0;
; // P2 =0xff;
; DDRB = 0x03;
ldi R24,3
out 0x17,R24
; DDRD = 0x30;
ldi R24,48
out 0x11,R24
; bool_val = SetupCC1020RX( RXANALOG, PA_POWER);
lds R18,_PA_POWER
lds R16,_RXANALOG
rcall _SetupCC1020RX
sts _bool_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
ldi R16,1
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; // retrn_val = 0x1f;
; WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
mov R18,R16
ldi R16,1
rcall _WriteToCC1020Register
; delay(100000);
ldi R16,160
ldi R17,134
ldi R18,1
ldi R19,0
rcall _delay
;
;
; bool_val = SetupCC1020TX( TXANALOG, PA_POWER);
lds R18,_PA_POWER
lds R16,_TXANALOG
rcall _SetupCC1020TX
sts _bool_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
ldi R16,1
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; // retrn_val = 0x0f;
; WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
mov R18,R16
ldi R16,1
rcall _WriteToCC1020Register
; // P2MDOUT = 0xA8;
; // P2 =0xff;
; DDRB = 0x03;
ldi R24,3
out 0x17,R24
; DDRD = 0x30;
ldi R24,48
out 0x11,R24
; j = 0;
clr R10
;
; retrn_val = ReadFromCC1020Register(CC1020_STATUS);
ldi R16,64
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_RSSI);
ldi R16,66
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_AFC);
ldi R16,67
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_GAUSS_FILTER);
ldi R16,68
rcall _ReadFromCC1020Register
sts _retrn_val,R16
rjmp L257
L256:
; while(1){
; if(j==2) break;
mov R24,R10
cpi R24,2
brne L259
rjmp L258
L259:
clr R2
sts _looptmp,R2
rjmp L264
X4:
; for(looptmp = 0;looptmp<32;looptmp++){
L265:
L266:
; // if((looptmp & 1) == 1) DIO_1;
; //else DIO_0;
; // delay(14);
; // delay(23);
; // delay(7);
; //while(Dclk == 0);
; //delay(1);
; while(Dclk == 0);
in R24,0x12
andi R24,8
out 0x12,R24
tst R24
breq L265
L268:
L269:
; while(Dclk == 1);
in R24,0x12
andi R24,8
out 0x12,R24
cpi R24,1
breq L268
lds R24,_looptmp
cpi R24,10
breq L273
cpi R24,13
brne L271
L273:
; if(looptmp == 10 || looptmp == 13) continue;
rjmp L262
L271:
; if(j ==1) DIO_1;
mov R24,R10
cpi R24,1
brne L274
sbi 0x12,4
rjmp L275
L274:
; else DIO_0;
cbi 0x12,4
L275:
;
; if(j ==1) j = 0;
mov R24,R10
cpi R24,1
brne L276
clr R10
rjmp L279
L276:
; else j = 1;
clr R10
inc R10
L278:
L279:
in R24,0x12
andi R24,8
out 0x12,R24
tst R24
breq L278
L262:
lds R24,_looptmp
subi R24,255 ; addi 1
sts _looptmp,R24
L264:
lds R24,_looptmp
cpi R24,32
brlo L266
ldi R16,16
ldi R17,39
ldi R18,0
ldi R19,0
rcall _delay
L257:
rjmp L256
L258:
; while(Dclk == 0);
;
; }
; delay(10000);
; }
; retrn_val = ReadFromCC1020Register(CC1020_TEST1);
ldi R16,33
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST2);
ldi R16,34
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST3);
ldi R16,35
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST4);
ldi R16,36
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST5);
ldi R16,37
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST6);
ldi R16,38
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_TEST7);
ldi R16,39
rcall _ReadFromCC1020Register
sts _retrn_val,R16
;
; retrn_val = ReadFromCC1020Register(CC1020_RESET_DONE);
ldi R16,65
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_RSSI);
ldi R16,66
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_AFC);
ldi R16,67
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_GAUSS_FILTER);
ldi R16,68
rcall _ReadFromCC1020Register
sts _retrn_val,R16
;
; retrn_val = ReadFromCC1020Register(CC1020_STATUS);
ldi R16,64
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS1);
ldi R16,69
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS2);
ldi R16,70
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS3);
ldi R16,71
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS4);
ldi R16,72
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS5);
ldi R16,73
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS6);
ldi R16,74
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; retrn_val = ReadFromCC1020Register(CC1020_STATUS7);
ldi R16,75
rcall _ReadFromCC1020Register
sts _retrn_val,R16
; /*
; WriteToCC1020Register(CC1020_INTERFACE, 0x1f);
; SetupCC1020RX(RXANALOG, PA_POWER);
; delay(50000);
; */
; }
L249:
L246:
rjmp L245
X5:
L238:
.dbline 0 ; func end
ret
.area bss(ram, con, rel)
_Vwn_Buf::
.blkb 26
_Rx_Time::
.blkb 1
_Tx_Rx::
.blkb 1
_datawn2::
.blkb 3
_databak::
.blkb 3
_w1::
.blkb 1
_rsok40::
.blkb 1
_rsok30::
.blkb 1
_rsok20::
.blkb 1
_rsok10::
.blkb 1
_rsok00::
.blkb 1
_xx1::
.blkb 1
_xx0::
.blkb 1
_rscnt01::
.blkb 1
_rscnt13::
.blkb 1
_rscnt12::
.blkb 1
_rscnt11::
.blkb 1
_rcvd1::
.blkb 1
_rcv1::
.blkb 50
_bool_val::
.blkb 1
_looptmp::
.blkb 1
_retrn_val::
.blkb 1
_boolval::
.blkb 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -