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

📄 halstack.lst

📁 无线单片机cc2430简化协议的无线收发程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
     36             IO_PER_LOC_UART0_AT_PORT0_PIN2345();
   \   000000   53F1FE       ANL     0xf1,#0xfe
     37             UTX0IF = 1;
   \   000003   D2E9         SETB    0xe8.1
     38          }
   \   000005   22           RET
     39          
     40          //get a character from serial port

   \                                 In segment NEAR_CODE, align 1, keep-with-next
     41          char halGetch(void){
   \                     halGetch:
   \   000000                ; Saved register size: 0
   \   000000                ; Auto size: 0
     42             char c;
     43             // Turning on reception
     44             U0CSR |= UART_ENABLE_RECEIVE;
   \   000000   438640       ORL     0x86,#0x40
     45          
     46             while (!URX0IF);
   \                     ??halGetch_0:
   \   000003   A28B         MOV     C,0x88.3
   \   000005   50FC         JNC     ??halGetch_0
     47             c = U0DBUF;
   \   000007   E5C1         MOV     A,0xc1
   \   000009   F9           MOV     R1,A
     48             URX0IF = FALSE;
   \   00000A   C28B         CLR     0x88.3
     49          
     50             return c;
   \   00000C   22           RET
     51          }
     52          

   \                                 In segment NEAR_CODE, align 1, keep-with-next
     53          void halUtilMemCopy(BYTE *dst, BYTE *src, BYTE len) {
   \                     halUtilMemCopy:
   \   000000   74F8         MOV     A,#-0x8
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 8
   \   000005                ; Auto size: 0
     54            while (len) {
   \                     ??halUtilMemCopy_0:
   \   000005   E9           MOV     A,R1
   \   000006   601F         JZ      ??halUtilMemCopy_1
     55              *dst = *src;
   \   000008   8C82         MOV     DPL,R4
   \   00000A   8D83         MOV     DPH,R5
   \   00000C   E0           MOVX    A,@DPTR
   \   00000D   8A82         MOV     DPL,R2
   \   00000F   8B83         MOV     DPH,R3
   \   000011   F0           MOVX    @DPTR,A
     56              dst++;src++;
   \   000012   8A82         MOV     DPL,R2
   \   000014   8B83         MOV     DPH,R3
   \   000016   A3           INC     DPTR
   \   000017   AA82         MOV     R2,DPL
   \   000019   AB83         MOV     R3,DPH
   \   00001B   8C82         MOV     DPL,R4
   \   00001D   8D83         MOV     DPH,R5
   \   00001F   A3           INC     DPTR
   \   000020   AC82         MOV     R4,DPL
   \   000022   AD83         MOV     R5,DPH
     57              len--;
   \   000024   19           DEC     R1
   \   000025   80DE         SJMP    ??halUtilMemCopy_0
     58            }
     59          }
   \                     ??halUtilMemCopy_1:
   \   000027   7F01         MOV     R7,#0x1
   \   000029   02....       LJMP    ?FUNC_LEAVE_XDATA
     60          
     61          // assuming 16us period, have 1/16us = 62500 tics per seocnd
     62          #define T2CMPVAL (62500/SLOWTICKS_PER_SECOND)
     63          
     64          //use timer2, will set it up for one tick per symbol
     65          //assuming 2.4GHZ and a 32 MHZ clock.
     66          // this is a 20 bit counter, will overflow in ~16 seconds
     67          //should be long enough for MAC timeout cases

   \                                 In segment NEAR_CODE, align 1, keep-with-next
     68          void halInitMACTimer(void) {
   \                     halInitMACTimer:
   \   000000                ; Saved register size: 0
   \   000000                ; Auto size: 0
     69          
     70            T2CNF = 0x00; //ensure timer is idle
   \   000000   75C300       MOV     0xc3,#0x0
     71          
     72            T2CAPHPH = 0x02;  // setting for 16 u-second periods
   \   000003   75A502       MOV     0xa5,#0x2
     73            T2CAPLPL = 0x00;  // (0x0200) / 32 = 16 u-seconds
   \   000006   75A400       MOV     0xa4,#0x0
     74            //set the interrupt compare to its maximum value
     75          
     76          #ifdef LRWPAN_ENABLE_SLOW_TIMER
     77            T2PEROF0 = (BYTE) (T2CMPVAL);
     78            T2PEROF1 = (BYTE) (T2CMPVAL>>8);
     79            //enable overflow count compare interrupt
     80            T2PEROF2 = ((BYTE) (T2CMPVAL>>16)) | 0x20;
     81          #endif
     82          
     83            //turn on timer
     84            //configure timer
     85            T2CNF = 0x03; //start timer
   \   000009   75C303       MOV     0xc3,#0x3
     86          
     87            INT_SETFLAG_T2(INT_CLR); //clear processor interrupt flag
   \   00000C   C2C2         CLR     0xc0.2
     88            //enable T2 processor interrupt
     89          #ifdef LRWPAN_ENABLE_SLOW_TIMER
     90            INT_ENABLE_T2(INT_ON);
     91          #endif
     92          
     93          }
   \   00000E   22           RET
     94          

   \                                 In segment NEAR_CODE, align 1, keep-with-next
     95          UINT32 halGetMACTimer(void){
   \                     halGetMACTimer:
   \   000000   74F5         MOV     A,#-0xb
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 11
   \   000005                ; Auto size: 4
   \   000005   74FC         MOV     A,#-0x4
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
     96            UINT32_UNION t;
     97            BOOL gie_status;
     98          
     99            SAVE_AND_DISABLE_GLOBAL_INTERRUPT(gie_status);
   \   00000A   A2AF         MOV     C,0xa8.7
   \   00000C   E4           CLR     A
   \   00000D   92E0         MOV     0xE0 /* A   */.0,C
   \   00000F   FE           MOV     R6,A
   \   000010   C2AF         CLR     0xa8.7
    100            t.bytes[UINT32_LOWORD_LSB] = T2OF0;
   \   000012   E5A1         MOV     A,0xa1
   \   000014   85..82       MOV     DPL,?XSP + 0
   \   000017   85..83       MOV     DPH,?XSP + 1
   \   00001A   F0           MOVX    @DPTR,A
    101            t.bytes[UINT32_LOWORD_MSB] = T2OF1;
   \   00001B   E5A2         MOV     A,0xa2
   \   00001D   C0E0         PUSH    A
   \   00001F   7401         MOV     A,#0x1
   \   000021   12....       LCALL   ?XSTACK_DISP0_8
   \   000024   D0E0         POP     A
   \   000026   F0           MOVX    @DPTR,A
    102            t.bytes[UINT32_HIWORD_LSB] = T2OF2 & 0x0F;
   \   000027   740F         MOV     A,#0xf
   \   000029   55A3         ANL     A,0xa3
   \   00002B   C0E0         PUSH    A
   \   00002D   7402         MOV     A,#0x2
   \   00002F   12....       LCALL   ?XSTACK_DISP0_8
   \   000032   D0E0         POP     A
   \   000034   F0           MOVX    @DPTR,A
    103            t.bytes[UINT32_HIWORD_MSB] = 0;
   \   000035   7400         MOV     A,#0x0
   \   000037   C0E0         PUSH    A
   \   000039   7403         MOV     A,#0x3
   \   00003B   12....       LCALL   ?XSTACK_DISP0_8
   \   00003E   D0E0         POP     A
   \   000040   F0           MOVX    @DPTR,A
    104            RESTORE_GLOBAL_INTERRUPT(gie_status);
   \   000041   EE           MOV     A,R6
   \   000042   A2E0         MOV     C,0xE0 /* A   */.0
   \   000044   92AF         MOV     0xa8.7,C
    105            return (t.val);
   \   000046   85..82       MOV     DPL,?XSP + 0
   \   000049   85..83       MOV     DPH,?XSP + 1
   \   00004C   78..         MOV     R0,#?V0 + 0
   \   00004E   12....       LCALL   ?L_MOV_X
   \   000051   AA..         MOV     R2,?V0 + 0
   \   000053   AB..         MOV     R3,?V0 + 1
   \   000055   AC..         MOV     R4,?V0 + 2
   \   000057   AD..         MOV     R5,?V0 + 3
   \   000059   7404         MOV     A,#0x4
   \   00005B   12....       LCALL   ?DEALLOC_XSTACK8
   \   00005E   7F04         MOV     R7,#0x4
   \   000060   02....       LJMP    ?FUNC_LEAVE_XDATA
    106          }
    107          
    108          
    109          
    110          //only works as long as SYMBOLS_PER_MAC_TICK is not less than 1

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    111          UINT32 halMacTicksToUs(UINT32 ticks){
   \                     halMacTicksToUs:
   \   000000   74F1         MOV     A,#-0xf
   \   000002   12....       LCALL   ?FUNC_ENTER_XDATA
   \   000005                ; Saved register size: 15
   \   000005                ; Auto size: 8
   \   000005   74F8         MOV     A,#-0x8
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
   \   00000A   7404         MOV     A,#0x4
   \   00000C   12....       LCALL   ?XSTACK_DISP0_8
   \   00000F   EA           MOV     A,R2
   \   000010   F0           MOVX    @DPTR,A
   \   000011   A3           INC     DPTR
   \   000012   EB           MOV     A,R3
   \   000013   F0           MOVX    @DPTR,A
   \   000014   A3           INC     DPTR
   \   000015   EC           MOV     A,R4
   \   000016   F0           MOVX    @DPTR,A
   \   000017   A3           INC     DPTR
   \   000018   ED           MOV     A,R5
   \   000019   F0           MOVX    @DPTR,A
    112          
    113             UINT32 rval;
    114          
    115             rval =  (ticks/SYMBOLS_PER_MAC_TICK())* (1000000/LRWPAN_SYMBOLS_PER_SECOND);
   \   00001A   7404         MOV     A,#0x4
   \   00001C   12....       LCALL   ?XSTACK_DISP0_8
   \   00001F   78..         MOV     R0,#?V0 + 0
   \   000021   12....       LCALL   ?L_MOV_X
   \   000024   90....       MOV     DPTR,#__Constant_1
   \   000027   78..         MOV     R0,#?V0 + 4
   \   000029   12....       LCALL   ?L_MOV_X
   \   00002C   78..         MOV     R0,#?V0 + 0
   \   00002E   79..         MOV     R1,#?V0 + 4
   \   000030   12....       LCALL   ?UL_DIV_MOD
   \   000033   90....       MOV     DPTR,#__Constant_10
   \   000036   78..         MOV     R0,#?V0 + 4
   \   000038   12....       LCALL   ?L_MOV_X
   \   00003B   78..         MOV     R0,#?V0 + 0
   \   00003D   79..         MOV     R1,#?V0 + 4
   \   00003F   12....       LCALL   ?L_MUL
   \   000042   85..82       MOV     DPL,?XSP + 0
   \   000045   85..83       MOV     DPH,?XSP + 1
   \   000048   78..         MOV     R0,#?V0 + 0
   \   00004A   12....       LCALL   ?L_MOV_TO_X
    116             return(rval);
   \   00004D   85..82       MOV     DPL,?XSP + 0
   \   000050   85..83       MOV     DPH,?XSP + 1
   \   000053   78..         MOV     R0,#?V0 + 0
   \   000055   12....       LCALL   ?L_MOV_X
   \   000058   AA..         MOV     R2,?V0 + 0
   \   00005A   AB..         MOV     R3,?V0 + 1
   \   00005C   AC..         MOV     R4,?V0 + 2
   \   00005E   AD..         MOV     R5,?V0 + 3
   \   000060   7408         MOV     A,#0x8
   \   000062   12....       LCALL   ?DEALLOC_XSTACK8
   \   000065   7F08         MOV     R7,#0x8
   \   000067   02....       LJMP    ?FUNC_LEAVE_XDATA
    117          }
    118          
    119          //assumes that Timer2 has been initialized and is running

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    120          UINT8 halGetRandomByte(void) {
   \                     halGetRandomByte:
   \   000000                ; Saved register size: 0
   \   000000                ; Auto size: 0
    121            return(T2OF0);
   \   000000   A9A1         MOV     R1,0xa1
   \   000002   22           RET
    122          }
    123          
    124          //write a character to serial port
    125          // Uses UART initialized by halInitUart
    126          

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    127          void halPutch(char c){
   \                     halPutch:
   \   000000                ; Saved register size: 0
   \   000000                ; Auto size: 0
    128            while (!UTX0IF);
   \                     ??halPutch_0:
   \   000000   A2E9         MOV     C,0xe8.1
   \   000002   50FC         JNC     ??halPutch_0
    129            UTX0IF = 0;
   \   000004   C2E9         CLR     0xe8.1
    130            U0DBUF = c;
   \   000006   89C1         MOV     0xc1,R1
    131          }
   \   000008   22           RET
    132          
    133          
    134          //set the radio frequency

   \                                 In segment NEAR_CODE, align 1, keep-with-next
    135          LRWPAN_STATUS_ENUM halSetRadioIEEEFrequency(PHY_FREQ_ENUM frequency, BYTE channel)
   \                     halSetRadioIEEEFrequency:
    136          {

⌨️ 快捷键说明

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