关于ZStack-CC2530-2.3.0-1.4.0 系统时钟初始化
时间:10-02
整理:3721RD
点击:
osal中timer初始化:
void osalTimerInit( void ) { osal_systemClock = 0; }
hal中初始化:
typedef struct { bool configured; bool intEnable; uint8 opMode; uint8 channel; uint8 channelMode; uint8 prescale; uint8 prescaleVal; uint8 clock; halTimerCBack_t callBackFunc; } halTimerSettings_t; typedef struct { uint8 volatile XDATA *TxCCTL; uint8 volatile XDATA *TxCCH; uint8 volatile XDATA *TxCCL; uint8 volatile XDATA *TxOVF; uint8 ovfbit; uint8 intbit; } halTimerChannel_t; /********************************************************************* * GLOBAL VARIABLES */ static halTimerSettings_t halTimerRecord[HW_TIMER_MAX]; static halTimerChannel_t halTimerChannel[HW_TIMER_MAX]; void HalTimerInit (void) { T1CCTL0 = 0; /* Make sure interrupts are disabled */ T1CCTL1 = 0; /* Make sure interrupts are disabled */ T1CCTL2 = 0; /* Make sure interrupts are disabled */ T3CCTL0 = 0; /* Make sure interrupts are disabled */ T3CCTL1 = 0; /* Make sure interrupts are disabled */ T4CCTL0 = 0; /* Make sure interrupts are disabled */ T4CCTL1 = 0; /* Make sure interrupts are disabled */ /* Setup prescale & clock for timer0 */ halTimerRecord[HW_TIMER_1].prescale = HAL_TIMER1_16_PRESCALE; halTimerRecord[HW_TIMER_1].clock = HAL_TIMER_32MHZ; halTimerRecord[HW_TIMER_1].prescaleVal = HAL_TIMER1_16_PRESCALE_VAL; /* Setup prescale & clock for timer2 */ halTimerRecord[HW_TIMER_3].prescale = HAL_TIMER3_8_PRESCALE; halTimerRecord[HW_TIMER_3].clock = HAL_TIMER_32MHZ; halTimerRecord[HW_TIMER_3].prescaleVal = HAL_TIMER3_8_PRESCALE_VAL; /* Setup prescale & clock for timer3 */ halTimerRecord[HW_TIMER_4].prescale = HAL_TIMER4_8_PRESCALE; halTimerRecord[HW_TIMER_4].clock = HAL_TIMER_32MHZ; halTimerRecord[HW_TIMER_4].prescaleVal = HAL_TIMER4_8_PRESCALE_VAL; /* Setup Timer1 Channel structure */ halTimerChannel[HW_TIMER_1].TxCCTL = TCHN_T1CCTL; halTimerChannel[HW_TIMER_1].TxCCL = TCHN_T1CCL; halTimerChannel[HW_TIMER_1].TxCCH = TCHN_T1CCH; halTimerChannel[HW_TIMER_1].TxOVF = TCNH_T1OVF; halTimerChannel[HW_TIMER_1].ovfbit = TCHN_T1OVFBIT; halTimerChannel[HW_TIMER_1].intbit = TCHN_T1INTBIT; /* Setup Timer3 Channel structure */ halTimerChannel[HW_TIMER_3].TxCCTL = TCHN_T3CCTL; halTimerChannel[HW_TIMER_3].TxCCL = TCHN_T3CCL; halTimerChannel[HW_TIMER_3].TxCCH = TCHN_T3CCH; halTimerChannel[HW_TIMER_3].TxOVF = TCNH_T3OVF; halTimerChannel[HW_TIMER_3].ovfbit = TCHN_T3OVFBIT; halTimerChannel[HW_TIMER_3].intbit = TCHN_T3INTBIT; /* Setup Timer4 Channel structure */ halTimerChannel[HW_TIMER_4].TxCCTL = TCHN_T4CCTL; halTimerChannel[HW_TIMER_4].TxCCL = TCHN_T4CCL; halTimerChannel[HW_TIMER_4].TxCCH = TCHN_T4CCH; halTimerChannel[HW_TIMER_4].TxOVF = TCNH_T4OVF; halTimerChannel[HW_TIMER_4].ovfbit = TCHN_T4OVFBIT; halTimerChannel[HW_TIMER_4].intbit = TCHN_T4INTBIT; }
void InitBoard( uint8 level ) { if ( level == OB_COLD ) { // Interrupts off osal_int_disable( INTS_ALL ); // Turn all LEDs off HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF ); // Check for Brown-Out reset ChkReset(); } else // !OB_COLD { /* Initialize Key stuff */ OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE; //DISABLE HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback); } }
这里也没有
我把hal_timer.h中HalTimerConfig和HalTimerStart屏蔽了也没有报错
请问系统时钟是在哪里开启的
这个是定时器的使用初始化。
SLEEPCMD &= ~OSC_PD; /* turn on 16MHz RC and 32MHz XOSC */ \
while (!(SLEEPSTA & XOSC_STB)); /* wait for 32MHz XOSC stable */ \
asm("NOP"); /* chip bug workaround */ \
for (i=0; i<504; i++) asm("NOP"); /* Require 63us delay for all revs */ \
CLKCONCMD = CLKCONCMD_VALUE; /* Select 32MHz XOSC and the source for 32K clock */ \
while (CLKCONSTA != CLKCONCMD_VALUE); /* Wait for the change to be effective */ \
SLEEPCMD |= OSC_PD; /* turn off 16MHz RC */
系统时钟是根据MAC Timer来更新的。
void osal_run_system( void )
{
uint8 idx = 0;
osalTimeUpdate();
...
}