/* * initialize hardware * e.g. timer for millis/micros/pulseIn * For Arduino & mbed, no need to call this. * Within Seeed firmware of Mesh Bee, we have called this at a proper place. */ void suli_init(void) { //init timer0 for millis/micros vAHI_TimerDIOControl(E_AHI_TIMER_0, FALSE); vAHI_TimerEnable(E_AHI_TIMER_0, 4, FALSE, TRUE, FALSE); //1us/tick, period interrupt, no-output vAHI_TimerStartRepeat(E_AHI_TIMER_0, 30000, 60000); //60ms/repeat }
/**************************************************************************** * * NAME: LAMP_vInit * * DESCRIPTION: Initialises the lamp drive system * * PARAMETERS: Name RW Usage * * * RETURNS: * void * ****************************************************************************/ PUBLIC void DriverBulb_vInit(void) { bool_t bLampTimerInt = FALSE; static bool_t bInit = FALSE; if (bInit==TRUE) { /* Mimic PWM to led ? */ #if (LAMP_LED_PIN < 21) { /* Configure as output */ vAHI_DioSetDirection(0, (1 << LAMP_LED_PIN)); /* Turn CFL lamp off */ vAHI_DioSetOutput((1 << LAMP_LED_PIN), 0); /* Register interrupt callback */ #if (JENNIC_CHIP == JN5148) || (JENNIC_CHIP == JN5148J01) vAHI_Timer1RegisterCallback(vCbTimer1); #else vAHI_Timer3RegisterCallback(vCbTimer1); #endif /* Note we want to generate interrupts */ bLampTimerInt = TRUE; } #endif /* Indicate gateway mode on LED ? */ #if (LAMP_GW_PIN < 21) { /* Configure as output */ vAHI_DioSetDirection(0, (1 << LAMP_GW_PIN)); } #endif /* Configure timer 0 to generate a PWM output on its output pin */ vAHI_TimerEnable(LAMP_TIMER, LAMP_TIMER_PRESCALE, bLampTimerInt, bLampTimerInt, TRUE); vAHI_TimerConfigureOutputs(LAMP_TIMER, FALSE, TRUE); vAHI_TimerClockSelect(LAMP_TIMER, FALSE, TRUE); /********************************************/ /* Voltage Monitoring System Initialisation */ /********************************************/ gu32BusVoltage = 0; } bInit=TRUE; /* 2nd late call will be used for initialisation */ }
/**************************************************************************** * * NAME: LAMP_vInit * * DESCRIPTION: Initialises the lamp drive system * * PARAMETERS: Name RW Usage * * * RETURNS: * void * ****************************************************************************/ PUBLIC void DriverBulb_vInit(void) { bool_t bLampTimerInt = FALSE; static bool_t bInit = FALSE; if (bInit == FALSE) { /* Configure DIO pins */ vAHI_DioSetDirection(0, (LAMP_ON_OFF_MASK | (1 <<LAMP_BLEEDER_PIN))); /* Turn CFL lamp off */ vAHI_DioSetOutput(0, LAMP_ON_OFF_MASK); /* Mimic PWM to led ? */ #if (LAMP_LED_PIN < 21) { /* Configure as output */ vAHI_DioSetDirection(0, (1 << LAMP_LED_PIN)); /* Turn CFL lamp off */ vAHI_DioSetOutput(0, (1 << LAMP_LED_PIN)/*, 0*/); /* Register interrupt callback */ vAHI_Timer0RegisterCallback(vCbTimer0); /* Note we want to generate interrupts */ bLampTimerInt = TRUE; } #endif /* Configure timer 0 to generate a PWM output on its output pin */ vAHI_TimerEnable(LAMP_TIMER, LAMP_TIMER_PRESCALE, bLampTimerInt, bLampTimerInt, TRUE); vAHI_TimerConfigureOutputs(LAMP_TIMER, FALSE, TRUE); vAHI_TimerClockSelect(LAMP_TIMER, FALSE, TRUE); /* turn on lamp - this is the default state */ vAHI_DioSetOutput((1 << LAMP_BLEEDER_PIN),0); vAHI_DioSetOutput(LAMP_ON_OFF_MASK,0); vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_8, E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF); while (!bAHI_APRegulatorEnabled()); /* spin on reg not enabled */ vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT, E_AHI_AP_INPUT_RANGE_2, ADC_USED); do { vAHI_AdcStartSample(); while(bAHI_AdcPoll()); gu32BusVoltage = ((uint32)u16AHI_AdcRead()*VBUS_MAXIMUM) >> ADC_BITS; } while (gu32BusVoltage< VBUS_TRIP_LO); vAHI_AdcDisable(); vAHI_ApConfigure(E_AHI_AP_REGULATOR_DISABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_8, E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF); vAHI_TimerStartRepeat(LAMP_TIMER, PWM_COUNT, PWM_COUNT ); bInit = TRUE; bIsOn = TRUE; }