diff --git a/include/ir_feet_conf.h b/include/ir_feet_conf.h index 6e0564f67c77720ef072334188461f1a8b8a7c59..80e834b9ee6f35e4beef770a1f05867d6117ce6c 100644 --- a/include/ir_feet_conf.h +++ b/include/ir_feet_conf.h @@ -6,7 +6,7 @@ #define EEPROM_DYN_SLAVE_BASE_ADDRESS2 ((unsigned short int)0x0010) /* ADC registers base address */ -#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x004a) +#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x0020) #define EEPROM_NUM_VAR 32 diff --git a/src/adc_dma.c b/src/adc_dma.c index ed82d8b1cde44d6213afb2111e7cc18127ad167b..2dd9b8d96216eb9100481ef8ad9d3b14d301ea57 100755 --- a/src/adc_dma.c +++ b/src/adc_dma.c @@ -1,5 +1,6 @@ #include "adc_dma.h" #include "adc_dma_registers.h" +#include "scheduler.h" #include "ram.h" #define ADC1_CH1 ADC_CHANNEL_0 @@ -131,32 +132,32 @@ void adc_convert_voltage(adc_dma_ch_t channel_id,uint16_t value) ram_data[DOWN_LEFT_FRONT_VOLTAGE+1]=ram_value/256; break; case DOWN_RIGHT_REAR_CH: adc_voltages[4]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[4]; ram_data[DOWN_RIGHT_REAR_VOLTAGE]=ram_value%256; ram_data[DOWN_RIGHT_REAR_VOLTAGE+1]=ram_value/256; break; case DOWN_RIGHT_MIDDLE_CH: adc_voltages[5]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[5]; ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE]=ram_value%256; ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE+1]=ram_value/256; break; case DOWN_RIGHT_FRONT_CH: adc_voltages[6]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[6]; ram_data[DOWN_RIGHT_FRONT_VOLTAGE]=ram_value%256; ram_data[DOWN_RIGHT_FRONT_VOLTAGE+1]=ram_value/256; break; case FRONT_LEFT_CH: adc_voltages[7]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[7]; ram_data[FRONT_LEFT_VOLTAGE]=ram_value%256; ram_data[FRONT_LEFT_VOLTAGE+1]=ram_value/256; break; case FRONT_RIGHT_CH: adc_voltages[8]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[8]; ram_data[FRONT_RIGHT_VOLTAGE]=ram_value%256; ram_data[FRONT_RIGHT_VOLTAGE+1]=ram_value/256; break; case FRONT_ANALOG_CH: adc_voltages[9]=((float)value)*VOLTAGE_DELTA; - ram_value=(uint16_t)adc_voltages[0]; + ram_value=(uint16_t)adc_voltages[9]; ram_data[FRONT_ANALOG_VOLTAGE]=ram_value%256; ram_data[FRONT_ANALOG_VOLTAGE+1]=ram_value/256; break; @@ -173,6 +174,12 @@ void adc_read_cmd(unsigned short int address,unsigned short int length,unsigned ram_read_table(address,length,data); } +void adc_start_conv(void) +{ + HAL_ADC_Start(&hadc2); + HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6); +} + /* interrupt handlers */ void ADC_DMA_IRQHandler(void) { @@ -185,6 +192,7 @@ void ADC_DMA_IRQHandler(void) if(__HAL_DMA_GET_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1)) != RESET) if(__HAL_DMA_GET_IT_SOURCE(&hdma_adc1, DMA_IT_TC) != RESET) { + __HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1)); HAL_ADC_Stop(&hadc2); adc_convert_voltage(DOWN_LEFT_MIDDLE_CH,adc_data[0]&0x0000FFFF); adc_convert_voltage(DOWN_LEFT_REAR_CH,(adc_data[0]>>16)&0x0000FFFF); @@ -365,13 +373,11 @@ uint8_t adc_init(TMemory *memory) if(!mem_add_module(memory,&adc_mem_module)) return 0x00; - return 0x01; -} + /* assigna a scheduler channel */ + scheduler_set_channel(SCHED_CH1,adc_start_conv,10); + scheduler_enable_channel(SCHED_CH1); -void adc_start_conversion(void) -{ - HAL_ADC_Start(&hadc2); - HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6); + return 0x01; } float adc_get_voltage(adc_dma_ch_t channel_id) diff --git a/src/ir_feet_dyn_slave.c b/src/ir_feet_dyn_slave.c index 1ec2beb67549cd64e6c450bfb09394aa2fcdc709..7b679deaa1a7e712e869bbedec5ca16107aba101 100755 --- a/src/ir_feet_dyn_slave.c +++ b/src/ir_feet_dyn_slave.c @@ -68,12 +68,12 @@ void ir_feet_dyn_slave_write_cmd(unsigned short int address,unsigned short int l { if(ram_in_range(DEVICE_ID,address,length)) { - dyn_slave_set_address(&ir_feet_dyn_slave,0x01/*data[DEVICE_ID-address]*/); + dyn_slave_set_address(&ir_feet_dyn_slave,data[DEVICE_ID-address]); ram_data[DEVICE_ID]=data[DEVICE_ID-address]; } if(ram_in_range(BAUDRATE,address,length)) { - ir_feet_comm_init.BaudRate=115200;//2000000/(data[BAUDRATE-address]+1); + ir_feet_comm_init.BaudRate=2000000/(data[BAUDRATE-address]+1); usart1_config(&ir_feet_dyn_slave_comm,&ir_feet_comm_init); ram_data[BAUDRATE]=data[BAUDRATE-address]; } @@ -125,7 +125,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory) /* initialize the comm object */ comm_init(&ir_feet_dyn_slave_comm,0x01,&ir_feet_dyn_slave_timer); - ir_feet_comm_init.BaudRate = 115200;//2000000/(DEFAULT_BAUDRATE+1); + ir_feet_comm_init.BaudRate = 2000000/(DEFAULT_BAUDRATE+1); ir_feet_comm_init.WordLength = UART_WORDLENGTH_8B; ir_feet_comm_init.StopBits = UART_STOPBITS_1; ir_feet_comm_init.Parity = UART_PARITY_NONE; @@ -141,7 +141,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory) priorities.dma_tx_subpriority=0; usart1_init(&ir_feet_dyn_slave_comm,&ir_feet_comm_init,&priorities); - dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,1/*DEFAULT_DEVICE_ID*/,DYN_VER1); + dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,DEFAULT_DEVICE_ID,DYN_VER1); ir_feet_dyn_slave.on_read=ir_feet_on_read; ir_feet_dyn_slave.on_write=ir_feet_on_write; ir_feet_dyn_slave.on_ping=ir_feet_on_ping; diff --git a/src/main.c b/src/main.c index 01d84674e1d0d3d4b4b1317c1e5244af59e69ed5..d18bbe5b84868748545ba1622ea74f8b7e186385 100755 --- a/src/main.c +++ b/src/main.c @@ -37,10 +37,6 @@ int main(void) while(1)/* main function does not return */ { - gpio_set_led(DOWN_LEFT_FRONT); - HAL_Delay(1000); - gpio_clear_led(DOWN_LEFT_FRONT); - HAL_Delay(1000); } }