Ejemplo n.º 1
0
/**
 * Initialize internal state of the cpu load process.
 */
void cpu_load_process_init()
{
	(void)gpc_setup_reg(GPROT_CPU_LOAD, (u16 *)&cpu_load_process_state.mean_cycles);
	(void)gpc_setup_reg(GPROT_CPU_LOAD_MAX, (u16 *)&cpu_load_process_state.max_cycles);
	(void)gpc_setup_reg(GPROT_CPU_LOAD_MIN, (u16 *)&cpu_load_process_state.min_cycles);
	(void)sys_tick_timer_register(cpu_load_process_soft_timer_callback,
				CLP__TIME_BASE);
	cpu_load_process_reset();
}
Ejemplo n.º 2
0
/**
 * Sys Tick soft timer test main function
 */
int main(void){
	uint32_t timer;

	mcu_init();
	led_init();
	sys_tick_init();

	(void)sys_tick_timer_register(sys_tick_timer_callback, 1000000);

	while (true) {
		timer = sys_tick_get_timer();
		while (!sys_tick_check_timer(timer, 50000)) {
			__asm("nop");
		}
		TOGGLE(LED_GREEN);
	}
}
Ejemplo n.º 3
0
/**
 * Callback from the soft sys tick timer
 */
void sys_tick_timer_callback(int id)
{
	(void)sys_tick_timer_register(sys_tick_timer_callback_one_shot,
				      100000);
}
Ejemplo n.º 4
0
/**
 * Initialize the ADC peripherals and internal state of the driver
 */
void adc_init(void)
{
	NVIC_InitTypeDef nvic;
	GPIO_InitTypeDef gpio;
	ADC_InitTypeDef adc;

	/* enable ADC1 clock */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
			       RCC_APB2Periph_ADC1, ENABLE);

	/* Configure and enable ADC interrupt */
	nvic.NVIC_IRQChannel = ADC1_2_IRQn;
	nvic.NVIC_IRQChannelPreemptionPriority = 0;
	nvic.NVIC_IRQChannelSubPriority = 0;
	nvic.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&nvic);

	/* GPIOA: ADC Channel 0, 1, 2, 3 as analog input
	 * Ch 3 -> Battery Voltage
	 * Ch 4 -> Current
	 * Ch 5 -> Temperature
	 */
	gpio.GPIO_Pin =
		GPIO_Pin_3 |
		GPIO_Pin_4 |
		GPIO_Pin_5;
	gpio.GPIO_Mode = GPIO_Mode_AIN;
	gpio.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &gpio);

	adc_data.battery_voltage = 0;
	adc_data.current = 0;
	adc_data.temp = 0;

	/* Configure ADC1 */
	adc.ADC_Mode = ADC_Mode_Independent;
	adc.ADC_ScanConvMode = ENABLE;
	adc.ADC_ContinuousConvMode = ENABLE;
	adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	adc.ADC_DataAlign = ADC_DataAlign_Right;
	adc.ADC_NbrOfChannel = 0;
	ADC_Init(ADC1, &adc);

	ADC_InjectedSequencerLengthConfig(ADC1, 3);

	ADC_InjectedChannelConfig(ADC1, ADC_CHANNEL_BATTERY_VOLTAGE, 1,
				  ADC_SampleTime_239Cycles5);
	ADC_InjectedChannelConfig(ADC1, ADC_CHANNEL_CURRENT, 2,
				  ADC_SampleTime_239Cycles5);
	ADC_InjectedChannelConfig(ADC1, ADC_CHANNEL_TEMP, 3,
				  ADC_SampleTime_239Cycles5);

        /* ADC1 injected external trigger configuration */
        ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);

	/* Enable ADC1 JEOC interrupt */
	ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);

	/* Enable ADC1 */
	ADC_Cmd(ADC1, ENABLE);

	/* Enable ADC1 reset calibaration register */
	ADC_ResetCalibration(ADC1);

	/* Check the end of ADC1 reset calibration */
	while (ADC_GetResetCalibrationStatus(ADC1) == SET) ;

	/* Start ADC1 calibaration */
	ADC_StartCalibration(ADC1);

	/* Check the end of ADC1 calibration */
	while (ADC_GetCalibrationStatus(ADC1) == SET) ;

	/* Start ADC1 Software Conversion */
	ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE);

	/* Register adc as a timed callback */
	sys_tick_timer_register(adc_conv_trigger, 1000);
}