예제 #1
0
/****************************************************************************
 *
 * NAME:       bAppQApiInit
 *
 * DESCRIPTION:
 * Initialised the Application Queue API, Application API and stack. Creates
 * the queues used for passing information up to the application and fills
 * the 'spare buffers' queues with the spare buffer entries. Also registers
 * the callback handlers with the Application API layer so all upward
 * information comes through this module.
 *
 * PARAMETERS: Name            RW  Usage
 *             prMlmeCallback  R   Optional callback when MLME received
 *             prMcpsCallback  R   Optional callback when MCPS received
 *             prHwCallback    R   Optional callback when HW int received
 *
 * RETURNS:
 * TRUE if initialisation was successful
 *
 ****************************************************************************/
PUBLIC uint32 u32AppQApiInit(PR_QIND_CALLBACK prMlmeCallback,
                             PR_QMCPS_CALLBACK prMcpsCallback,
                             PR_HWQINT_CALLBACK prHwCallback)
{
    int i;

    /* Initialise 'spare buffers' queues and fill with spare buffers */
    vFifoInit(&sMlmeIndBufferQueue, apvMlmeIndBufferData, APP_MAX_MLME_IND);
    for (i = 0; i < APP_MAX_MLME_IND; i++)
    {
        bFifoPush(&sMlmeIndBufferQueue, (void *)&asMlmeIndBuffer[i]);
    }

    vFifoInit(&sMcpsIndBufferQueue, apvMcpsIndBufferData, APP_MAX_MCPS_IND);
    for (i = 0; i < APP_MAX_MCPS_IND; i++)
    {
        bFifoPush(&sMcpsIndBufferQueue, (void *)&asMcpsIndBuffer[i]);
    }

    vFifoInit(&sHwIndBufferQueue, apvHwIndBufferData, APP_MAX_HW_IND);
    for (i = 0; i < APP_MAX_HW_IND; i++)
    {
        bFifoPush(&sHwIndBufferQueue, (void *)&asHwIndBuffer[i]);
    }

    /* Initialise 'used buffers' queues */
    vFifoInit(&sMlmeIndQueue, apvMlmeIndData, APP_MAX_MLME_IND);
    vFifoInit(&sMcpsIndQueue, apvMcpsIndData, APP_MAX_MCPS_IND);
    vFifoInit(&sHwIndQueue,   apvHwIndData,   APP_MAX_HW_IND);

    /* Store callbacks */
    prAppMlmeCallback = prMlmeCallback;
    prAppMcpsCallback = prMcpsCallback;
    prAppHwCallback = prHwCallback;

    /* Register peripheral callbacks */
    vAHI_SysCtrlRegisterCallback(vAppQApiPostHwInt);
    vAHI_APRegisterCallback(vAppQApiPostHwInt);
#ifndef GDB
    vAHI_Uart0RegisterCallback(vAppQApiPostHwInt);
#endif
    vAHI_Uart1RegisterCallback(vAppQApiPostHwInt);
    vAHI_TickTimerInit(vAppQApiPostHwInt);
    vAHI_SpiRegisterCallback(vAppQApiPostHwInt);
    vAHI_SiRegisterCallback(vAppQApiPostHwInt);
    vAHI_Timer0RegisterCallback(vAppQApiPostHwInt);
    vAHI_Timer1RegisterCallback(vAppQApiPostHwInt);

    /* Register this layer with AppApi layer */
    return u32AppApiInit(psAppQApiGetMlmeBuffer, vAppQApiPostMlme, NULL,
                         psAppQApiGetMcpsBuffer, vAppQApiPostMcps, NULL);
}
예제 #2
0
/****************************************************************************
 *
 * 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;

	}