Skip to content
Snippets Groups Projects
Commit d6fe6fc4 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

ADC module working.

Solved a problem in the dynamixel slave module when there was no answer. It stopped working.
Added an initial ram module.
parent bf7941cf
No related branches found
No related tags found
No related merge requests found
...@@ -12,5 +12,6 @@ uint8_t dyn_slave_is_packet_ready(void); ...@@ -12,5 +12,6 @@ uint8_t dyn_slave_is_packet_ready(void);
void dyn_slave_get_inst_packet(uint8_t *packet); void dyn_slave_get_inst_packet(uint8_t *packet);
void dyn_slave_send_status_packet(uint8_t error,uint8_t length, uint8_t *data); void dyn_slave_send_status_packet(uint8_t error,uint8_t length, uint8_t *data);
void dyn_slave_resend_status_packet(uint8_t *packet); void dyn_slave_resend_status_packet(uint8_t *packet);
void dyn_slave_reset(void);
#endif #endif
#ifndef _RAM_H #ifndef _RAM_H
#define _RAM_H #define _RAM_H
uint8_t ram_data[256]; #include "stm32f4xx.h"
extern uint8_t ram_data[256];
void ram_init(void);
#endif #endif
#include "adc_dma.h" #include "adc_dma.h"
#include "ram.h"
#define ADC1_CH1 ADC_Channel_TempSensor #define ADC1_CH1 ADC_Channel_TempSensor
#define ADC1_CH2 ADC_Channel_8 #define ADC1_CH2 ADC_Channel_8
...@@ -36,7 +37,8 @@ ...@@ -36,7 +37,8 @@
#define ADC_CCR_ADDRESS ((uint32_t)0x40012308) #define ADC_CCR_ADDRESS ((uint32_t)0x40012308)
// private variables // private variables
uint8_t adc_data[16];
// interrupt handlers
// public functions // public functions
void adc_init(void) void adc_init(void)
...@@ -55,7 +57,7 @@ void adc_init(void) ...@@ -55,7 +57,7 @@ void adc_init(void)
/* DMA Config */ /* DMA Config */
DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)adc_data; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ram_data[50];
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CCR_ADDRESS; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CCR_ADDRESS;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = 4; DMA_InitStructure.DMA_BufferSize = 4;
...@@ -87,7 +89,7 @@ void adc_init(void) ...@@ -87,7 +89,7 @@ void adc_init(void)
/* ADC Common Init */ /* ADC Common Init */
ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_2;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure); ADC_CommonInit(&ADC_CommonInitStructure);
...@@ -139,8 +141,5 @@ void adc_init(void) ...@@ -139,8 +141,5 @@ void adc_init(void)
uint16_t adc_get_temperature(void) uint16_t adc_get_temperature(void)
{ {
uint16_t value; return 0x0000;
value=adc_data[0]+(adc_data[1]<<8);
return value;
} }
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include "eeprom.h" #include "eeprom.h"
#include "imu_9dof_dma.h" #include "imu_9dof_dma.h"
#include "gpio.h" #include "gpio.h"
#include "ram.h"
#include "adc_dma.h"
uint8_t read_operation(uint8_t address, uint8_t length, uint8_t *data) uint8_t read_operation(uint8_t address, uint8_t length, uint8_t *data)
{ {
...@@ -27,33 +29,18 @@ uint8_t read_operation(uint8_t address, uint8_t length, uint8_t *data) ...@@ -27,33 +29,18 @@ uint8_t read_operation(uint8_t address, uint8_t length, uint8_t *data)
} }
else// RAM region else// RAM region
{ {
for(i=0;i<length;i++)
data[i]=ram_data[address+i];
return DYN_NO_ERROR; return DYN_NO_ERROR;
} }
} }
void test_gpio(void)
{
gpio_toggle_led(NORTH_LED);
}
int32_t main(void) int32_t main(void)
{ {
uint8_t inst_packet[1024]; uint8_t inst_packet[1024];
uint8_t status_packet[1024]; uint8_t status_packet[1024];
uint8_t data[1024],error; uint8_t data[1024],error;
uint16_t address; uint16_t address;
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOD Periph clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
/* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* initialize EEPROM */ /* initialize EEPROM */
EE_Init(); EE_Init();
...@@ -70,21 +57,10 @@ int32_t main(void) ...@@ -70,21 +57,10 @@ int32_t main(void)
imu_init(); imu_init();
/* initialize the gpio */ /* initialize the gpio */
gpio_init(); gpio_init();
// initialize the Dynamixel RAM memory space
if(imu_accel_detect()) ram_init();
GPIO_SetBits(GPIOD,GPIO_Pin_12); // initialize the Analog to digital converter
else adc_init();
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
if(imu_gyro_detect())
GPIO_SetBits(GPIOD,GPIO_Pin_13);
else
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
if(imu_compass_detect())
GPIO_SetBits(GPIOD,GPIO_Pin_14);
else
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
gpio_set_pushbutton_callback(NORTH_PB,test_gpio);
while(1) /* main function does not return */ while(1) /* main function does not return */
{ {
...@@ -122,6 +98,8 @@ int32_t main(void) ...@@ -122,6 +98,8 @@ int32_t main(void)
// send the answer back to the computer // send the answer back to the computer
dyn_slave_resend_status_packet(status_packet); dyn_slave_resend_status_packet(status_packet);
} }
else
dyn_slave_reset();// prepare the dynamixel master to accept data
} }
} }
else else
......
...@@ -288,3 +288,16 @@ void dyn_slave_resend_status_packet(uint8_t *packet) ...@@ -288,3 +288,16 @@ void dyn_slave_resend_status_packet(uint8_t *packet)
USART_DMACmd(DYN_SLAVE, USART_DMAReq_Tx, ENABLE); USART_DMACmd(DYN_SLAVE, USART_DMAReq_Tx, ENABLE);
dyn_slave_sending_packet=0x01; dyn_slave_sending_packet=0x01;
} }
void dyn_slave_reset(void)
{
dyn_slave_sending_packet=0x00;
// set up the DMA RX transaction
DYN_SLAVE_DMA_RX_InitStructure.DMA_BufferSize = 4;
DYN_SLAVE_DMA_RX_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dyn_slave_rx_buffer;
DMA_Init(DYN_SLAVE_RX_DMA_STREAM,&DYN_SLAVE_DMA_RX_InitStructure);
DMA_ITConfig(DYN_SLAVE_RX_DMA_STREAM,DMA_IT_TC,ENABLE);
DMA_Cmd(DYN_SLAVE_RX_DMA_STREAM,ENABLE);
USART_DMACmd(DYN_SLAVE, USART_DMAReq_Rx, ENABLE);
dyn_slave_receiving_header=0x01;
}
#include "ram.h"
uint8_t ram_data[256];
void ram_init(void)
{
// read contents from EEPROM to RAM
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment