/* * 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_vSetLevel * * DESCRIPTION: Updates the PWM outputs * * * PARAMETERS: Name RW Usage * u8Level R Light level 0-LAMP_LEVEL_MAX * * RETURNS: * void * ****************************************************************************/ PUBLIC void DriverBulb_vSetLevel(uint8 u8Level) { uint32 u32DimmerPWM; u32DimmerPWM = au8Correction[(u8Level >> 1)]; u32DimmerPWM = (PWM_COUNT*u32DimmerPWM) / LAMP_LEVEL_MAX; vAHI_TimerStartRepeat(LAMP_TIMER, (PWM_COUNT-u32DimmerPWM), PWM_COUNT ); gu16PwmLastValue = PWM_COUNT-u32DimmerPWM; }
/**************************************************************************** * * 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; }