⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halstack.lst

📁 无线单片机cc2430简化协议的无线收发程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    253              //radio accepts all packets, the HUSSY!
    254              MDMCTRL0H &= ~ADR_DECODE;    //no address decode
   \   000046   90DF02       MOV     DPTR,#-0x20fe
   \   000049   E0           MOVX    A,@DPTR
   \   00004A   C2E3         CLR     0xE0 /* A   */.3
   \   00004C   F0           MOVX    @DPTR,A
    255              MDMCTRL0L &= ~AUTO_ACK;       //no auto ack
   \   00004D   90DF03       MOV     DPTR,#-0x20fd
   \   000050   E0           MOVX    A,@DPTR
   \   000051   C2E4         CLR     0xE0 /* A   */.4
   \   000053   F0           MOVX    @DPTR,A
   \   000054   800E         SJMP    ??halInitRadio_5
    256            } else {
    257              // Turning on Address Decoding
    258              MDMCTRL0H |= ADR_DECODE;
   \                     ??halInitRadio_4:
   \   000056   90DF02       MOV     DPTR,#-0x20fe
   \   000059   E0           MOVX    A,@DPTR
   \   00005A   D2E3         SETB    0xE0 /* A   */.3
   \   00005C   F0           MOVX    @DPTR,A
    259              //enable auto_ack
    260              MDMCTRL0L |= AUTO_ACK;
   \   00005D   90DF03       MOV     DPTR,#-0x20fd
   \   000060   E0           MOVX    A,@DPTR
   \   000061   D2E4         SETB    0xE0 /* A   */.4
   \   000063   F0           MOVX    @DPTR,A
    261            }
    262            local_radio_flags = radio_flags;  //save this for later
   \                     ??halInitRadio_5:
   \   000064   7408         MOV     A,#0x8
   \   000066   12....       LCALL   ?XSTACK_DISP0_8
   \   000069   7C..         MOV     R4,#(local_radio_flags & 0xff)
   \   00006B   7D..         MOV     R5,#((local_radio_flags >> 8) & 0xff)
   \   00006D   7402         MOV     A,#0x2
   \   00006F   12....       LCALL   ?MOVE_LONG8_XDATA_XDATA
    263            // Setting for AUTO CRC
    264            MDMCTRL0L |= AUTO_CRC;
   \   000072   90DF03       MOV     DPTR,#-0x20fd
   \   000075   E0           MOVX    A,@DPTR
   \   000076   D2E5         SETB    0xE0 /* A   */.5
   \   000078   F0           MOVX    @DPTR,A
    265          
    266            //pan
    267            if (radio_flags.bits.pan_coordinator) {
   \   000079   7408         MOV     A,#0x8
   \   00007B   12....       LCALL   ?XSTACK_DISP0_8
   \   00007E   E0           MOVX    A,@DPTR
   \   00007F   5402         ANL     A,#0x2
   \   000081   6009         JZ      ??halInitRadio_6
    268              MDMCTRL0H |= PAN_COORDINATOR;  //accepts frames with only source addressing modes
   \   000083   90DF02       MOV     DPTR,#-0x20fe
   \   000086   E0           MOVX    A,@DPTR
   \   000087   D2E4         SETB    0xE0 /* A   */.4
   \   000089   F0           MOVX    @DPTR,A
   \   00008A   8007         SJMP    ??halInitRadio_7
    269            } else {
    270              MDMCTRL0H &= ~PAN_COORDINATOR;  //rejects frames with only source addressing modes
   \                     ??halInitRadio_6:
   \   00008C   90DF02       MOV     DPTR,#-0x20fe
   \   00008F   E0           MOVX    A,@DPTR
   \   000090   C2E4         CLR     0xE0 /* A   */.4
   \   000092   F0           MOVX    @DPTR,A
    271            }
    272          
    273            // Turning on AUTO_TX2RX
    274            FSMTC1 = ((FSMTC1 & (~AUTO_TX2RX_OFF & ~RX2RX_TIME_OFF))  | ACCEPT_ACKPKT);
   \                     ??halInitRadio_7:
   \   000093   90DF54       MOV     DPTR,#-0x20ac
   \   000096   E0           MOVX    A,@DPTR
   \   000097   54F3         ANL     A,#0xf3
   \   000099   4401         ORL     A,#0x1
   \   00009B   90DF54       MOV     DPTR,#-0x20ac
   \   00009E   F0           MOVX    @DPTR,A
    275          
    276            // Turning off abortRxOnSrxon.
    277            FSMTC1 &= ~0x20;
   \   00009F   90DF54       MOV     DPTR,#-0x20ac
   \   0000A2   E0           MOVX    A,@DPTR
   \   0000A3   C2E5         CLR     0xE0 /* A   */.5
   \   0000A5   F0           MOVX    @DPTR,A
    278          
    279            //now configure the RX, TX systems.
    280            // Setting the number of bytes to assert the FIFOP flag
    281            IOCFG0 = 127;  //set to max value as the FIFOP flag goes high when complete packet received
   \   0000A6   747F         MOV     A,#0x7f
   \   0000A8   90DF4F       MOV     DPTR,#-0x20b1
   \   0000AB   F0           MOVX    @DPTR,A
    282          
    283            // Flushing both Tx and Rx FiFo. The flush-Rx is issued twice to reset the SFD.
    284            // Calibrating the radio and turning on Rx to evaluate the CCA.
    285            SRXON;
   \   0000AC   75E1C2       MOV     0xe1,#-0x3e
    286            SFLUSHTX;
   \   0000AF   75E1C7       MOV     0xe1,#-0x39
    287            SFLUSHRX;
   \   0000B2   75E1C6       MOV     0xe1,#-0x3a
    288            SFLUSHRX;
   \   0000B5   75E1C6       MOV     0xe1,#-0x3a
    289            STXCALN;
   \   0000B8   75E1C1       MOV     0xe1,#-0x3f
    290            ISSTART;
   \   0000BB   75E1FE       MOV     0xe1,#-0x2
    291          
    292            SACKPEND;  //routers/
   \   0000BE   75E1C9       MOV     0xe1,#-0x37
    293          
    294            halSetRadioIEEEAddress();
   \   0000C1                ; Setup parameters for call to function halSetRadioIEEEAddress
   \   0000C1   12....       LCALL   halSetRadioIEEEAddress
    295          
    296             //Radio can interrupt when
    297             //RX configuration
    298             //clear flags/mask in radio
    299             RFIF = 0;
   \   0000C4   75E900       MOV     0xe9,#0x0
    300             RFIM = 0;   //all interrupts are masked.
   \   0000C7   759100       MOV     0x91,#0x0
    301             //enable RX interrupt on processor
    302             INT_SETFLAG_RF(INT_CLR);
   \   0000CA   74FC         MOV     A,#-0x4
   \   0000CC   559B         ANL     A,0x9b
   \   0000CE   FA           MOV     R2,A
   \   0000CF   8A9B         MOV     0x9b,R2
    303             INT_ENABLE_RF(INT_ON);
   \   0000D1   7401         MOV     A,#0x1
   \   0000D3   459A         ORL     A,0x9a
   \   0000D5   FC           MOV     R4,A
   \   0000D6   8C9A         MOV     0x9a,R4
    304          
    305             //enable RX RFERR interrupt on processor
    306             INT_SETFLAG_RFERR(INT_CLR);
   \   0000D8   C289         CLR     0x88.1
    307             INT_ENABLE_RFERR(INT_ON);
   \   0000DA   D2A8         SETB    0xa8.0
    308          
    309             //do not use DMA at this point
    310             //enable the RX receive interrupt here.
    311             RFIM |= IRQ_FIFOP;
   \   0000DC   439120       ORL     0x91,#0x20
    312          
    313             return(LRWPAN_STATUS_SUCCESS);
   \   0000DF   7900         MOV     R1,#0x0
   \                     ??halInitRadio_2:
   \   0000E1   7F01         MOV     R7,#0x1
   \   0000E3   02....       LJMP    ?FUNC_LEAVE_XDATA
    314          }

   \                                 In segment CODE_C, align 1
   \                     ??xxxxromstr:
   \   000000   68616C49     DB "halInitRadio()\012"
   \            6E697452
   \            6164696F
   \            28290A00
    315          
    316          #define PIN_CCA   CCA    //CCA is defined in hal.h
    317          
    318          //regardless of what happens here, we will try TXONCCA after this returns.

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    319          void  doIEEE_backoff(void) {
   \                     doIEEE_backoff:
   \   000000   74F1         MOV     A,#-0xf
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 15
   \   000005                ; Auto size: 6
   \   000005   74FA         MOV     A,#-0x6
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
    320               BYTE be, nb, tmp, rannum;
    321              UINT32  delay, start_tick;
    322          
    323             be = aMinBE;
   \   00000A   7E00         MOV     R6,#0x0
    324             nb = 0;
   \   00000C   7400         MOV     A,#0x0
   \   00000E   85..82       MOV     DPL,?XSP + 0
   \   000011   85..83       MOV     DPH,?XSP + 1
   \   000014   F0           MOVX    @DPTR,A
    325            do {
    326                if (be) {
   \                     ??doIEEE_backoff_0:
   \   000015   EE           MOV     A,R6
   \   000016   7003         JNZ     $+5
   \   000018   02....       LJMP    ??doIEEE_backoff_1
    327                  //do random delay
    328                  tmp = be;
   \   00001B   EE           MOV     A,R6
   \   00001C   C0E0         PUSH    A
   \   00001E   7401         MOV     A,#0x1
   \   000020   12....       LCALL   ?XSTACK_DISP0_8
   \   000023   D0E0         POP     A
   \   000025   F0           MOVX    @DPTR,A
    329                  //compute new delay
    330                  delay = 1;
   \   000026   90....       MOV     DPTR,#__Constant_1
   \   000029   78..         MOV     R0,#?V0 + 0
   \   00002B   12....       LCALL   ?L_MOV_X
   \   00002E   85....       MOV     ?V0 + 4,?V0 + 0
   \   000031   85....       MOV     ?V0 + 5,?V0 + 1
   \   000034   85....       MOV     ?V0 + 6,?V0 + 2
   \   000037   85....       MOV     ?V0 + 7,?V0 + 3
    331                  while (tmp) {
   \                     ??doIEEE_backoff_2:
   \   00003A   7401         MOV     A,#0x1
   \   00003C   12....       LCALL   ?XSTACK_DISP0_8
   \   00003F   E0           MOVX    A,@DPTR
   \   000040   6012         JZ      ??doIEEE_backoff_3
    332                    delay = delay << 1;  //delay = 2**be;
   \   000042   7401         MOV     A,#0x1
   \   000044   78..         MOV     R0,#?V0 + 4
   \   000046   12....       LCALL   ?L_SHL
    333                     tmp--;
   \   000049   7401         MOV     A,#0x1
   \   00004B   12....       LCALL   ?XSTACK_DISP0_8
   \   00004E   E0           MOVX    A,@DPTR
   \   00004F   24FF         ADD     A,#-0x1
   \   000051   F0           MOVX    @DPTR,A
   \   000052   80E6         SJMP    ??doIEEE_backoff_2
    334                   }
    335                  rannum =  halGetRandomByte() & (delay-1); //rannum will be between 0 and delay-1
   \                     ??doIEEE_backoff_3:
   \   000054   E5..         MOV     A,?V0 + 4
   \   000056   24FF         ADD     A,#-0x1
   \   000058   C0E0         PUSH    A
   \   00005A                ; Setup parameters for call to function halGetRandomByte
   \   00005A   12....       LCALL   halGetRandomByte
   \   00005D   E9           MOV     A,R1
   \   00005E   FA           MOV     R2,A
   \   00005F   D0E0         POP     A
   \   000061   5A           ANL     A,R2
   \   000062   FF           MOV     R7,A
    336                  delay = 0;
   \   000063   90....       MOV     DPTR,#__Constant_0
   \   000066   78..         MOV     R0,#?V0 + 0
   \   000068   12....       LCALL   ?L_MOV_X
   \   00006B   85....       MOV     ?V0 + 4,?V0 + 0
   \   00006E   85....       MOV     ?V0 + 5,?V0 + 1
   \   000071   85....       MOV     ?V0 + 6,?V0 + 2
   \   000074   85....       MOV     ?V0 + 7,?V0 + 3
    337                  while (rannum) {
   \                     ??doIEEE_backoff_4:
   \   000077   EF           MOV     A,R7
   \   000078   600B         JZ      ??doIEEE_backoff_5
    338                      delay  += SYMBOLS_TO_MACTICKS(aUnitBackoffPeriod);
   \   00007A   90....       MOV     DPTR,#__Constant_14
   \   00007D   78..         MOV     R0,#?V0 + 4
   \   00007F   12....       LCALL   ?L_ADD_X
    339                      rannum--;
   \   000082   1F           DEC     R7
   \   000083   80F2         SJMP    ??doIEEE_backoff_4
    340                   }//delay = aUnitBackoff * rannum
    341                  //now do backoff
    342                 start_tick = halGetMACTimer();
   \                     ??doIEEE_backoff_5:
   \   000085                ; Setup parameters for call to function halGetMACTimer
   \   000085   12....       LCALL   halGetMACTimer
   \   000088   8A..         MOV     ?V0 + 0,R2
   \   00008A   8B..         MOV     ?V0 + 1,R3
   \   00008C   8C..         MOV     ?V0 + 2,R4
   \   00008E   8D..         MOV     ?V0 + 3,R5
   \   000090   7402         MOV     A,#0x2
   \   000092   12....       LCALL   ?XSTACK_DISP0_8
   \   000095   78..         MOV     R0,#?V0 + 0
   \   000097   12....       LCALL   ?L_MOV_TO_X
    343                  while (halMACTimerNowDelta(start_tick) < delay);
   \                     ??doIEEE_backoff_6:
   \   00009A                ; Setup parameters for call to function halGetMACTimer
   \   00009A   12....       LCALL   halGetMACTimer
   \   00009D   8A..         MOV     ?V0 + 0,R2
   \   00009F   8B..         MOV     ?V0 + 1,R3
   \   0000A1   8C..         MOV     ?V0 + 2,R4
   \   0000A3   8D..         MOV     ?V0 + 3,R5
   \   0000A5   7402         MOV     A,#0x2
   \   0000A7   12....       LCALL   ?XSTACK_DISP0_8
   \   0000AA   78..         MOV     R0,#?V0 + 0
   \   0000AC   12....       LCALL   ?L_SUB_X
   \   0000AF   90....       MOV     DPTR,#__Constant_fffff
   \   0000B2   78..         MOV     R0,#?V0 + 0
   \   0000B4   12....       LCALL   ?L_AND_X
   \   0000B7   78..         MOV     R0,#?V0 + 4
   \   0000B9   79..         MOV     R1,#?V0 + 0
   \   0000BB   12....       LCALL   ?UL_GT
   \   0000BE   40DA         JC      ??do

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -