📄 cc1100.lis
字号:
.module cc1100.c
.area data(ram, con, rel)
0000 _paTable::
0000 .blkb 2
.area idata
0000 C0C0 .byte 192,192
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 C0C0 .byte 192,192
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 C0C0 .byte 192,192
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 C0C0 .byte 192,192
.area data(ram, con, rel)
0008 _SEND_DONE::
0008 .blkb 1
.area idata
0008 00 .byte 0
.area data(ram, con, rel)
.area text(rom, con, rel)
.even
0000 _SET_CLOCK::
0000 ; /*
0000 ; v2.5 halSpiWriteReg(CCxxx0_MCSM2, 0x08);
0000 ; halSpiWriteReg(CCxxx0_PKTLEN, 0x1F);
0000 ; v2.6 测试发送:Dly1mS(100); 删去
0000 ; */
0000 ; #include <iom128v.h>
0000 ; #include "cc1100_reg.h"
0000 ; typedef unsigned char uint8_t ;
0000 ; typedef unsigned int uint16_t;
0000 ; unsigned char paTable[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
0000 ; //unsigned char txBuffer[17] = {16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
0000 ; unsigned char rxBuffer[32]; //接收缓冲区的大小
0000 ;
0000 ; //unsigned char rd_pin;
0000 ; //unsigned char packetLength;
0000 ;
0000 ; unsigned char rd_reg;
0000 ;
0000 ; //unsigned char INTERRUPT_STATE=0x00;
0000 ; unsigned char SEND_DONE=0x00;
0000 ;
0000 ; //void GDO0_INPUT() {TOSH_MAKE_CC1100_GDO0_INPUT();}
0000 ; //void GDO0_OUTPUT() {TOSH_MAKE_CC1100_GDO0_OUTPUT();}
0000 ; //void SET_GDO0() { TOSH_SET_CC1100_GDO0_PIN(); }
0000 ; //void CLEAR_GDO0() { TOSH_CLR_CC1100_GDO0_PIN(); }
0000 ; /* void SET_CLOCK() { TOSH_SET_CC1100_SCLK_PIN(); }
0000 ; void CLEAR_CLOCK() { TOSH_CLR_CC1100_SCLK_PIN(); }
0000 ; void SET_IN() { TOSH_SET_CC1100_IN_PIN(); }
0000 ; void CLEAR_IN() { TOSH_CLR_CC1100_IN_PIN(); }
0000 ; void SET_CSN() { TOSH_SET_CC1100_CSN_PIN(); }
0000 ; void CLEAR_CSN() { TOSH_CLR_CC1100_CSN_PIN(); }
0000 ; char GET_OUT() { return TOSH_READ_CC1100_OUT_PIN(); }
0000 ; char GET_GDO0() { return TOSH_READ_CC1100_GDO0_PIN(); }
0000 ; */
0000 ; //char GET_GDO2() { return TOSH_READ_CC1100_GDO2_PIN(); }
0000 ;
0000 ;
0000 ;
0000 ;
0000 ;
0000 ;
0000 ; void SET_CLOCK() { PORTG |=0x1; }
0000 80916500 lds R24,101
0004 8160 ori R24,1
0006 80936500 sts 101,R24
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
.even
000C _CLEAR_CLOCK::
000C ; void CLEAR_CLOCK() { PORTG &=~(0x1); }
000C 80916500 lds R24,101
0010 8E7F andi R24,254
0012 80936500 sts 101,R24
0016 L2:
0016 .dbline 0 ; func end
0016 0895 ret
.even
0018 _SET_IN::
0018 ; void SET_IN() { PORTG |=0x2; }
0018 80916500 lds R24,101
001C 8260 ori R24,2
001E 80936500 sts 101,R24
0022 L3:
0022 .dbline 0 ; func end
0022 0895 ret
.even
0024 _CLEAR_IN::
0024 ; void CLEAR_IN() { PORTG &=~(0x2); }
0024 80916500 lds R24,101
0028 8D7F andi R24,253
002A 80936500 sts 101,R24
002E L4:
002E .dbline 0 ; func end
002E 0895 ret
.even
0030 _SET_CSN::
0030 ; void SET_CSN() { PORTC |=0x4; }
0030 AA9A sbi 0x15,2
0032 L5:
0032 .dbline 0 ; func end
0032 0895 ret
.even
0034 _CLEAR_CSN::
0034 ; void CLEAR_CSN() { PORTC &=~(0x4); }
0034 AA98 cbi 0x15,2
0036 L6:
0036 .dbline 0 ; func end
0036 0895 ret
.even
0038 _GET_OUT::
0038 ; char GET_OUT() { return ((PORTC & 1<<1)!=0);}
0038 A99B sbis 0x15,1
003A 03C0 rjmp L8
003C 01E0 ldi R16,1
003E 10E0 ldi R17,0
0040 02C0 xjmp L9
0042 L8:
0042 0027 clr R16
0044 1127 clr R17
0046 L9:
0046 L7:
0046 .dbline 0 ; func end
0046 0895 ret
.even
0048 _GET_GDO0::
0048 ; char GET_GDO0() { return ((PORTD & 1<<1)!=0);}
0048 919B sbis 0x12,1
004A 03C0 rjmp L11
004C 01E0 ldi R16,1
004E 10E0 ldi R17,0
0050 02C0 xjmp L12
0052 L11:
0052 0027 clr R16
0054 1127 clr R17
0056 L12:
0056 L10:
0056 .dbline 0 ; func end
0056 0895 ret
0058 ; i -> R16
.even
0058 _Dly10us::
0058 ;
0058 ;
0058 ; extern uint8_t CC1100_sendDone();
0058 ; extern uint8_t CC1100_receive(uint8_t *msg);
0058 ;
0058 ; /******************************************/
0058 ;
0058 ; //延时函数 10us
0058 ; void Dly10us()
0058 ; {
0058 ; unsigned char i;
0058 ; for(i=0;i<10;i++)
0058 0027 clr R16
005A 0BC0 xjmp L17
005C L14:
005C 0000 nop
005E 0000 nop
0060 0000 nop
0062 0000 nop
0064 0000 nop
0066 0000 nop
0068 0000 nop
006A 0000 nop
006C 0000 nop
006E 0000 nop
0070 L15:
0070 0395 inc R16
0072 L17:
0072 0A30 cpi R16,10
0074 98F3 brlo L14
0076 L13:
0076 .dbline 0 ; func end
0076 0895 ret
0078 ; i -> R20,R21
0078 ; j -> R22,R23
0078 ; l -> R16,R17
.even
0078 _Dly1mS::
0078 0E940000 xcall push_gset2
007C ; {
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; asm("nop");
007C ; }
007C ; }
007C ; //延时函数 1ms
007C ; void Dly1mS(unsigned int l)
007C ; {
007C 12C0 xjmp L20
007E L19:
007E ; unsigned int i,j;
007E ; while(l--)
007E ; for(i=0;i<54;i++)
007E 4427 clr R20
0080 5527 clr R21
0082 0BC0 xjmp L25
0084 L22:
0084 6627 clr R22
0086 7727 clr R23
0088 02C0 xjmp L29
008A L26:
008A L27:
008A 6F5F subi R22,255 ; offset = 1
008C 7F4F sbci R23,255
008E L29:
008E 6436 cpi R22,100
0090 E0E0 ldi R30,0
0092 7E07 cpc R23,R30
0094 D0F3 brlo L26
0096 L23:
0096 4F5F subi R20,255 ; offset = 1
0098 5F4F sbci R21,255
009A L25:
009A 4633 cpi R20,54
009C E0E0 ldi R30,0
009E 5E07 cpc R21,R30
00A0 88F3 brlo L22
00A2 L20:
00A2 1801 movw R2,R16
00A4 0150 subi R16,1
00A6 1040 sbci R17,0
00A8 2220 tst R2
00AA 49F7 brne L19
00AC 3320 tst R3
00AE 39F7 brne L19
00B0 X0:
00B0 L18:
00B0 0E940000 xcall pop_gset2
00B4 .dbline 0 ; func end
00B4 0895 ret
00B6 ; rd_pin -> R12
00B6 ; i -> R22
00B6 ; spi_status -> R10
00B6 ; value -> R20
.even
00B6 _SPI_write::
00B6 0E940000 xcall push_gset4
00BA 402F mov R20,R16
00BC ; for(j=0;j<100;j++);
00BC ; }
00BC ;
00BC ; /******************************************/
00BC ;
00BC ; unsigned char SPI_write(unsigned char value)
00BC ; {
00BC ; unsigned char i,spi_status,rd_pin;
00BC ; for(i=0;i<8;i++)
00BC 6627 clr R22
00BE 26C0 xjmp L34
00C0 L31:
00C0 ; {
00C0 ; if((value&0x80)==0x80)
00C0 842F mov R24,R20
00C2 8078 andi R24,128
00C4 8038 cpi R24,128
00C6 19F4 brne L35
00C8 ; {
00C8 ; Dly10us();
00C8 C7DF xcall _Dly10us
00CA ; SET_IN(); // SI=1
00CA A6DF xcall _SET_IN
00CC ; }
00CC 03C0 xjmp L36
00CE L35:
00CE ; else
00CE ; {
00CE ; CLEAR_IN(); // SI=0
00CE AADF xcall _CLEAR_IN
00D0 ; Dly10us();Dly10us();
00D0 C3DF xcall _Dly10us
00D2 C2DF xcall _Dly10us
00D4 ; }
00D4 L36:
00D4 ; Dly10us();Dly10us();Dly10us();
00D4 C1DF xcall _Dly10us
00D6 C0DF xcall _Dly10us
00D8 BFDF xcall _Dly10us
00DA ; SET_CLOCK(); //SCLK=1;
00DA 92DF xcall _SET_CLOCK
00DC ; Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
00DC BDDF xcall _Dly10us
00DE BCDF xcall _Dly10us
00E0 BBDF xcall _Dly10us
00E2 BADF xcall _Dly10us
00E4 B9DF xcall _Dly10us
00E6 ; value <<=1;
00E6 440F lsl R20
00E8 ; spi_status<<=1;
00E8 AA0C lsl R10
00EA ; rd_pin=GET_OUT();
00EA A6DF xcall _GET_OUT
00EC C02E mov R12,R16
00EE ; if((rd_pin&0x01)==0x01)
00EE 8C2D mov R24,R12
00F0 8170 andi R24,1
00F2 8130 cpi R24,1
00F4 21F4 brne L37
00F6 ; spi_status=spi_status|0x01;
00F6 8A2D mov R24,R10
00F8 8160 ori R24,1
00FA A82E mov R10,R24
00FC 03C0 xjmp L38
00FE L37:
00FE ; else
00FE ; spi_status=spi_status&0xfe;
00FE 8A2D mov R24,R10
0100 8E7F andi R24,254
0102 A82E mov R10,R24
0104 L38:
0104 83DF xcall _CLEAR_CLOCK
0106 A8DF xcall _Dly10us
0108 A7DF xcall _Dly10us
010A L32:
010A 6395 inc R22
010C L34:
010C 6830 cpi R22,8
010E C0F2 brlo L31
0110 ; CLEAR_CLOCK();
0110 ; Dly10us();Dly10us();
0110 ; }
0110 ; return(spi_status);
0110 0A2D mov R16,R10
0112 L30:
0112 0E940000 xcall pop_gset4
0116 .dbline 0 ; func end
0116 0895 ret
0118 ; rd_pin -> R22
0118 ; value -> R10
0118 ; i -> R20
.even
0118 _SPI_read::
0118 0E940000 xcall push_gset3
011C ; }
011C ; unsigned char SPI_read()
011C ; {
011C ; unsigned char i,value,rd_pin;
011C ; for(i=0;i<8;i++)
011C 4427 clr R20
011E 1DC0 xjmp L43
0120 L40:
0120 ; {
0120 ; SET_CLOCK(); //P_SCLK=1;
0120 6FDF xcall _SET_CLOCK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -