hal_timer.lst

来自「TI的基于ZIGBEE2006的协议栈」· LST 代码 · 共 1,188 行 · 第 1/5 页

LST
1,188
字号

   \                                 In segment SFR_AN, at 0xe7
   \   unsigned char volatile __sfr T1CCTL2
   \                     T1CCTL2:
   \   000000                DS 1

   \                                 In segment SFR_AN, at 0xeb
   \   unsigned char volatile __sfr T4CTL
   \                     T4CTL:
   \   000000                DS 1

   \                                 In segment SFR_AN, at 0xec
   \   unsigned char volatile __sfr T4CCTL0
   \                     T4CCTL0:
   \   000000                DS 1

   \                                 In segment SFR_AN, at 0xee
   \   unsigned char volatile __sfr T4CCTL1
   \                     T4CCTL1:
   \   000000                DS 1
     40          #include  "hal_defs.h"
     41          #include  "hal_types.h"
     42          #include  "hal_timer.h"
     43          
     44          /*********************************************************************
     45           * MACROS
     46           */
     47          
     48          /*********************************************************************
     49           * CONSTANTS
     50           */
     51          #define HW_TIMER_1        0x00
     52          #define HW_TIMER_3        0x01
     53          #define HW_TIMER_4        0x02
     54          #define HW_TIMER_INVALID  0x03
     55          #define HW_TIMER_MAX      0x03
     56          
     57          #define IEN1_T1IE     0x02    /* Timer1 Interrupt Enable */
     58          #define IEN1_T3IE     0x08    /* Timer3 Interrupt Enable */
     59          #define IEN1_T4IE     0x10    /* Timer4 Interrupt Enable */
     60          
     61          #define T1CTL_CH2IF   0x80
     62          #define T1CTL_CH1IF   0x40
     63          #define T1CTL_CH0IF   0x20
     64          #define T1CTL_OVFIF   0x10
     65          
     66          #define TIMIF_T1OVFIM 0x40
     67          #define TIMIF_T4CH1IF 0x20
     68          #define TIMIF_T4CH0IF 0x10
     69          #define TIMIF_T4OVFIF 0x08
     70          #define TIMIF_T3CH1IF 0x04
     71          #define TIMIF_T3CH0IF 0x02
     72          #define TIMIF_T3OVFIF 0x01
     73          
     74          #define T34CTL_OVFIM  0x80
     75          
     76          #define T134CCTL_IM         0x40    /* Interrupt Mask */
     77          #define T134CCTL_CMP_BITS   0x38    /* Bits[5:3] == CMP[2:0] */
     78          #define T134CCTL_MODE       0x04    /* Capture(0)/Compare(1) mode */
     79          #define T134CCTL_CAP_BITS   0x03    /* Bits[1:0] == CAP[1:0] */
     80          
     81          #define T134CCTL_CMP_OC     0x18    /* Set output on compare, clear at 0 */
     82          #define T134CCTL_CAP_RE     0x01    /* Set input capture on rising edge */
     83          
     84          /* Timer clock pre-scaler definitions for 16bit timer1 */
     85          #define HAL_TIMER1_16_TC_DIV1     0x00  /* No clock pre-scaling */
     86          #define HAL_TIMER1_16_TC_DIV8     0x04  /* Clock pre-scaled by 8 */
     87          #define HAL_TIMER1_16_TC_DIV32    0x08  /* Clock pre-scaled by 32 */
     88          #define HAL_TIMER1_16_TC_DIV128   0x0c  /* Clock pre-scaled by 128 */
     89          #define HAL_TIMER1_16_TC_BITS     0x0c  /* Bits 3:2 */
     90          
     91          /* Timer clock pre-scaler definitions for 8bit timer3 and timer4 */
     92          #define HAL_TIMER34_8_TC_DIV1     0x00  /* No clock pre-scaling */
     93          #define HAL_TIMER34_8_TC_DIV2     0x20  /* Clock pre-scaled by 2 */
     94          #define HAL_TIMER34_8_TC_DIV4     0x40  /* Clock pre-scaled by 4 */
     95          #define HAL_TIMER34_8_TC_DIV8     0x60  /* Clock pre-scaled by 8 */
     96          #define HAL_TIMER34_8_TC_DIV16    0x80  /* Clock pre-scaled by 16 */
     97          #define HAL_TIMER34_8_TC_DIV32    0xA0  /* Clock pre-scaled by 32 */
     98          #define HAL_TIMER34_8_TC_DIV64    0xC0  /* Clock pre-scaled by 64 */
     99          #define HAL_TIMER34_8_TC_DIV128   0xE0  /* Clock pre-scaled by 128 */
    100          #define HAL_TIMER34_8_TC_BITS     0xE0  /* Bits 7:5 */
    101          
    102          /* Operation Mode definitions */
    103          #define HAL_TIMER1_OPMODE_STOP      0x00  /* Free Running Mode, Count from 0 to Max */
    104          #define HAL_TIMER1_OPMODE_FREERUN   0x01  /* Free Running Mode, Count from 0 to Max */
    105          #define HAL_TIMER1_OPMODE_MODULO    0x02  /* Modulo Mode, Count from 0 to CompareValue */
    106          #define HAL_TIMER1_OPMODE_BITS      0x03  /* Bits 1:0 */
    107          
    108          #define HAL_TIMER34_START           0x10  /* Timer3 and Timer4 have separate Start bit */
    109          #define HAL_TIMER34_OPMODE_FREERUN  0x00  /* Free Running Mode, Count from 0 to Max */
    110          #define HAL_TIMER34_OPMODE_MODULO   0x02  /* Modulo Mode, Count from 0 to CompareValue */
    111          #define HAL_TIMER34_OPMODE_BITS     0x03  /* Bits 1:0 */
    112          
    113          #define HAL_TIMER_MODE_STOP         0x03
    114          
    115          /* Prescale settings */
    116          #define HAL_TIMER1_16_PRESCALE      HAL_TIMER1_16_TC_DIV128
    117          #define HAL_TIMER1_16_PRESCALE_VAL  128
    118          #define HAL_TIMER3_8_PRESCALE       HAL_TIMER34_8_TC_DIV128
    119          #define HAL_TIMER3_8_PRESCALE_VAL   128
    120          #define HAL_TIMER4_8_PRESCALE       HAL_TIMER34_8_TC_DIV128
    121          #define HAL_TIMER4_8_PRESCALE_VAL   128
    122          
    123          /* Clock settings */
    124          #define HAL_TIMER_16MHZ           16
    125          #define HAL_TIMER_32MHZ           32
    126          
    127          /* Default all timers to use channel 0 */
    128          #define TCHN_T1CCTL   &(X_T1CCTL0)
    129          #define TCHN_T1CCL    &(X_T1CC0L)
    130          #define TCHN_T1CCH    &(X_T1CC0H)
    131          #define TCNH_T1OVF    &(X_TIMIF)
    132          #define TCHN_T1OVFBIT TIMIF_T1OVFIM
    133          #define TCHN_T1INTBIT IEN1_T1IE
    134          
    135          #define TCHN_T3CCTL   &(X_T3CCTL0)
    136          #define TCHN_T3CCL    &(X_T3CC0)
    137          #define TCHN_T3CCH    &(X_T3CC0)
    138          #define TCNH_T3OVF    &(X_T3CTL)
    139          #define TCHN_T3OVFBIT T34CTL_OVFIM
    140          #define TCHN_T3INTBIT IEN1_T3IE
    141          
    142          #define TCHN_T4CCTL   &(X_T4CCTL0)
    143          #define TCHN_T4CCL    &(X_T4CC0)
    144          #define TCHN_T4CCH    &(X_T4CC0)
    145          #define TCNH_T4OVF    &(X_T4CTL)
    146          #define TCHN_T4OVFBIT T34CTL_OVFIM
    147          #define TCHN_T4INTBIT IEN1_T4IE
    148          
    149          /*********************************************************************
    150           * TYPEDEFS
    151           */
    152          typedef struct
    153          {
    154            bool configured;
    155            bool intEnable;
    156            uint8 opMode;
    157            uint8 channel;
    158            uint8 channelMode;
    159            uint8 prescale;
    160            uint8 prescaleVal;
    161            uint8 clock;
    162            halTimerCBack_t callBackFunc;
    163          } halTimerSettings_t;
    164          
    165          typedef struct
    166          {
    167            uint8 volatile XDATA *TxCCTL;
    168            uint8 volatile XDATA *TxCCH;
    169            uint8 volatile XDATA *TxCCL;
    170            uint8 volatile XDATA *TxOVF;
    171            uint8 ovfbit;
    172            uint8 intbit;
    173          } halTimerChannel_t;
    174          
    175          /*********************************************************************
    176           * GLOBAL VARIABLES
    177           */

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    178          static halTimerSettings_t halTimerRecord[HW_TIMER_MAX];
   \                     ??halTimerRecord:
   \   000000                DS 33

   \                                 In segment XDATA_Z, align 1, keep-with-next
   \   000000                REQUIRE __INIT_XDATA_Z
    179          static halTimerChannel_t  halTimerChannel[HW_TIMER_MAX];
   \                     ??halTimerChannel:
   \   000000                DS 30
    180          
    181          /*********************************************************************
    182           * FUNCTIONS - External
    183           */
    184          
    185          /*********************************************************************
    186           * FUNCTIONS - Local
    187           */
    188          uint8 halTimerSetCount (uint8 cc2430id, uint32 timePerTick);
    189          uint8 halTimerSetPrescale (uint8 cc2430id, uint8 prescale);
    190          uint8 halTimerSetOpMode (uint8 cc2430id, uint8 opMode);
    191          uint8 halTimerSetChannelMode (uint8 cc2430id, uint8 channelMode);
    192          void halTimerSendCallBack (uint8 timerId, uint8 channel, uint8 channelMode);
    193          uint8 halTimerRemap (uint8 timerId);
    194          void halProcessTimer1 (void);
    195          void halProcessTimer3 (void);
    196          void halProcessTimer4 (void);
    197          
    198          
    199          /*********************************************************************
    200           * FUNCTIONS - API
    201           */
    202          
    203          /*********************************************************************
    204           * @fn      HalTimerInit
    205           *
    206           * @brief   Initialize Timer Service
    207           *
    208           * @param   None
    209           *
    210           * @return  None
    211           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    212          void HalTimerInit (void)
   \                     HalTimerInit:
    213          {
   \   000000   C082         PUSH    DPL
   \   000002   C083         PUSH    DPH
   \   000004                ; Saved register size: 2
   \   000004                ; Auto size: 0
    214            T1CCTL0 = 0;    /* Make sure interrupts are disabled */
   \   000004   75E500       MOV     0xe5,#0x0
    215            T1CCTL1 = 0;    /* Make sure interrupts are disabled */
   \   000007   75E600       MOV     0xe6,#0x0
    216            T1CCTL2 = 0;    /* Make sure interrupts are disabled */
   \   00000A   75E700       MOV     0xe7,#0x0
    217            T3CCTL0 = 0;    /* Make sure interrupts are disabled */
   \   00000D   75CC00       MOV     0xcc,#0x0
    218            T3CCTL1 = 0;    /* Make sure interrupts are disabled */
   \   000010   75CE00       MOV     0xce,#0x0
    219            T4CCTL0 = 0;    /* Make sure interrupts are disabled */
   \   000013   75EC00       MOV     0xec,#0x0
    220            T4CCTL1 = 0;    /* Make sure interrupts are disabled */
   \   000016   75EE00       MOV     0xee,#0x0
    221          
    222            /* Setup prescale & clock for timer0 */
    223            halTimerRecord[HW_TIMER_1].prescale    = HAL_TIMER1_16_PRESCALE;
   \   000019   740C         MOV     A,#0xc
   \   00001B   90....       MOV     DPTR,#(??halTimerRecord + 5)
   \   00001E   F0           MOVX    @DPTR,A
    224            halTimerRecord[HW_TIMER_1].clock       = HAL_TIMER_32MHZ;
   \   00001F   7420         MOV     A,#0x20
   \   000021   90....       MOV     DPTR,#(??halTimerRecord + 7)
   \   000024   F0           MOVX    @DPTR,A
    225            halTimerRecord[HW_TIMER_1].prescaleVal = HAL_TIMER1_16_PRESCALE_VAL;
   \   000025   7480         MOV     A,#-0x80
   \   000027   90....       MOV     DPTR,#(??halTimerRecord + 6)

⌨️ 快捷键说明

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