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; }
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; } }
/** * 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); }
/** * Init of free running timer. */ void Os_SysTickInit( void ) { ISR_INSTALL_ISR2("OsTick", OsTick, SysTick_IRQn, 6, 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; }
/** * 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); }
/** * Init of free running timer. */ void Os_SysTickInit( void ) { ISR_INSTALL_ISR2("OsTick",OsTick,IRQ_INTOSTM0,6,0); }