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

Updated some firmware source files.

parent ac6ea819
No related branches found
No related tags found
No related merge requests found
#ifndef _DARWIN_CONF_H
#define _DARWIN_CONF_H
#define RAM_SIZE 1024
#define EEPROM_SIZE 256
#define RAM_SIZE 4096
#define EEPROM_SIZE 128
/* Dynamixel slave configuration */
/* Dynamixel slave memory map */
/* dynamixel slave */
#define EEPROM_DYN_SLAVE_BASE_ADDRESS1 ((unsigned short int)0x0000)
#define EEPROM_DYN_SLAVE_BASE_ADDRESS2 ((unsigned short int)0x0010)
#define DARWIN_DEVICE_MODEL 0x001D
#define DARWIN_FIRMWARE_VERSION 0x0001
#define DARWIN_DEVICE_ID 0x0003
#define DEFAULT_BAUDRATE 0x0022
#define DEFAULT_RETURN_DELAY 0x0000
#define DEFAULT_RETURN_LEVEL 0x0002
/* dynamixel manager */
#define EEPROM_DYN_MANAGER_BASE_ADDRESS ((unsigned short int)0x0006)
#define RAM_DYN_MANAGER_BASE_ADDRESS ((unsigned short int)0x0080)
/* motion manager */
#define EEPROM_MMANAGER_BASE_ADDRESS ((unsigned short int)0x0011)
#define RAM_MMANAGER_BASE_ADDRESS ((unsigned short int)0x0088)
/* action motion module */
#define RAM_ACTION_MM_BASE_ADDRESS ((unsigned short int)0x009E)
/* IMU */
#define RAM_IMU_MM_BASE_ADDRESS ((unsigned short int)0x00A0)
#define NUM_MOTION_PAGES 46
/* balance */
#define EEPROM_BALANCE_BASE_ADDRESS ((unsigned short int)0x0007)
#define RAM_BALANCE_BASE_ADDRESS ((unsigned short int)0x00AF)
#define NUM_MOTION_PAGES 256
#define MAX_DYN_MASTER_TX_BUFFER_LEN 1024
#define MAX_DYN_MASTER_RX_BUFFER_LEN 1024
#define MAX_DYN_SLAVE_TX_BUFFER_LEN 1024
......@@ -32,13 +44,26 @@
#define MODULE_MAX_NUM_MODELS 32
#define MM_MAX_NUM_MOTION_MODULES 8
/* GPIO configuration */
#define RAM_GPIO_BASE_ADDRESS ((unsigned short int)0x0100)
/* EEPROM default values */
/* Dynamixel slave */
#define DARWIN_DEVICE_MODEL 0x7300
#define DARWIN_FIRMWARE_VERSION 0x0001
#define DARWIN_DEVICE_ID 0x0001
#define DEFAULT_BAUDRATE 0x0010
#define DEFAULT_RETURN_DELAY 0x0000
#define DEFAULT_RETURN_LEVEL 0x0002
/* dynamixel manager */
#define DYN_MANAGER_PERIOD 0x0007
/* ADC configuration */
#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x0115)
/* motion manager */
#define MMANAGER_PERIOD 0x0001
/* ADC configuration */
#define RAM_IMU_BASE_ADDRESS ((unsigned short int)0x012F)
/* balance */
#define DEFAULT_BALANCE_KNEE_GAIN 0x4CCD // 0.3 in fixed point format 0|16
#define DEFAULT_BALANCE_ANKLE_ROLL_GAIN 0xFFFF // 0.99999
#define DEFAULT_BALANCE_ANKLE_PITCH_GAIN 0xE666 // 0.9
#define DEFAULT_BALANCE_HIP_ROLL_GAIN 0x8000 // 0.5
#endif
#ifndef _IMU_H
#define _IMU_H
#ifndef _DARWIN_IMU_H
#define _DARWIN_IMU_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32f1xx.h"
#include "imu_registers.h"
#include "darwin_imu_registers.h"
#include "memory.h"
#include "stm32_time.h"
#include "darwin_time.h"
typedef enum {IMU_DONE=0,IMU_BUSY,IMU_TIMEOUT} imu_op_t;
typedef enum {IMU_GET_ACCEL,IMU_GET_GYRO} imu_state_t;
typedef struct
{
// internal buffers
uint8_t spi_rd_data[32];
uint8_t spi_num_rd_data;
uint8_t spi_wr_data[32];
uint8_t spi_num_wr_data;
// control attributes
volatile uint8_t stopped;
uint8_t stop_flag;
volatile imu_op_t op_state;
uint8_t current_device_id;
// gyroscope attributes
uint8_t gyro_calibration;
uint16_t gyro_calibration_num_samples;
uint8_t gyro_conf_data[6];
int16_t gyro_center[3];
int16_t gyro_data[3];
// accelerometer attributes
uint8_t accel_conf_data[5];
int16_t accel_data[3];
// memory attributes
TMemModule mem_module;
TMemory *memory;
unsigned int ram_base_address;
TTime time;
}TIMU;
//public functions
uint8_t imu_init(TMemory *memory);
uint8_t imu_init(TMemory *memory,unsigned int ram_base_address);
void imu_start(void);
void imu_stop(void);
void imu_set_calibration_samples(uint16_t num_samples);
......
#ifndef _DARWIN_IMU_REGISTERS_H
#define _DARWIN_IMU_REGISTERS_H
#define RAM_IMU_LENGTH 15
#define IMU_CONTROL_OFFSET 0// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
// accel_det | gyro_det | calibrating | running | | start_cal | stop | start
#define IMU_START 0x01
#define IMU_STOP 0x02
#define IMU_START_CAL 0x04
#define IMU_RUNNING 0x10
#define IMU_CALIBRATING 0x20
#define IMU_ACCEL_DET 0x40
#define IMU_GYRO_DET 0x80
#define IMU_CAL_SAMPLES_OFFSET 1
#define IMU_GYRO_X_OFFSET 3
#define IMU_GYRO_Y_OFFSET 5
#define IMU_GYRO_Z_OFFSET 7
#define IMU_ACCEL_X_OFFSET 9
#define IMU_ACCEL_Y_OFFSET 11
#define IMU_ACCEL_Z_OFFSET 13
#endif
#ifndef _IMU_REGISTERS_H
#define _IMU_REGISTERS_H
#ifndef RAM_IMU_BASE_ADDRESS
#define RAM_IMU_BASE_ADDRESS ((unsigned short int)0x0000)
#endif
#define RAM_IMU_LENGTH 15
#define IMU_CNTRL RAM_IMU_BASE_ADDRESS// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0
// accel_det | gyro_det | calibrating | running | | start_cal | stop | start
#define IMU_CAL_SAMPLES (RAM_IMU_BASE_ADDRESS+1)
#define IMU_GYRO_X (RAM_IMU_BASE_ADDRESS+3)
#define IMU_GYRO_Y (RAM_IMU_BASE_ADDRESS+5)
#define IMU_GYRO_Z (RAM_IMU_BASE_ADDRESS+7)
#define IMU_ACCEL_X (RAM_IMU_BASE_ADDRESS+9)
#define IMU_ACCEL_Y (RAM_IMU_BASE_ADDRESS+11)
#define IMU_ACCEL_Z (RAM_IMU_BASE_ADDRESS+13)
#define IMU_START 0x01
#define IMU_STOP 0x02
#define IMU_START_CAL 0x04
#define IMU_RUNNING 0x10
#define IMU_CALIBRATING 0x20
#define IMU_ACCEL_DET 0x40
#define IMU_GYRO_DET 0x80
#endif
......@@ -4,7 +4,7 @@ SET(sources ${CMAKE_CURRENT_SOURCE_DIR}/cm730_fw.c
${CMAKE_CURRENT_SOURCE_DIR}/darwin_sch.c
${CMAKE_CURRENT_SOURCE_DIR}/darwin_time.c
#${CMAKE_CURRENT_SOURCE_DIR}/adc_dma.c
#${CMAKE_CURRENT_SOURCE_DIR}/imu.c
${CMAKE_CURRENT_SOURCE_DIR}/darwin_imu.c
${CMAKE_CURRENT_SOURCE_DIR}/darwin_dyn_slave.c
#${CMAKE_CURRENT_SOURCE_DIR}/darwin_dyn_master.c
#${CMAKE_CURRENT_SOURCE_DIR}/darwin_dyn_master_v2.c
......@@ -23,7 +23,7 @@ SET(sources ${CMAKE_CURRENT_SOURCE_DIR}/cm730_fw.c
${PROJECT_SOURCE_DIR}/stm32_libraries/f1/usart/src/usart3.c
${PROJECT_SOURCE_DIR}/stm32_libraries/f1/usart/src/usart1.c PARENT_SCOPE)
set(header_include_dir ${CMAKE_CURRENT_SOURCE_DIR}/../include ${CMAKE_CURRENT_SOURCE_DIR}/../stm32_libraries/f1/usart/include PARENT_SCOPE)
set(header_include_dir ${CMAKE_CURRENT_SOURCE_DIR}/../include ${PROJECT_SOURCE_DIR}/stm32_libraries/f1/usart/include PARENT_SCOPE)
set(configuration_file ${CMAKE_CURRENT_SOURCE_DIR}/../include/darwin_conf.h PARENT_SCOPE)
set(processor STM32F103xE PARENT_SCOPE)
......
......@@ -33,17 +33,11 @@ int main(void)
// gpio_init(&darwin_memory);
// initialize adc
// adc_init(&darwin_memory);
// initialize imu
// imu_init(&darwin_memory);
/* initialize the dynamixel slave interface */
darwin_dyn_slave_init(&darwin_memory,scheduler);
// initialize imu
imu_init(darwin_memory,RAM_IMU_MM_BASE_ADDRESS);
/* initialize motion manager module */
// EE_ReadVariable(MM_PERIOD_OFFSET,&eeprom_data);
// period=eeprom_data&0x00FF;
// EE_ReadVariable(MM_PERIOD_OFFSET+1,&eeprom_data);
// period+=((eeprom_data&0x00FF)<<8);
// manager_init(period);
// gpio_set_led(LED_4);
/* initialize the ram module */
ram_init(darwin_memory);
......
This diff is collapsed.
......@@ -13,6 +13,7 @@ void TIM1_CC_IRQHandler(void)
if(__HAL_TIM_GET_IT_SOURCE(&darwin_sch_timer_handle, TIM_IT_CC1) !=RESET)
{
__HAL_TIM_CLEAR_IT(&darwin_sch_timer_handle, TIM_IT_CC1);
__HAL_TIM_CLEAR_FLAG(&darwin_sch_timer_handle,TIM_FLAG_CC1);
scheduler_interrupt(&darwin_scheduler,SCHED_CH1);
}
}
......@@ -22,6 +23,7 @@ void TIM1_CC_IRQHandler(void)
if(__HAL_TIM_GET_IT_SOURCE(&darwin_sch_timer_handle, TIM_IT_CC2) !=RESET)
{
__HAL_TIM_CLEAR_IT(&darwin_sch_timer_handle, TIM_IT_CC2);
__HAL_TIM_CLEAR_FLAG(&darwin_sch_timer_handle,TIM_FLAG_CC2);
scheduler_interrupt(&darwin_scheduler,SCHED_CH2);
}
}
......@@ -31,6 +33,7 @@ void TIM1_CC_IRQHandler(void)
if(__HAL_TIM_GET_IT_SOURCE(&darwin_sch_timer_handle, TIM_IT_CC3) !=RESET)
{
__HAL_TIM_CLEAR_IT(&darwin_sch_timer_handle, TIM_IT_CC3);
__HAL_TIM_CLEAR_FLAG(&darwin_sch_timer_handle,TIM_FLAG_CC3);
scheduler_interrupt(&darwin_scheduler,SCHED_CH3);
}
}
......@@ -40,6 +43,7 @@ void TIM1_CC_IRQHandler(void)
if(__HAL_TIM_GET_IT_SOURCE(&darwin_sch_timer_handle, TIM_IT_CC4) !=RESET)
{
__HAL_TIM_CLEAR_IT(&darwin_sch_timer_handle, TIM_IT_CC4);
__HAL_TIM_CLEAR_FLAG(&darwin_sch_timer_handle,TIM_FLAG_CC4);
scheduler_interrupt(&darwin_scheduler,SCHED_CH4);
}
}
......
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