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

📄 hal_timer.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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)
   \   00002A   F0           MOVX    @DPTR,A
    226          
    227            /* Setup prescale & clock for timer2 */
    228            halTimerRecord[HW_TIMER_3].prescale    = HAL_TIMER3_8_PRESCALE;
   \   00002B   74E0         MOV     A,#-0x20
   \   00002D   90....       MOV     DPTR,#(??halTimerRecord + 16)
   \   000030   F0           MOVX    @DPTR,A
    229            halTimerRecord[HW_TIMER_3].clock       = HAL_TIMER_32MHZ;
   \   000031   7420         MOV     A,#0x20
   \   000033   90....       MOV     DPTR,#(??halTimerRecord + 18)
   \   000036   F0           MOVX    @DPTR,A
    230            halTimerRecord[HW_TIMER_3].prescaleVal = HAL_TIMER3_8_PRESCALE_VAL;
   \   000037   7480         MOV     A,#-0x80
   \   000039   90....       MOV     DPTR,#(??halTimerRecord + 17)
   \   00003C   F0           MOVX    @DPTR,A
    231          
    232            /* Setup prescale & clock for timer3 */
    233            halTimerRecord[HW_TIMER_4].prescale    = HAL_TIMER4_8_PRESCALE;
   \   00003D   74E0         MOV     A,#-0x20
   \   00003F   90....       MOV     DPTR,#(??halTimerRecord + 27)
   \   000042   F0           MOVX    @DPTR,A
    234            halTimerRecord[HW_TIMER_4].clock       = HAL_TIMER_32MHZ;
   \   000043   7420         MOV     A,#0x20
   \   000045   90....       MOV     DPTR,#(??halTimerRecord + 29)
   \   000048   F0           MOVX    @DPTR,A
    235            halTimerRecord[HW_TIMER_4].prescaleVal = HAL_TIMER4_8_PRESCALE_VAL;
   \   000049   7480         MOV     A,#-0x80
   \   00004B   90....       MOV     DPTR,#(??halTimerRecord + 28)
   \   00004E   F0           MOVX    @DPTR,A
    236          
    237            /* Setup Timer1 Channel structure */
    238            halTimerChannel[HW_TIMER_1].TxCCTL =  TCHN_T1CCTL;
   \   00004F   90....       MOV     DPTR,#??halTimerChannel
   \   000052   74E5         MOV     A,#-0x1b
   \   000054   12....       LCALL   ??Subroutine0_0 & 0xFFFF
    239            halTimerChannel[HW_TIMER_1].TxCCL =   TCHN_T1CCL;
   \                     ??CrossCallReturnLabel_0:
   \   000057   90....       MOV     DPTR,#(??halTimerChannel + 4)
   \   00005A   74DA         MOV     A,#-0x26
   \   00005C   12....       LCALL   ??Subroutine0_0 & 0xFFFF
    240            halTimerChannel[HW_TIMER_1].TxCCH =   TCHN_T1CCH;
   \                     ??CrossCallReturnLabel_1:
   \   00005F   90....       MOV     DPTR,#(??halTimerChannel + 2)
   \   000062   74DB         MOV     A,#-0x25
   \   000064   12....       LCALL   ??Subroutine0_0 & 0xFFFF
    241            halTimerChannel[HW_TIMER_1].TxOVF =   TCNH_T1OVF;

⌨️ 快捷键说明

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