📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile H:\work\myWork\AVR-CC1100/protocol.h
.dbfunc e setPktType _setPktType fc
; regVal -> R20
; pktType -> R22
.even
_setPktType::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 27
; /*******************************************************************************************************
; * Compiler: WINAVR
; * Target platform: Atmega88 and Chipcon CC1100
; * Author: 陈思
; *******************************************************************************************************
; * 2007-12-26 13:19:41
; ******************************************************************************************************/
;
; #include "protocol.h"
;
; #define FOSC 1000000
; #define BAUDRATE 4800
; #define BAUDREG FOSC/16/BAUDRATE-1
; #define MAXSIZE 255
;
; //#pragma interrupt_handler USART_INT:iv_USART0_RX
; //#pragma interrupt_handler REC_PKT:iv_INT0
;
; // 表示串口状态的全局变量
; USART_FLAG fUART;
; ChipState fCC1100;
; BYTE RecData[MAXSIZE];
; BYTE RecLen = 0;
;
; // USART 接收到一个字节完成中断
; void USART_INT(void)
;
.dbline 30
;
; {
; BYTE recByte;
ldi R16,8
rcall _spiReadReg
mov R20,R16
.dbline 32
; USART_RECINT_DISABLE();
;
tst R22
brne L2
.dbline 33
; recByte = UDR0;
.dbline 34
;
ori R20,3
.dbline 35
; if(recByte == 0xAA)
andi R20,252
.dbline 36
; {
rjmp L3
L2:
.dbline 38
; if(fUART == USART_IDLE)
; fUART = USART_RECIEVE;
cpi R22,1
brne L4
.dbline 39
; }
.dbline 40
; else if(recByte == 0x55)
ori R20,3
.dbline 41
; {
andi R20,253
.dbline 42
; if(fUART == USART_RECIEVE)
rjmp L5
L4:
.dbline 45
; fUART = USART_RECIEVE_FINISH;
; }
; else
clr R16
rjmp L1
L5:
L3:
.dbline 47
; {
; if(fUART == USART_RECIEVE)
mov R18,R20
ldi R16,8
rcall _spiWriteReg
.dbline 50
; {
; RecData[RecLen+1] = recByte;
; RecLen ++;
ldi R16,1
.dbline -2
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r regVal 20 c
.dbsym r pktType 22 c
.dbend
.dbfunc e setPktLen _setPktLen fc
; pktLength -> R20
.even
_setPktLen::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 56
; }
; }
;
; USART_RECINT_ENABLE();
; }
;
.dbline 58
; // 检测到数据包的到来,用INT0通知MCU
; void REC_PKT(void)
ldi R24,1
cp R24,R20
brsh L7
ldi R24,255
cp R24,R20
brlo L7
.dbline 59
; {
mov R18,R20
ldi R16,6
rcall _spiWriteReg
rjmp L8
L7:
.dbline 62
; INT0_DISABLE(); // 关中断
;
; // if(fCC1100 == SLEEP)
clr R16
rjmp L6
L8:
.dbline 65
; spiReceivePacket(RecData,MAXSIZE);
;
; EIFR |= (1<<INTF0); // 清中断标志位,并开中断
ldi R16,1
.dbline -2
L6:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r pktLength 20 c
.dbend
.dbfunc e setSendType _setSendType fc
; regVal -> R20
; sendType -> R22
.even
_setSendType::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 70
; INT0_ENABLE();
; }
;
; void main()
; {
.dbline 73
; // 系统初始化部分
; CLI();
; WDTCSR = 0x00;
ldi R16,7
rcall _spiReadReg
mov R20,R16
.dbline 75
; fUART = USART_IDLE;
;
tst R22
brne L10
.dbline 76
; SpiInit();
.dbline 77
; cc1100Init();
ori R20,3
.dbline 78
; //GDO2Int();
andi R20,252
.dbline 79
; //GDO2_INT0();
rjmp L11
L10:
.dbline 81
; //serialInit(12);
; NOP();
cpi R22,1
brne L12
.dbline 82
; SEI();
.dbline 83
;
ori R20,3
.dbline 84
; memset(RecData,0,MAXSIZE);
andi R20,253
.dbline 85
;
rjmp L13
L12:
.dbline 87
; setPktType(DEFINED_LENGTH);
; setAddress(0x00);
cpi R22,2
brne L14
.dbline 88
; setPktLen(0xFF);
.dbline 89
; setSendType(NO_ADDRESS);
ori R20,3
.dbline 90
;
andi R20,254
.dbline 91
; spiWriteReg(CC1100_IOCFG0,0x06);
rjmp L15
L14:
.dbline 95
;
; //initWorMode();
;
; /*
clr R16
rjmp L9
L15:
L13:
L11:
.dbline 97
; while(1)
; {
mov R18,R20
ldi R16,7
rcall _spiWriteReg
.dbline 99
; if(fUART == USART_RECIEVE_FINISH)
; {
ldi R16,1
.dbline -2
L9:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r regVal 20 c
.dbsym r sendType 22 c
.dbend
.dbfunc e setAddress _setAddress fc
; addr -> R20
.even
_setAddress::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 104
; CLI();
; RecData[0] = RecLen;
; spiSendPacket(RecData,RecLen+1);
; fUART = USART_IDLE;
;
.dbline 106
; memset(RecData,0,RecLen+1);
; RecLen = 0;
cpi R20,0
brlo L17
ldi R24,255
cp R24,R20
brlo L17
.dbline 107
;
mov R18,R20
ldi R16,9
rcall _spiWriteReg
rjmp L18
L17:
.dbline 111
; SEI();
; }
; }
;
clr R16
rjmp L16
L18:
.dbline 113
; */
; while(1)
ldi R16,1
.dbline -2
L16:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r addr 20 c
.dbend
.dbfunc e GDO2Int _GDO2Int fV
.even
_GDO2Int::
.dbline -1
.dbline 119
; {
; if(spiReceivePacket(RecData,MAXSIZE))
; break;
; }
;
;
.dbline 120
;
bset 7
.dbline 122
; while(1);
;
lds R24,105
ori R24,3
sts 105,R24
.dbline 125
; }
;
;
sbi 0x1d,0
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SpiInit _SpiInit fV
.even
_SpiInit::
.dbline -1
.dbline 130
;
;
;
;
;
.dbline 132
;
;
ldi R24,44
out 0x4,R24
.dbline 133
;
cbi 0x5,3
.dbline 135
;
;
ldi R24,81
out 0x2c,R24
.dbline 137
;
;
in R2,0x2c
out 0x2c,R2
.dbline 138
;
in R24,0x2c
andi R24,223
out 0x2c,R24
.dbline 140
;
;
cbi 0xa,5
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e serialInit _serialInit fV
; baudrate -> R16,R17
.even
_serialInit::
.dbline -1
.dbline 148
;
;
;
;
;
;
;
;
.dbline 150
;
;
ldi R24,6
sts 194,R24
.dbline 152
;
;
movw R2,R16
mov R2,R3
clr R3
sts 197,R2
.dbline 153
;
sts 196,R16
.dbline 156
;
;
;
lds R24,193
ori R24,24
sts 193,R24
L22:
.dbline 158
.dbline 158
lds R24,193
ori R24,128
sts 193,R24
.dbline 158
L23:
.dbline 158
;
;
.dbline -2
L21:
.dbline 0 ; func end
ret
.dbsym r baudrate 16 s
.dbend
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100/protocol.h
_RecLen::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100/protocol.h
.dbfile H:\work\myWork\AVR-CC1100\main.c
.dbsym e RecLen _RecLen c
.area text(rom, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\main.c
.dbfunc e USART_INT _USART_INT fV
; recByte -> R16
.even
_USART_INT::
.dbline -1
.dbline 29
L26:
.dbline 31
.dbline 31
lds R24,193
andi R24,127
sts 193,R24
.dbline 31
L27:
.dbline 31
.dbline 33
lds R16,198
.dbline 35
cpi R16,170
brne L29
.dbline 36
.dbline 37
lds R2,_fUART
tst R2
brne L30
.dbline 38
ldi R24,2
sts _fUART,R24
.dbline 39
rjmp L30
L29:
.dbline 40
cpi R16,85
brne L33
.dbline 41
.dbline 42
lds R24,_fUART
cpi R24,2
brne L34
.dbline 43
ldi R24,3
sts _fUART,R24
.dbline 44
rjmp L34
L33:
.dbline 46
.dbline 47
lds R24,_fUART
cpi R24,2
brne L37
.dbline 48
.dbline 49
ldi R24,<_RecData+1
ldi R25,>_RecData+1
lds R30,_RecLen
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 50
lds R24,_RecLen
subi R24,255 ; addi 1
sts _RecLen,R24
.dbline 51
L37:
.dbline 52
L34:
L30:
L40:
.dbline 54
.dbline 54
lds R24,193
ori R24,128
sts 193,R24
.dbline 54
L41:
.dbline 54
.dbline -2
L25:
.dbline 0 ; func end
ret
.dbsym r recByte 16 c
.dbend
.dbfunc e REC_PKT _REC_PKT fV
.even
_REC_PKT::
.dbline -1
.dbline 59
.dbline 60
cbi 0x1d,0
.dbline 63
ldi R18,255
ldi R16,<_RecData
ldi R17,>_RecData
rcall _spiReceivePacket
.dbline 65
sbi 0x1c,0
.dbline 66
sbi 0x1d,0
.dbline -2
L43:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,2
.dbline -1
.dbline 70
.dbline 72
cli
.dbline 73
clr R2
sts 96,R2
.dbline 74
sts _fUART,R2
.dbline 76
rcall _SpiInit
.dbline 77
rcall _cc1100Init
.dbline 81
nop
.dbline 82
sei
.dbline 84
ldi R24,255
ldi R25,0
std y+1,R25
std y+0,R24
clr R18
clr R19
ldi R16,<_RecData
ldi R17,>_RecData
rcall _memset
.dbline 86
ldi R16,1
rcall _setPktType
.dbline 87
clr R16
rcall _setAddress
.dbline 88
ldi R16,255
rcall _setPktLen
.dbline 89
clr R16
rcall _setSendType
.dbline 91
ldi R18,6
ldi R16,2
rcall _spiWriteReg
rjmp L46
L45:
.dbline 114
.dbline 115
ldi R18,255
ldi R16,<_RecData
ldi R17,>_RecData
rcall _spiReceivePacket
tst R16
breq L48
.dbline 116
rjmp L51
L48:
.dbline 117
L46:
.dbline 113
rjmp L45
L50:
.dbline 121
L51:
.dbline 121
rjmp L50
X0:
.dbline -2
L44:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile H:\work\myWork\AVR-CC1100\main.c
_RecData::
.blkb 255
.dbsym e RecData _RecData A[255:255]c
_fCC1100::
.blkb 1
.dbsym e fCC1100 _fCC1100 c
_fUART::
.blkb 1
.dbsym e fUART _fUART c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -