📄 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 _GET_OUT::
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 rxBuffer[32]; //接收缓冲区的大小
0000 ;
0000 ; unsigned char rd_reg;
0000 ;
0000 ; //unsigned char INTERRUPT_STATE=0x00;
0000 ; unsigned char SEND_DONE=0x00;
0000 ;
0000 ; #define SET_CLOCK() { PORTG |=0x1; }
0000 ; #define CLEAR_CLOCK() { PORTG &=~(0x1); }
0000 ; #define SET_IN() { PORTG |=0x2; }
0000 ; #define CLEAR_IN() { PORTG &=~(0x2); }
0000 ; #define SET_CSN() { PORTC |=0x4; }
0000 ; #define CLEAR_CSN() { PORTC &=~(0x4); }
0000 ; //char GET_OUT() { return (PINC & 0x2)!=0;}
0000 ; //char GET_GDO0() { return (PIND & 0x2)!=0;}
0000 ; int GET_OUT() { return (* (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x13 + 0x20) & (1 << 1)) != 0;}
0000 999B sbis 0x13,1
0002 03C0 rjmp L2
0004 01E0 ldi R16,1
0006 10E0 ldi R17,0
0008 02C0 xjmp L3
000A L2:
000A 0027 clr R16
000C 1127 clr R17
000E L3:
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 ; size -> R22
0010 ; txPtr -> R20,R21
.even
0010 _CC1100_send::
0010 0E940000 xcall push_gset2
0014 622F mov R22,R18
0016 A801 movw R20,R16
0018 ;
0018 ;
0018 ;
0018 ;
0018 ;
0018 ; extern uint8_t CC1100_sendDone();
0018 ; extern uint8_t *CC1100_receive(uint8_t *msg);
0018 ;
0018 ; unsigned char CC1100_send(uint8_t *txPtr,uint8_t size)
0018 ; {
0018 ; if (1)
0018 ; return CC1100_sendRFburst(txPtr,size);
0018 262F mov R18,R22
001A 3327 clr R19
001C 8A01 movw R16,R20
001E 22D3 xcall _CC1100_sendRFburst
0020 L5:
0020 ; else
0020 ; ;
0020 L4:
0020 0E940000 xcall pop_gset2
0024 .dbline 0 ; func end
0024 0895 ret
0026 ; i -> R16
.even
0026 _Dly10us::
0026 ; }
0026 ;
0026 ; /******************************************/
0026 ;
0026 ; //延时函数 10us
0026 ; void Dly10us()
0026 ; {
0026 ; unsigned char i;
0026 ; for(i=0;i<10;i++)
0026 0027 clr R16
0028 0BC0 xjmp L11
002A L8:
002A 0000 nop
002C 0000 nop
002E 0000 nop
0030 0000 nop
0032 0000 nop
0034 0000 nop
0036 0000 nop
0038 0000 nop
003A 0000 nop
003C 0000 nop
003E L9:
003E 0395 inc R16
0040 L11:
0040 0A30 cpi R16,10
0042 98F3 brlo L8
0044 L7:
0044 .dbline 0 ; func end
0044 0895 ret
0046 ; i -> R20,R21
0046 ; j -> R22,R23
0046 ; l -> R16,R17
.even
0046 _Dly1mS::
0046 0E940000 xcall push_gset2
004A ; {
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; asm("nop");
004A ; }
004A ; }
004A ; //延时函数 1ms
004A ; void Dly1mS(unsigned int l)
004A ; {
004A 12C0 xjmp L14
004C L13:
004C ; unsigned int i,j;
004C ; while(l--)
004C ; for(i=0;i<54;i++)
004C 4427 clr R20
004E 5527 clr R21
0050 0BC0 xjmp L19
0052 L16:
0052 6627 clr R22
0054 7727 clr R23
0056 02C0 xjmp L23
0058 L20:
0058 L21:
0058 6F5F subi R22,255 ; offset = 1
005A 7F4F sbci R23,255
005C L23:
005C 6436 cpi R22,100
005E E0E0 ldi R30,0
0060 7E07 cpc R23,R30
0062 D0F3 brlo L20
0064 L17:
0064 4F5F subi R20,255 ; offset = 1
0066 5F4F sbci R21,255
0068 L19:
0068 4633 cpi R20,54
006A E0E0 ldi R30,0
006C 5E07 cpc R21,R30
006E 88F3 brlo L16
0070 L14:
0070 1801 movw R2,R16
0072 0150 subi R16,1
0074 1040 sbci R17,0
0076 2220 tst R2
0078 49F7 brne L13
007A 3320 tst R3
007C 39F7 brne L13
007E X0:
007E L12:
007E 0E940000 xcall pop_gset2
0082 .dbline 0 ; func end
0082 0895 ret
0084 ; rd_pin -> R12
0084 ; i -> R22
0084 ; spi_status -> R10
0084 ; value -> R20
.even
0084 _SPI_write::
0084 0E940000 xcall push_gset4
0088 402F mov R20,R16
008A ; for(j=0;j<100;j++);
008A ; }
008A ;
008A ; /******************************************/
008A ;
008A ; unsigned char SPI_write(unsigned char value)
008A ; {
008A ; unsigned char i,spi_status,rd_pin;
008A ; for(i=0;i<8;i++)
008A 6627 clr R22
008C 36C0 xjmp L28
008E L25:
008E ; {
008E ; if((value&0x80)==0x80)
008E 842F mov R24,R20
0090 8078 andi R24,128
0092 8038 cpi R24,128
0094 39F4 brne L29
0096 ; {
0096 ; Dly10us();
0096 C7DF xcall _Dly10us
0098 ; SET_IN(); // SI=1
0098 80916500 lds R24,101
009C 8260 ori R24,2
009E 80936500 sts 101,R24
00A2 ; }
00A2 07C0 xjmp L30
00A4 L29:
00A4 ; else
00A4 ; {
00A4 ; CLEAR_IN(); // SI=0
00A4 80916500 lds R24,101
00A8 8D7F andi R24,253
00AA 80936500 sts 101,R24
00AE ; Dly10us();Dly10us();
00AE BBDF xcall _Dly10us
00B0 BADF xcall _Dly10us
00B2 ; }
00B2 L30:
00B2 ; Dly10us();Dly10us();Dly10us();
00B2 B9DF xcall _Dly10us
00B4 B8DF xcall _Dly10us
00B6 B7DF xcall _Dly10us
00B8 ; SET_CLOCK(); //SCLK=1;
00B8 80916500 lds R24,101
00BC 8160 ori R24,1
00BE 80936500 sts 101,R24
00C2 ; Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
00C2 B1DF xcall _Dly10us
00C4 B0DF xcall _Dly10us
00C6 AFDF xcall _Dly10us
00C8 AEDF xcall _Dly10us
00CA ADDF xcall _Dly10us
00CC ; value <<=1;
00CC 440F lsl R20
00CE ; spi_status<<=1;
00CE AA0C lsl R10
00D0 ; rd_pin=GET_OUT();
00D0 97DF xcall _GET_OUT
00D2 C02E mov R12,R16
00D4 ; if((rd_pin&0x01)==0x01)
00D4 8C2D mov R24,R12
00D6 8170 andi R24,1
00D8 8130 cpi R24,1
00DA 21F4 brne L31
00DC ; spi_status=spi_status|0x01;
00DC 8A2D mov R24,R10
00DE 8160 ori R24,1
00E0 A82E mov R10,R24
00E2 03C0 xjmp L32
00E4 L31:
00E4 ; else
00E4 ; spi_status=spi_status&0xfe;
00E4 8A2D mov R24,R10
00E6 8E7F andi R24,254
00E8 A82E mov R10,R24
00EA L32:
00EA 80916500 lds R24,101
00EE 8E7F andi R24,254
00F0 80936500 sts 101,R24
00F4 98DF xcall _Dly10us
00F6 97DF xcall _Dly10us
00F8 L26:
00F8 6395 inc R22
00FA L28:
00FA 6830 cpi R22,8
00FC 08F4 brsh X1
00FE C7CF xjmp L25
0100 X1:
0100 ; CLEAR_CLOCK();
0100 ; Dly10us();Dly10us();
0100 ; }
0100 ; return(spi_status);
0100 0A2D mov R16,R10
0102 L24:
0102 0E940000 xcall pop_gset4
0106 .dbline 0 ; func end
0106 0895 ret
0108 ; rd_pin -> R22
0108 ; value -> R10
0108 ; i -> R20
.even
0108 _SPI_read::
0108 0E940000 xcall push_gset3
010C ; }
010C ; unsigned char SPI_read()
010C ; {
010C ; unsigned char i,value,rd_pin;
010C ; for(i=0;i<8;i++)
010C 4427 clr R20
010E 25C0 xjmp L37
0110 L34:
0110 ; {
0110 ; SET_CLOCK(); //P_SCLK=1;
0110 80916500 lds R24,101
0114 8160 ori R24,1
0116 80936500 sts 101,R24
011A ; value <<=1;Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
011A AA0C lsl R10
011C 84DF xcall _Dly10us
011E 83DF xcall _Dly10us
0120 82DF xcall _Dly10us
0122 81DF xcall _Dly10us
0124 80DF xcall _Dly10us
0126 ; rd_pin=GET_OUT();
0126 6CDF xcall _GET_OUT
0128 602F mov R22,R16
012A ; if((rd_pin&0x01)==0x01) value|=0x01;
012A 862F mov R24,R22
012C 8170 andi R24,1
012E 8130 cpi R24,1
0130 21F4 brne L38
0132 8A2D mov R24,R10
0134 8160 ori R24,1
0136 A82E mov R10,R24
0138 03C0 xjmp L39
013A L38:
013A ; else value&=0xfe;
013A 8A2D mov R24,R10
013C 8E7F andi R24,254
013E A82E mov R10,R24
0140 L39:
0140 72DF xcall _Dly10us
0142 71DF xcall _Dly10us
0144 80916500 lds R24,101
0148 8E7F andi R24,254
014A 80936500 sts 101,R24
014E 6BDF xcall _Dly10us
0150 6ADF xcall _Dly10us
0152 69DF xcall _Dly10us
0154 68DF xcall _Dly10us
0156 67DF xcall _Dly10us
0158 L35:
0158 4395 inc R20
015A L37:
015A 4830 cpi R20,8
015C C8F2 brlo L34
015E ; Dly10us();Dly10us();
015E ; CLEAR_CLOCK(); //SCLK=0 //P_SCLK=0;
015E ; Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
015E ; }
015E ; return value;
015E 0A2D mov R16,R10
0160 L33:
0160 0E940000 xcall pop_gset3
0164 .dbline 0 ; func end
0164 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -