Ejemplo n.º 1
0
void Gpt_Init(const Gpt_ConfigType *config)
{
	uint32_t i=0;
	const Gpt_ConfigType *cfg;
	VALIDATE( (Gpt_Global.initRun == STD_OFF), GPT_INIT_SERVICE_ID, GPT_E_ALREADY_INITIALIZED );
	VALIDATE( (config != NULL ), GPT_INIT_SERVICE_ID, GPT_E_PARAM_POINTER );
	Gpt_ChannelType ch;

	for (i=0; i<GPT_CHANNEL_CNT; i++)
	{
		Gpt_Global.channelMap[i] = GPT_CHANNEL_ILL;
	}

	i = 0;
	cfg = config;
	while (cfg->GptChannelId != GPT_CHANNEL_ILL)
	{
		ch = cfg->GptChannelId;

		// Assign the configuration channel used later..
		Gpt_Global.channelMap[cfg->GptChannelId] = i;
		Gpt_Global.configured |= (1<<ch);

		if (ch <= GPT_CHANNEL_CNT)
		{
			if (cfg->GptNotification != NULL)
			{
				switch (ch) {
					case 0: ISR_INSTALL_ISR2( "Gpt_Isr", Gpt_Isr, TIM1_UP_IRQn, 6, 0 ); break;
					case 1: ISR_INSTALL_ISR2( "Gpt_Isr", Gpt_Isr, TIM2_IRQn,    6, 0 ); break;
					case 2: ISR_INSTALL_ISR2( "Gpt_Isr", Gpt_Isr, TIM3_IRQn,    6, 0 ); break;
					case 3: ISR_INSTALL_ISR2( "Gpt_Isr", Gpt_Isr, TIM4_IRQn,    6, 0 ); break;
					default:
						break;
				}
			}
		}
#if defined(USE_KERNEL)
		// Don't install if we use kernel.. it handles that.
#else

#endif

		Gpt_Unit[i].state = GPT_STATE_INITIALIZED;
		Gpt_Unit[i].expiredWhenStopped = FALSE;

		cfg++;
		i++;
	}

	Gpt_Global.config = config;

	Gpt_Global.initRun = STD_ON;
	//PIT.CTRL.B.MDIS = 0;
}
Ejemplo n.º 2
0
void Adc_Init (const Adc_ConfigType *ConfigPtr)
{
  Adc_GroupType group;
  /* @req SWS_Adc_00342 */
  if (E_OK == Adc_CheckInit(adcState, ConfigPtr))
  {
    /* First of all, store the location of the configuration data. */
    AdcConfigPtr = ConfigPtr;

    // Connect interrupt to correct isr
	ISR_INSTALL_ISR2("ADC",Adc_GroupConversionComplete,IRQ_TYPE_ATD0,6,0);


	ATD0CTL2   = BM_ADPU | BM_AFFC | BM_ASCIE;	/* power enable, Fast Flag Clear, irq enable*/
    ATD0CTL3   = 0x03;	/* 8 conversions per sequence default, freeze enable */

    ATD0CTL4   = (ConfigPtr->hwConfigPtr->resolution << 7) |
    		     (ConfigPtr->hwConfigPtr->convTime << 5) |
    		      ConfigPtr->hwConfigPtr->adcPrescale;

    for (group = 0; group < ADC_NBR_OF_GROUPS; group++)
    {
      /* @req  SWS_Adc_00307 */
      ConfigPtr->groupConfigPtr[group].status->groupStatus = ADC_IDLE;
    }

    /* Move on to INIT state. */
    adcState = ADC_STATE_INIT;
  }
}
Ejemplo n.º 3
0
/**
 * Speed sensor initialization
 *
 * Basically, initialize GPIO pins connected to the speed sensor
 * to detect rising edges. Also, install an interrupt to count the
 * rising edges.
 */
void SpeedSensor_Init(void){

	/* Configure the pins connected to the wheel speed sensor as input pins */
	bcm2835_GpioFnSel(GPIO_FRONT_SPEED, GPFN_IN);
	bcm2835_GpioFnSel(GPIO_REAR_SPEED, GPFN_IN);

    /* Enable the pins to detect falling edge signals */
	bcm2835_SetReadWriteGpioReg(&GPFEN0, GPIO_FRONT_SPEED);
	bcm2835_SetReadWriteGpioReg(&GPFEN0, GPIO_REAR_SPEED);

	/* Reset edge statuses (sometimes they have been seen to be non-zero at start-up) */
	bcm2835_ClearEventDetectPin(GPIO_FRONT_SPEED);
	bcm2835_ClearEventDetectPin(GPIO_REAR_SPEED);

	/* Install an interrupt to handle falling edge signals
	 * Format: ISR_INSTALL(_name, _entryFunction, _irqVector, _priority, _appOwner)
	 * (for more details on irqVector, see the interrupts table on p.113 in BCM2835-ARM-Peripherals.pdf) */
    ISR_INSTALL_ISR2("GPIO0", bcm2835_GpioIsr, BCM2835_IRQ_ID_GPIO_0, 2, 0);

	/* Enable the installed interrupt by setting the appropriate HW register */
	bcm2835_SetReadWriteGpioReg(&IRQ_ENABLE1, BCM2835_IRQ_ID_GPIO_0);
}
Ejemplo n.º 4
0
/**
 * Init of free running timer.
 */
void Os_SysTickInit( void ) {
	ISR_INSTALL_ISR2("OsTick", OsTick, SysTick_IRQn, 6, 0);
}
Ejemplo n.º 5
0
void Lin_InitChannel(  uint8 Channel,   const Lin_ChannelConfigType* Config )
{
	volatile struct LINFLEX_tag * LINFLEXHw = LINFLEX(Channel);
	enum
	{
	  LIN_PRIO = 3
	};

	VALIDATE( (Config!=0), LIN_INIT_CHANNEL_SERVICE_ID, LIN_E_INVALID_POINTER );
	VALIDATE( (LinDriverStatus != LIN_UNINIT), LIN_INIT_CHANNEL_SERVICE_ID, LIN_E_UNINIT );
	VALIDATE( (Channel < LIN_CONTROLLER_CNT), LIN_INIT_CHANNEL_SERVICE_ID, LIN_E_INVALID_CHANNEL );

	/* Install the interrupt */
	switch(Channel){
	case 0:
		ISR_INSTALL_ISR2("LinIsrRxA", LinInterruptRxA, (IrqType)(LINFLEX_0_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxA", LinInterruptTxA, (IrqType)(LINFLEX_0_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrA", LinInterruptErrA, (IrqType)(LINFLEX_0_ERR),LIN_PRIO, 0);
		break;
	case 1:
		ISR_INSTALL_ISR2("LinIsrRxB", LinInterruptRxB, (IrqType)(LINFLEX_1_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxB", LinInterruptTxB, (IrqType)(LINFLEX_1_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrB", LinInterruptErrB, (IrqType)(LINFLEX_1_ERR),LIN_PRIO, 0);
		break;
#if defined (CFG_MPC560XB)
	case 2:
		ISR_INSTALL_ISR2("LinIsrRxC", LinInterruptRxC, (IrqType)(LINFLEX_2_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxC", LinInterruptTxC, (IrqType)(LINFLEX_2_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrC", LinInterruptErrC, (IrqType)(LINFLEX_2_ERR),LIN_PRIO, 0);
		break;
#if !defined (CFG_MPC5602B)
	case 3:
		ISR_INSTALL_ISR2("LinIsrRxD", LinInterruptRxD, (IrqType)(LINFLEX_3_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxD", LinInterruptTxD, (IrqType)(LINFLEX_3_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrD", LinInterruptErrD, (IrqType)(LINFLEX_3_ERR),LIN_PRIO, 0);
		break;
#endif
#endif
#if defined (CFG_MPC5606B)
	case 4:
		ISR_INSTALL_ISR2("LinIsrRxE", LinInterruptRxE, (IrqType)(LINFLEX_4_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxE", LinInterruptTxE, (IrqType)(LINFLEX_4_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrE", LinInterruptErrE, (IrqType)(LINFLEX_4_ERR),LIN_PRIO, 0);
		break;
	case 5:
		ISR_INSTALL_ISR2("LinIsrRxF", LinInterruptRxF, (IrqType)(LINFLEX_5_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxF", LinInterruptTxF, (IrqType)(LINFLEX_5_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrF", LinInterruptErrF, (IrqType)(LINFLEX_5_ERR),LIN_PRIO, 0);
		break;
	case 6:
		ISR_INSTALL_ISR2("LinIsrRxG", LinInterruptRxG, (IrqType)(LINFLEX_6_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxG", LinInterruptTxG, (IrqType)(LINFLEX_6_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrG", LinInterruptErrG, (IrqType)(LINFLEX_6_ERR),LIN_PRIO, 0);
		break;
	case 7:
		ISR_INSTALL_ISR2("LinIsrRxH", LinInterruptRxH, (IrqType)(LINFLEX_7_RXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrTxH", LinInterruptTxH, (IrqType)(LINFLEX_7_TXI),LIN_PRIO, 0);
		ISR_INSTALL_ISR2("LinIsrErrH", LinInterruptErrH, (IrqType)(LINFLEX_7_ERR),LIN_PRIO, 0);
		break;
#endif

	default:
		break;
	}

	/* configure and enable channel */
	LINFLEXHw->LINCR1.B.INIT = 1; /* Go to init mode */
	LINFLEXHw->LINCR1.R = 1; /* Clear all */
	LINFLEXHw->LINCR1.B.MBL = 3; /* 13 bit synch */
	LINFLEXHw->LINCR1.B.MME = 1; /* Master mode */
	LINFLEXHw->LINCR1.B.CCD = 0;
	LINFLEXHw->LINCR1.B.CFD = 0;
	LINFLEXHw->LINCR1.B.LASE = 0;
	LINFLEXHw->LINCR1.B.AWUM = 0;
	LINFLEXHw->LINCR1.B.BF = 0;
	LINFLEXHw->LINCR1.B.SLFM = 0;
	LINFLEXHw->LINCR1.B.LBKM = 0;
	LINFLEXHw->LINCR1.B.SBDT = 0;
	LINFLEXHw->LINCR1.B.RBLM = 0;
	LINFLEXHw->LINCR1.B.SLEEP = 0;

	LINFLEXHw->LINIER.R = 0; /* Reset all bits */
	LINFLEXHw->LINIER.B.BEIE = 1; /* Bit error */
	LINFLEXHw->LINIER.B.CEIE = 1; /* Checksum error */
	LINFLEXHw->LINIER.B.HEIE = 1; /* Header error */
	LINFLEXHw->LINIER.B.BOIE = 1; /* Buffer overrun error */
	LINFLEXHw->LINIER.B.FEIE = 1; /* Framing error */

	LINFLEXHw->LINIER.B.DRIE = 1; /* Data Reception Complete */
	LINFLEXHw->LINIER.B.DTIE = 1; /* Data Transmitted */

	/*
	 * Tx/ Rx baud = fperiph_set_1_clk / (16 × LFDIV)
	 *
	 * To program LFDIV = 25.62d,
	 * LINFBRR = 16 × 0.62 = 9.92, nearest real number 10d = 0xA
	 * LINIBRR = mantissa (25.620d) = 25d = 0x19
	 */
	float lfdiv = (float)McuE_GetPeripheralClock( PERIPHERAL_CLOCK_LIN_A) / (float)((16*Config->LinChannelBaudRate));

	LINFLEXHw->LINFBRR.B.DIV_F = (uint8)((lfdiv - (uint32)lfdiv) * 16); /* Fraction bits */
	LINFLEXHw->LINIBRR.B.DIV_M = (uint16)lfdiv; /* Integer bits */

	LINFLEXHw->LINCR2.R = 0; /* Reset all bits */
	LINFLEXHw->LINCR2.B.IOBE = 1; /* Idle on bit error */
	LINFLEXHw->LINCR2.B.IOPE = 1; /* Idle on parity error */

	/* Status regs */
    LINFLEXHw->LINSR.R = 0xffffffff; /* Reset all bits */
    LINFLEXHw->LINESR.R = 0xffffffff; /* Reset all bits */

	LINFLEXHw->LINCR1.B.INIT = 0; /* Go to normal mode */

	LinChannelStatus[Channel]=LIN_CH_OPERATIONAL;
}
Ejemplo n.º 6
0
/**
 * Init of free running timer.
 */
void Os_SysTickInit( void ) {
	//TEMPORARY COMMENTED
//	bcm2835_gpio_fnsel(ONBOARD_LED_PAD, GPFN_OUT);
	ISR_INSTALL_ISR2("OsTick",Bcm2835OsTick,BCM2835_IRQ_ID_TIMER_0/*BCM2835_IRQ_ID_SYSTEM_TIMER3*/,6,0);
}
Ejemplo n.º 7
0
/**
 * Init of free running timer.
 */
void Os_SysTickInit( void ) {
	ISR_INSTALL_ISR2("OsTick",OsTick,IRQ_INTOSTM0,6,0);
}