📄 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 rxBuffer[32]; //接收缓冲区的大小
0000 ;
0000 ; unsigned char rd_reg;
0000 ;
0000 ; //unsigned char INTERRUPT_STATE=0x00;
0000 ; unsigned char SEND_DONE=0x00;
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 (PINC & 0x2)!=0;}
0038 ; //char GET_GDO0() { return (PIND & 0x2)!=0;}
0038 ; int GET_OUT() { return (* (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x13 + 0x20) & (1 << 1)) != 0;}
0038 999B sbis 0x13,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
0048 ; size -> R22
0048 ; txPtr -> R20,R21
.even
0048 _CC1100_send::
0048 0E940000 xcall push_gset2
004C 622F mov R22,R18
004E A801 movw R20,R16
0050 ;
0050 ;
0050 ;
0050 ;
0050 ;
0050 ; extern uint8_t CC1100_sendDone();
0050 ; extern uint8_t CC1100_receive(uint8_t *msg);
0050 ;
0050 ; unsigned char CC1100_send(uint8_t *txPtr,uint8_t size)
0050 ; {
0050 ; if (1)
0050 ; return CC1100_sendRFburst(txPtr,size);
0050 262F mov R18,R22
0052 3327 clr R19
0054 8A01 movw R16,R20
0056 9FD2 xcall _CC1100_sendRFburst
0058 L11:
0058 ; else
0058 ; ;
0058 L10:
0058 0E940000 xcall pop_gset2
005C .dbline 0 ; func end
005C 0895 ret
005E ; i -> R16
.even
005E _Dly10us::
005E ; }
005E ;
005E ; /******************************************/
005E ;
005E ; //延时函数 10us
005E ; void Dly10us()
005E ; {
005E ; unsigned char i;
005E ; for(i=0;i<10;i++)
005E 0027 clr R16
0060 0BC0 xjmp L17
0062 L14:
0062 0000 nop
0064 0000 nop
0066 0000 nop
0068 0000 nop
006A 0000 nop
006C 0000 nop
006E 0000 nop
0070 0000 nop
0072 0000 nop
0074 0000 nop
0076 L15:
0076 0395 inc R16
0078 L17:
0078 0A30 cpi R16,10
007A 98F3 brlo L14
007C L13:
007C .dbline 0 ; func end
007C 0895 ret
007E ; i -> R20,R21
007E ; j -> R22,R23
007E ; l -> R16,R17
.even
007E _Dly1mS::
007E 0E940000 xcall push_gset2
0082 ; {
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; asm("nop");
0082 ; }
0082 ; }
0082 ; //延时函数 1ms
0082 ; void Dly1mS(unsigned int l)
0082 ; {
0082 12C0 xjmp L20
0084 L19:
0084 ; unsigned int i,j;
0084 ; while(l--)
0084 ; for(i=0;i<54;i++)
0084 4427 clr R20
0086 5527 clr R21
0088 0BC0 xjmp L25
008A L22:
008A 6627 clr R22
008C 7727 clr R23
008E 02C0 xjmp L29
0090 L26:
0090 L27:
0090 6F5F subi R22,255 ; offset = 1
0092 7F4F sbci R23,255
0094 L29:
0094 6436 cpi R22,100
0096 E0E0 ldi R30,0
0098 7E07 cpc R23,R30
009A D0F3 brlo L26
009C L23:
009C 4F5F subi R20,255 ; offset = 1
009E 5F4F sbci R21,255
00A0 L25:
00A0 4633 cpi R20,54
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
00A6 88F3 brlo L22
00A8 L20:
00A8 1801 movw R2,R16
00AA 0150 subi R16,1
00AC 1040 sbci R17,0
00AE 2220 tst R2
00B0 49F7 brne L19
00B2 3320 tst R3
00B4 39F7 brne L19
00B6 X0:
00B6 L18:
00B6 0E940000 xcall pop_gset2
00BA .dbline 0 ; func end
00BA 0895 ret
00BC ; rd_pin -> R12
00BC ; i -> R22
00BC ; spi_status -> R10
00BC ; value -> R20
.even
00BC _SPI_write::
00BC 0E940000 xcall push_gset4
00C0 402F mov R20,R16
00C2 ; for(j=0;j<100;j++);
00C2 ; }
00C2 ;
00C2 ; /******************************************/
00C2 ;
00C2 ; unsigned char SPI_write(unsigned char value)
00C2 ; {
00C2 ; unsigned char i,spi_status,rd_pin;
00C2 ; for(i=0;i<8;i++)
00C2 6627 clr R22
00C4 26C0 xjmp L34
00C6 L31:
00C6 ; {
00C6 ; if((value&0x80)==0x80)
00C6 842F mov R24,R20
00C8 8078 andi R24,128
00CA 8038 cpi R24,128
00CC 19F4 brne L35
00CE ; {
00CE ; Dly10us();
00CE C7DF xcall _Dly10us
00D0 ; SET_IN(); // SI=1
00D0 A3DF xcall _SET_IN
00D2 ; }
00D2 03C0 xjmp L36
00D4 L35:
00D4 ; else
00D4 ; {
00D4 ; CLEAR_IN(); // SI=0
00D4 A7DF xcall _CLEAR_IN
00D6 ; Dly10us();Dly10us();
00D6 C3DF xcall _Dly10us
00D8 C2DF xcall _Dly10us
00DA ; }
00DA L36:
00DA ; Dly10us();Dly10us();Dly10us();
00DA C1DF xcall _Dly10us
00DC C0DF xcall _Dly10us
00DE BFDF xcall _Dly10us
00E0 ; SET_CLOCK(); //SCLK=1;
00E0 8FDF xcall _SET_CLOCK
00E2 ; Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
00E2 BDDF xcall _Dly10us
00E4 BCDF xcall _Dly10us
00E6 BBDF xcall _Dly10us
00E8 BADF xcall _Dly10us
00EA B9DF xcall _Dly10us
00EC ; value <<=1;
00EC 440F lsl R20
00EE ; spi_status<<=1;
00EE AA0C lsl R10
00F0 ; rd_pin=GET_OUT();
00F0 A3DF xcall _GET_OUT
00F2 C02E mov R12,R16
00F4 ; if((rd_pin&0x01)==0x01)
00F4 8C2D mov R24,R12
00F6 8170 andi R24,1
00F8 8130 cpi R24,1
00FA 21F4 brne L37
00FC ; spi_status=spi_status|0x01;
00FC 8A2D mov R24,R10
00FE 8160 ori R24,1
0100 A82E mov R10,R24
0102 03C0 xjmp L38
0104 L37:
0104 ; else
0104 ; spi_status=spi_status&0xfe;
0104 8A2D mov R24,R10
0106 8E7F andi R24,254
0108 A82E mov R10,R24
010A L38:
010A 80DF xcall _CLEAR_CLOCK
010C A8DF xcall _Dly10us
010E A7DF xcall _Dly10us
0110 L32:
0110 6395 inc R22
0112 L34:
0112 6830 cpi R22,8
0114 C0F2 brlo L31
0116 ; CLEAR_CLOCK();
0116 ; Dly10us();Dly10us();
0116 ; }
0116 ; return(spi_status);
0116 0A2D mov R16,R10
0118 L30:
0118 0E940000 xcall pop_gset4
011C .dbline 0 ; func end
011C 0895 ret
011E ; rd_pin -> R22
011E ; value -> R10
011E ; i -> R20
.even
011E _SPI_read::
011E 0E940000 xcall push_gset3
0122 ; }
0122 ; unsigned char SPI_read()
0122 ; {
0122 ; unsigned char i,value,rd_pin;
0122 ; for(i=0;i<8;i++)
0122 4427 clr R20
0124 1DC0 xjmp L43
0126 L40:
0126 ; {
0126 ; SET_CLOCK(); //P_SCLK=1;
0126 6CDF xcall _SET_CLOCK
0128 ; value <<=1;Dly10us();Dly10us();Dly10us();Dly10us();Dly10us();
0128 AA0C lsl R10
012A 99DF xcall _Dly10us
012C 98DF xcall _Dly10us
012E 97DF xcall _Dly10us
0130 96DF xcall _Dly10us
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -