diff --git a/Makefile b/Makefile index ff8179a385e59ef6f8a485934f7d50bdfb7d59a5..c603cfd659a3de50039115d2bb92b53dc946d88f 100755 --- a/Makefile +++ b/Makefile @@ -10,26 +10,25 @@ TARGET_FILES=src/cm730_fw.c #TARGET_FILES+=src/test_charger.c TARGET_FILES+=src/system_stm32f1xx.c TARGET_FILES+=src/gpio.c -TARGET_FILES+=src/ram.c -TARGET_FILES+=src/darwin_time.c +#TARGET_FILES+=src/darwin_time.c TARGET_FILES+=src/eeprom.c -TARGET_FILES+=src/adc_dma.c -TARGET_FILES+=src/imu.c -TARGET_FILES+=src/darwin_dyn_slave.c -TARGET_FILES+=src/darwin_dyn_master.c -TARGET_FILES+=src/darwin_dyn_master_v2.c +#TARGET_FILES+=src/adc_dma.c +#TARGET_FILES+=src/imu.c +#TARGET_FILES+=src/darwin_dyn_slave.c +#TARGET_FILES+=src/darwin_dyn_master.c +#TARGET_FILES+=src/darwin_dyn_master_v2.c TARGET_FILES+=src/stm32f1xx_hal_msp.c -TARGET_FILES+=src/motion_manager.c -TARGET_FILES+=src/action.c -TARGET_FILES+=src/motion_pages.c -TARGET_FILES+=src/walking.c -TARGET_FILES+=src/darwin_math.c -TARGET_FILES+=src/darwin_kinematics.c -TARGET_FILES+=src/joint_motion.c -TARGET_FILES+=src/head_tracking.c -TARGET_FILES+=src/grippers.c -TARGET_FILES+=src/smart_charger.c -TARGET_FILES+=src/stairs.c +#TARGET_FILES+=src/motion_manager.c +#TARGET_FILES+=src/action.c +#TARGET_FILES+=src/motion_pages.c +#TARGET_FILES+=src/walking.c +#TARGET_FILES+=src/darwin_math.c +#TARGET_FILES+=src/darwin_kinematics.c +#TARGET_FILES+=src/joint_motion.c +#TARGET_FILES+=src/head_tracking.c +#TARGET_FILES+=src/grippers.c +#TARGET_FILES+=src/smart_charger.c +#TARGET_FILES+=src/stairs.c TARGET_PROCESSOR=STM32F103RE @@ -41,6 +40,7 @@ STM32_STARTUP_FILES_PATH = $(HAL_PATH)/startup_code/ STM32_LINKER_SCRIPTS_PATH = ./linker_script UTILS_PATH=$(STM32_LIBRARIES_PATH)/utils COMM_PATH=$(STM32_LIBRARIES_PATH)/comm +MEMORY_PATH=$(STM32_LIBRARIES_PATH)/memory USART_PATH=$(STM32_LIBRARIES_PATH)/f1/usart DYNAMIXEL_PATH=$(STM32_LIBRARIES_PATH)/dynamixel_base BUILD_PATH=build @@ -49,7 +49,7 @@ COMPILE_OPTS = -mlittle-endian -mcpu=cortex-m3 -mthumb -mthumb-interwork COMPILE_OPTS += -Wall -O2 -fno-common -msoft-float -DUSE_HAL_DRIVER COMPILE_OPTS += -ffreestanding -nostdlib -D$(PROCESSOR_MACRO) INCLUDE_DIRS = -I$(HAL_PATH)/include -I$(HAL_PATH)/include/core -I$(HAL_PATH)/include/devices -INCLUDE_DIRS += -I$(UTILS_PATH)/include -I$(COMM_PATH)/include -I$(DYNAMIXEL_PATH)/include -I$(USART_PATH)/include -I./include +INCLUDE_DIRS += -I$(UTILS_PATH)/include -I$(COMM_PATH)/include -I$(MEMORY_PATH)/include -I$(DYNAMIXEL_PATH)/include -I$(USART_PATH)/include -I./include DOC_DIR = ./doc @@ -63,7 +63,6 @@ ASFLAGS = $(COMPILE_OPTS) -c LD = $(TCHAIN_PREFIX)gcc LDFLAGS = -mthumb -mcpu=cortex-m3 -Wl,-Map=$@.map,-cref $(INCLUDE_DIRS) -T $(STM32_LINKER_SCRIPTS_PATH)/darwin.ld --specs=nosys.specs -EXT_LIB = $(COMM_PATH)/lib/comm_m3.a $(UTILS_PATH)/lib/utils_m3.a $(DYNAMIXEL_PATH)/lib/dynamixel_m3.a OBJCP = $(TCHAIN_PREFIX)objcopy OBJCPFLAGS_HEX = -O ihex @@ -97,6 +96,11 @@ TARGET_FILES+=$(USART_PATH)/src/usart3.c TARGET_FILES+=$(USART_PATH)/src/usart2.c TARGET_FILES+=$(USART_PATH)/src/usart1_remap.c +TARGET_FILES+=$(wildcard $(UTILS_PATH)/src/*.c) +TARGET_FILES+=$(wildcard $(COMM_PATH)/src/*.c) +TARGET_FILES+=$(wildcard $(MEMORY_PATH)/src/*.c) +TARGET_FILES+=$(wildcard $(DYNAMIXEL_PATH)/src/*.c) + DARWIN_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o)) DARWIN_OBJS = $(patsubst %,$(BUILD_PATH)/%,$(DARWIN_OBJS_TMP)) @@ -113,6 +117,14 @@ $(BUILD_PATH)/%.o: $(HAL_PATH)/src/%.c $(CC) -c $(CFLAGS) -o $@ $< $(BUILD_PATH)/%.o: $(USART_PATH)/src/%.c $(CC) -c $(CFLAGS) -o $@ $< +$(BUILD_PATH)/%.o: $(UTILS_PATH)/src/%.c + $(CC) -c $(CFLAGS) -o $@ $< +$(BUILD_PATH)/%.o: $(COMM_PATH)/src/%.c + $(CC) -c $(CFLAGS) -o $@ $< +$(BUILD_PATH)/%.o: $(MEMORY_PATH)/src/%.c + $(CC) -c $(CFLAGS) -o $@ $< +$(BUILD_PATH)/%.o: $(DYNAMIXEL_PATH)/src/%.c + $(CC) -c $(CFLAGS) -o $@ $< $(MAIN_OUT_ELF): mkdir_build $(DARWIN_OBJS) $(BUID_PATH)/$(STARTUP_FILE:.s=.o) $(LD) $(LDFLAGS) $(DARWIN_OBJS) $(BUILD_PATH)/$(STARTUP_FILE:.s=.o) $(EXT_LIB) -lm --output $@ diff --git a/include/darwin_conf.h b/include/darwin_conf.h new file mode 100644 index 0000000000000000000000000000000000000000..f88b9148cd8433a328070008747d215fce357aa8 --- /dev/null +++ b/include/darwin_conf.h @@ -0,0 +1,10 @@ +#ifndef _DARWIN_CONF_H +#define _DARWIN_CONF_H + +#define RAM_SIZE 1024 +#define EEPROM_SIZE 256 + +/* GPIO configuration */ +#define RAM_GPIO_BASE_ADDRESS ((unsigned short int)0x0100) + +#endif diff --git a/include/darwin_registers.h b/include/darwin_registers.h index b84afcc7e78db9bde69d3b2fa67e03b84805ef40..bd2cc32e13a404aacb05f6a677307bf8fb15c2c5 100644 --- a/include/darwin_registers.h +++ b/include/darwin_registers.h @@ -254,40 +254,6 @@ typedef enum { DARWIN_STAIRS_X_SHIFT_BODY = STAIRS_X_SHIFT_BODY, //RAM - DARWIN_TX_LED_CNTRL = 0x0100, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | blink | toggle | value | internally used - DARWIN_TX_LED_PERIOD_L = 0x0101, - DARWIN_TX_LED_PERIOD_H = 0x0102, - DARWIN_RX_LED_CNTRL = 0x0103, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | blink | toggle | value | internally used - DARWIN_RX_LED_PERIOD_L = 0x0104, - DARWIN_RX_LED_PERIOD_H = 0x0105, - DARWIN_PLAY_LED_CNTRL = 0x0106, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | blink | toggle | value | internally used - DARWIN_PLAY_LED_PERIOD_L = 0x0107, - DARWIN_PLAY_LED_PERIOD_H = 0x0108, - DARWIN_EDIT_LED_CNTRL = 0x0109, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | blink | toggle | value | internally used - DARWIN_EDIT_LED_PERIOD_L = 0x010A, - DARWIN_EDIT_LED_PERIOD_H = 0x010B, - DARWIN_MNG_LED_CNTRL = 0x010C, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | | toggle | value | internally used - DARWIN_AUX1_LED_CNTRL = 0x010D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // color | toggle_B | value_B | toggle_G | value_G | toggle_R | value_R | internally used - DARWIN_AUX1_LED_COLOR_L = 0x010E, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // green value LSB | red value - DARWIN_AUX1_LED_COLOR_H = 0x010F, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | blue value | green value MSB - DARWIN_AUX2_LED_CNTRL = 0x0110, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // color | toggle_B | value_B | toggle_G | value_G | toggle_R | value_R | internally used - DARWIN_AUX2_LED_COLOR_L = 0x0111, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // green value LSB | red value - DARWIN_AUX2_LED_COLOR_H = 0x0112, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | blue value | green value MSB - DARWIN_START_PB_CNTRL = 0x0113, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | | | value | internally used - DARWIN_MODE_PB_CNTRL = 0x0114, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | | | value | internally used DARWIN_ADC_CNTRL = 0x0115, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // | | | running | | | start | stop DARWIN_ADC_PERIOD = 0x0116, @@ -647,23 +613,6 @@ typedef enum { // current phase | climbing | stop stairs | start stairs down | start stairs up }darwin_registers; -#define GPIO_BASE_ADDRESS 0x0100 -#define GPIO_MEM_LENGTH 21 -#define GPIO_INT_USED 0x01 -#define GPIO_VALUE 0x02 -#define GPIO_TOGGLE 0x04 -#define GPIO_VALUE_R 0x02 -#define GPIO_TOGGLE_R 0x04 -#define GPIO_VALUE_G 0x08 -#define GPIO_TOGGLE_G 0x10 -#define GPIO_VALUE_B 0x20 -#define GPIO_TOGGLE_B 0x40 -#define GPIO_BLINK 0x08 -#define GPIO_COLOR 0x80 -#define GPIO_RED_COLOR 0x001F -#define GPIO_GREEN_COLOR 0x03E0 -#define GPIO_BLUE_COLOR 0x7C00 - #define ADC_BASE_ADDRESS 0x0115 #define ADC_MEM_LENGTH 30 #define ADC_START 0x01 diff --git a/include/gpio.h b/include/gpio.h index 902deed83c2b080d7ddbf6b36d6c79f7a48717fa..cd2d43fd7f8b5e24c045fa80842911b9995e911c 100755 --- a/include/gpio.h +++ b/include/gpio.h @@ -6,6 +6,8 @@ extern "C" { #endif #include "stm32f1xx.h" +#include "gpio_registers.h" +#include "memory.h" #define GPIO_RGB(R,G,B) ((R&0x1F)+((G&0x1F)<<5)+((B&0x1F)<<10)) @@ -30,7 +32,7 @@ typedef struct typedef enum {START_PB=0,MODE_PB=1} pushbutton_t; -void gpio_init(void); +uint8_t gpio_init(TMemory *memory); // LED functions void gpio_set_led(led_t led_id); void gpio_clear_led(led_t led_id); @@ -40,10 +42,6 @@ void gpio_set_color(led_t led_id, uint16_t value); // Pushbuttons functions uint8_t gpio_is_pushbutton_pressed(pushbutton_t pb_id); void gpio_set_pushbutton_callback(pushbutton_t pb_id,void (*callback)(void)); -// operation functions -uint8_t gpio_in_range(unsigned short int address,unsigned short int length); -void gpio_process_read_cmd(unsigned short int address,unsigned short int length,unsigned char *data); -void gpio_process_write_cmd(unsigned short int address,unsigned short int length,unsigned char *data); #ifdef __cplusplus } diff --git a/include/gpio_registers.h b/include/gpio_registers.h new file mode 100644 index 0000000000000000000000000000000000000000..c5376e3079099d0be14bc2c63545115892b2fbba --- /dev/null +++ b/include/gpio_registers.h @@ -0,0 +1,56 @@ +#ifndef _GPIO_REGISTERS_H +#define _GPIO_REGISTERS_H + +#ifndef RAM_GPIO_BASE_ADDRESS + #define RAM_GPIO_BASE_ADDRESS ((unsigned short int)0x0000) +#endif + +#define RAM_GPIO_LENGTH 21 + +#define TX_LED_CNTRL RAM_GPIO_BASE_ADDRESS// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | blink | toggle | value | internally used +#define TX_LED_PERIOD (RAM_GPIO_BASE_ADDRESS+1) +#define RX_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+3)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | blink | toggle | value | internally used +#define RX_LED_PERIOD (RAM_GPIO_BASE_ADDRESS+4) +#define PLAY_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+6)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | blink | toggle | value | internally used +#define PLAY_LED_PERIOD (RAM_GPIO_BASE_ADDRESS+7) +#define EDIT_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+9)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | blink | toggle | value | internally used +#define EDIT_LED_PERIOD (RAM_GPIO_BASE_ADDRESS+10) +#define MNG_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+12)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | | toggle | value | internally used +#define AUX1_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+13)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // color | toggle_B | value_B | toggle_G | value_G | toggle_R | value_R | internally used +#define AUX1_LED_COLOR (RAM_GPIO_BASE_ADDRESS+14)// bit 15 | bit 14 | bit 13 | bit 12 | bit 11 | bit 10 | bit 9 | bit 8 + // green value LSB | red value + // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | blue value | green value MSB +#define AUX2_LED_CNTRL (RAM_GPIO_BASE_ADDRESS+16)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // color | toggle_B | value_B | toggle_G | value_G | toggle_R | value_R | internally used +#define AUX2_LED_COLOR (RAM_GPIO_BASE_ADDRESS+17)// bit 15 | bit 14 | bit 13 | bit 12 | bit 11 | bit 10 | bit 9 | bit 8 + // green value LSB | red value + // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | blue value | green value MSB +#define START_PB_CNTRL (RAM_GPIO_BASE_ADDRESS+19)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | | | | value | internally used +#define MODE_PB_CNTRL (RAM_GPIO_BASE_ADDRESS+20)// bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + +#define GPIO_INT_USED 0x01 +#define GPIO_VALUE 0x02 +#define GPIO_TOGGLE 0x04 +#define GPIO_VALUE_R 0x02 +#define GPIO_TOGGLE_R 0x04 +#define GPIO_VALUE_G 0x08 +#define GPIO_TOGGLE_G 0x10 +#define GPIO_VALUE_B 0x20 +#define GPIO_TOGGLE_B 0x40 +#define GPIO_BLINK 0x08 +#define GPIO_COLOR 0x80 +#define GPIO_RED_COLOR 0x001F +#define GPIO_GREEN_COLOR 0x03E0 +#define GPIO_BLUE_COLOR 0x7C00 + +#endif + diff --git a/include/ram.h b/include/ram.h deleted file mode 100755 index d920367d293c06bb7aa4e8a4ce2fe2cd1a47bd0b..0000000000000000000000000000000000000000 --- a/include/ram.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _RAM_H -#define _RAM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stm32f1xx.h" -#include "darwin_registers.h" - -#define RAM_SUCCESS 0 -#define RAM_BAD_ADDRESS -1 -#define RAM_WRITE_ERROR -2 -#define RAM_BAD_BIT -3 -#define RAM_BAD_ACCESS -4 - -#define RAM_SIZE 1024 - -extern uint8_t ram_data[RAM_SIZE]; - -void ram_init(void); -inline void ram_read_byte(uint16_t address, uint8_t *data); -inline void ram_read_word(uint16_t address, uint16_t *data); -uint8_t ram_read_table(uint16_t address, uint16_t length,uint8_t *data); -uint8_t ram_set_bit(uint16_t address, uint8_t bit); -uint8_t ram_clear_bit(uint16_t address, uint8_t bit); -uint8_t ram_write_byte(uint16_t address, uint8_t data); -uint8_t ram_write_word(uint16_t address, uint16_t data); -uint8_t ram_write_table(uint16_t address, uint16_t length,uint8_t *data); -inline uint8_t ram_in_range(uint16_t reg,uint16_t address,uint16_t length); -uint8_t ram_in_window(uint16_t start_reg,uint16_t reg_length,uint16_t start_address,uint16_t address_length); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/cm730_fw.c b/src/cm730_fw.c index 7693bace89751e5e77b06d534dc8b9787c1fb4bb..6514ca2a4ff90310937e5c880ba6dd5d7bc12412 100755 --- a/src/cm730_fw.c +++ b/src/cm730_fw.c @@ -1,7 +1,9 @@ #include "stm32f1xx_hal.h" +#include "darwin_conf.h" +#include "darwin_registers.h" +#include "memory.h" #include "gpio.h" #include "eeprom.h" -#include "ram.h" #include "adc_dma.h" #include "imu.h" #include "darwin_time.h" @@ -12,6 +14,8 @@ #include "action.h" #include "action_id.h" +TMemory darwin_memory; + int main(void) { uint16_t eeprom_data,period; @@ -20,26 +24,30 @@ int main(void) HAL_Init(); /* initialize EEPROM */ EE_Init(); - // initialize the Dynamixel RAM memory space - ram_init(); + /* initialize memory structure */ + mem_init(&darwin_memory); + darwin_memory.eeprom_write_data=EE_WriteVariable; + darwin_memory.eeprom_read_data=EE_ReadVariable; /* initialize the GPIO module */ - gpio_init(); + gpio_init(&darwin_memory); // initialize adc - adc_init(); +// adc_init(); // initialize imu - imu_init(); +// imu_init(); // initialize time module - darwin_time_init(); +// darwin_time_init(); /* initialize the dynamixel slave interface */ - darwin_dyn_slave_init(); - darwin_dyn_slave_start(); +// darwin_dyn_slave_init(); +// darwin_dyn_slave_start(); /* 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); +// 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); while(1);/* main function does not return */ } diff --git a/src/gpio.c b/src/gpio.c index b86a6eec6344e4e9de9b84a1adb7b9f0a115b154..35315b2f0162a00e695a438062def0ea47d90f0b 100755 --- a/src/gpio.c +++ b/src/gpio.c @@ -75,21 +75,24 @@ TIM_HandleTypeDef GPO_TIM1Handle; TIM_HandleTypeDef GPO_TIM2Handle; TIM_HandleTypeDef GPO_TIM3Handle; +TMemModule gpio_mem_module; + // Pushbuttons callbacks void (*start_pb_callback)(void); void (*mode_pb_callback)(void); + // LED's info structures -const led_info_t leds[GPIO_NUM_LEDS]={{LED_TX_GPIO_PORT,LED_TX_PIN,&GPO_TIM1Handle,TIM_CHANNEL_1,DARWIN_TX_LED_CNTRL,DARWIN_TX_LED_PERIOD_L,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, - {LED_RX_GPIO_PORT,LED_RX_PIN,&GPO_TIM1Handle,TIM_CHANNEL_2,DARWIN_RX_LED_CNTRL,DARWIN_RX_LED_PERIOD_L,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, - {LED_2_GPIO_PORT,LED_2_PIN,&GPO_TIM1Handle,TIM_CHANNEL_3,DARWIN_PLAY_LED_CNTRL,DARWIN_PLAY_LED_PERIOD_L,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, - {LED_3_GPIO_PORT,LED_3_PIN,&GPO_TIM1Handle,TIM_CHANNEL_4,DARWIN_EDIT_LED_CNTRL,DARWIN_EDIT_LED_PERIOD_L,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, - {LED_4_GPIO_PORT,LED_4_PIN,0,0,DARWIN_MNG_LED_CNTRL,0x0000,GPIO_VALUE,GPIO_TOGGLE,0x00}, - {LED_5_R_GPIO_PORT,LED_5_R_PIN,&GPO_TIM2Handle,TIM_CHANNEL_1,DARWIN_AUX1_LED_CNTRL,DARWIN_AUX1_LED_COLOR_L,GPIO_VALUE_R,GPIO_TOGGLE_R,0x00}, - {LED_5_G_GPIO_PORT,LED_5_G_PIN,&GPO_TIM2Handle,TIM_CHANNEL_2,DARWIN_AUX1_LED_CNTRL,DARWIN_AUX1_LED_COLOR_L,GPIO_VALUE_G,GPIO_TOGGLE_G,0x00}, - {LED_5_B_GPIO_PORT,LED_5_B_PIN,&GPO_TIM2Handle,TIM_CHANNEL_3,DARWIN_AUX1_LED_CNTRL,DARWIN_AUX1_LED_COLOR_L,GPIO_VALUE_B,GPIO_TOGGLE_B,0x00}, - {LED_6_R_GPIO_PORT,LED_6_R_PIN,&GPO_TIM3Handle,TIM_CHANNEL_1,DARWIN_AUX2_LED_CNTRL,DARWIN_AUX2_LED_COLOR_L,GPIO_VALUE_R,GPIO_TOGGLE_R,0x00}, - {LED_6_G_GPIO_PORT,LED_6_G_PIN,&GPO_TIM3Handle,TIM_CHANNEL_2,DARWIN_AUX2_LED_CNTRL,DARWIN_AUX2_LED_COLOR_L,GPIO_VALUE_G,GPIO_TOGGLE_G,0x00}, - {LED_6_B_GPIO_PORT,LED_6_B_PIN,&GPO_TIM3Handle,TIM_CHANNEL_3,DARWIN_AUX2_LED_CNTRL,DARWIN_AUX2_LED_COLOR_L,GPIO_VALUE_B,GPIO_TOGGLE_B,0x00}}; +const led_info_t leds[GPIO_NUM_LEDS]={{LED_TX_GPIO_PORT,LED_TX_PIN,&GPO_TIM1Handle,TIM_CHANNEL_1,TX_LED_CNTRL,TX_LED_PERIOD,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, + {LED_RX_GPIO_PORT,LED_RX_PIN,&GPO_TIM1Handle,TIM_CHANNEL_2,RX_LED_CNTRL,RX_LED_PERIOD,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, + {LED_2_GPIO_PORT,LED_2_PIN,&GPO_TIM1Handle,TIM_CHANNEL_3,PLAY_LED_CNTRL,PLAY_LED_PERIOD,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, + {LED_3_GPIO_PORT,LED_3_PIN,&GPO_TIM1Handle,TIM_CHANNEL_4,EDIT_LED_CNTRL,EDIT_LED_PERIOD,GPIO_VALUE,GPIO_TOGGLE,GPIO_BLINK}, + {LED_4_GPIO_PORT,LED_4_PIN,0,0,MNG_LED_CNTRL,0x0000,GPIO_VALUE,GPIO_TOGGLE,0x00}, + {LED_5_R_GPIO_PORT,LED_5_R_PIN,&GPO_TIM2Handle,TIM_CHANNEL_1,AUX1_LED_CNTRL,AUX1_LED_COLOR,GPIO_VALUE_R,GPIO_TOGGLE_R,0x00}, + {LED_5_G_GPIO_PORT,LED_5_G_PIN,&GPO_TIM2Handle,TIM_CHANNEL_2,AUX1_LED_CNTRL,AUX1_LED_COLOR,GPIO_VALUE_G,GPIO_TOGGLE_G,0x00}, + {LED_5_B_GPIO_PORT,LED_5_B_PIN,&GPO_TIM2Handle,TIM_CHANNEL_3,AUX1_LED_CNTRL,AUX1_LED_COLOR,GPIO_VALUE_B,GPIO_TOGGLE_B,0x00}, + {LED_6_R_GPIO_PORT,LED_6_R_PIN,&GPO_TIM3Handle,TIM_CHANNEL_1,AUX2_LED_CNTRL,AUX2_LED_COLOR,GPIO_VALUE_R,GPIO_TOGGLE_R,0x00}, + {LED_6_G_GPIO_PORT,LED_6_G_PIN,&GPO_TIM3Handle,TIM_CHANNEL_2,AUX2_LED_CNTRL,AUX2_LED_COLOR,GPIO_VALUE_G,GPIO_TOGGLE_G,0x00}, + {LED_6_B_GPIO_PORT,LED_6_B_PIN,&GPO_TIM3Handle,TIM_CHANNEL_3,AUX2_LED_CNTRL,AUX2_LED_COLOR,GPIO_VALUE_B,GPIO_TOGGLE_B,0x00}}; uint16_t leds_data[GPIO_NUM_LEDS]; // IRQ handler functions @@ -98,7 +101,7 @@ void GPI_EXTI1_IRQHandler(void) if(__HAL_GPIO_EXTI_GET_IT(START_PB_PIN) != RESET) { __HAL_GPIO_EXTI_CLEAR_IT(START_PB_PIN); - if(ram_data[DARWIN_START_PB_CNTRL]&GPIO_INT_USED) + if(ram_data[START_PB_CNTRL]&GPIO_INT_USED) { if(start_pb_callback!=0) start_pb_callback(); @@ -107,7 +110,7 @@ void GPI_EXTI1_IRQHandler(void) if(__HAL_GPIO_EXTI_GET_IT(MODE_PB_PIN) != RESET) { __HAL_GPIO_EXTI_CLEAR_IT(MODE_PB_PIN); - if(ram_data[DARWIN_MODE_PB_CNTRL]&GPIO_INT_USED) + if(ram_data[MODE_PB_CNTRL]&GPIO_INT_USED) { if(mode_pb_callback!=0) mode_pb_callback(); @@ -397,8 +400,44 @@ void gpio_process_led(led_t led_id,uint16_t address,uint16_t length,uint8_t *dat } } +void gpio_read_cmd(void *module,unsigned short int address,unsigned short int length,unsigned char *data) +{ + if(ram_in_range(START_PB_CNTRL,address,length)) + if(!(ram_data[START_PB_CNTRL]&GPIO_INT_USED))/* GPIO is not internally used */ + { + if(gpio_is_pushbutton_pressed(START_PB)) + ram_data[START_PB_CNTRL]|=GPIO_VALUE; + else + ram_data[START_PB_CNTRL]&=(~GPIO_VALUE); + } + if(ram_in_range(MODE_PB_CNTRL,address,length)) + if(!(ram_data[MODE_PB_CNTRL]&GPIO_INT_USED))/* GPIO is not internally used */ + { + if(gpio_is_pushbutton_pressed(MODE_PB)) + ram_data[MODE_PB_CNTRL]|=GPIO_VALUE; + else + ram_data[MODE_PB_CNTRL]&=(~GPIO_VALUE); + } +} + +void gpio_write_cmd(void *module,unsigned short int address,unsigned short int length,unsigned char *data) +{ + /* process standard leds */ + gpio_process_led(LED_TX,address,length,data); + gpio_process_led(LED_RX,address,length,data); + gpio_process_led(LED_2,address,length,data); + gpio_process_led(LED_3,address,length,data); + gpio_process_led(LED_4,address,length,data); + gpio_process_led(LED_5_R,address,length,data); + gpio_process_led(LED_5_G,address,length,data); + gpio_process_led(LED_5_B,address,length,data); + gpio_process_led(LED_6_R,address,length,data); + gpio_process_led(LED_6_G,address,length,data); + gpio_process_led(LED_6_B,address,length,data); +} + // public functions -void gpio_init(void) +uint8_t gpio_init(TMemory *memory) { GPIO_InitTypeDef GPIO_InitStructure; TIM_ClockConfigTypeDef sClockSourceConfig; @@ -547,6 +586,17 @@ void gpio_init(void) gpio_clear_led(LED_6_R); gpio_clear_led(LED_6_G); gpio_clear_led(LED_6_B); + + /* initialize memory module */ + mem_module_init(&gpio_mem_module); + gpio_mem_module.write_cmd=gpio_write_cmd; + gpio_mem_module.read_cmd=gpio_read_cmd; + if(!mem_module_add_ram_segment(&gpio_mem_module,RAM_GPIO_BASE_ADDRESS,RAM_GPIO_LENGTH)) + return 0x00; + if(!mem_add_module(memory,&gpio_mem_module)) + return 0x00; + + return 0x01; } void gpio_set_led(led_t led_id) @@ -658,44 +708,4 @@ void gpio_set_pushbutton_callback(pushbutton_t pb_id,void (*callback)(void)) } } -uint8_t gpio_in_range(unsigned short int address,unsigned short int length) -{ - return ram_in_window(GPIO_BASE_ADDRESS,GPIO_MEM_LENGTH,address,length); -} - -void gpio_process_read_cmd(unsigned short int address,unsigned short int length,unsigned char *data) -{ - if(ram_in_range(DARWIN_START_PB_CNTRL,address,length)) - if(!(ram_data[DARWIN_START_PB_CNTRL]&GPIO_INT_USED))/* GPIO is not internally used */ - { - if(gpio_is_pushbutton_pressed(START_PB)) - ram_data[DARWIN_START_PB_CNTRL]|=GPIO_VALUE; - else - ram_data[DARWIN_START_PB_CNTRL]&=(~GPIO_VALUE); - } - if(ram_in_range(DARWIN_MODE_PB_CNTRL,address,length)) - if(!(ram_data[DARWIN_MODE_PB_CNTRL]&GPIO_INT_USED))/* GPIO is not internally used */ - { - if(gpio_is_pushbutton_pressed(MODE_PB)) - ram_data[DARWIN_MODE_PB_CNTRL]|=GPIO_VALUE; - else - ram_data[DARWIN_MODE_PB_CNTRL]&=(~GPIO_VALUE); - } -} - -void gpio_process_write_cmd(unsigned short int address,unsigned short int length,unsigned char *data) -{ - /* process standard leds */ - gpio_process_led(LED_TX,address,length,data); - gpio_process_led(LED_RX,address,length,data); - gpio_process_led(LED_2,address,length,data); - gpio_process_led(LED_3,address,length,data); - gpio_process_led(LED_4,address,length,data); - gpio_process_led(LED_5_R,address,length,data); - gpio_process_led(LED_5_G,address,length,data); - gpio_process_led(LED_5_B,address,length,data); - gpio_process_led(LED_6_R,address,length,data); - gpio_process_led(LED_6_G,address,length,data); - gpio_process_led(LED_6_B,address,length,data); -} diff --git a/src/ram.c b/src/ram.c deleted file mode 100755 index be8aa9dd975afec953d101fafbc9576ea391ecd4..0000000000000000000000000000000000000000 --- a/src/ram.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "ram.h" -#include "eeprom.h" - -uint8_t ram_data[RAM_SIZE]; - -void ram_init(void) -{ - uint16_t eeprom_data,i; - - for(i=0;i<RAM_SIZE;i++) - ram_data[i]=0x00; - // read contents from EEPROM to RAM - for(i=0;i<NB_OF_VAR;i++) - { - if(EE_ReadVariable(i,&eeprom_data)==0) - ram_data[i]=(uint8_t)(eeprom_data&0x00FF); - } -} - -inline void ram_read_byte(uint16_t address,uint8_t *data) -{ - (*data)=ram_data[address]; -} - -inline void ram_read_word(uint16_t address, uint16_t *data) -{ - (*data)=ram_data[address]; - (*data)+=ram_data[address+1]*256; -} - -uint8_t ram_read_table(uint16_t address, uint16_t length,uint8_t *data) -{ - uint16_t i; - - if((address+length)<=(RAM_SIZE-1)) - { - for(i=0;i<length;i++) - data[i]=ram_data[address+i]; - return RAM_SUCCESS; - } - else - return RAM_BAD_ADDRESS; -} - -uint8_t ram_set_bit(uint16_t address, uint8_t bit) -{ - if(bit>=0 && bit<8) - { - ram_data[address]|=(0x01<<bit); - return RAM_SUCCESS; - } - else - return RAM_BAD_BIT; -} - -uint8_t ram_clear_bit(uint16_t address, uint8_t bit) -{ - if(bit>=0 && bit<8) - { - ram_data[address]&=(~(0x01<<bit)); - return RAM_SUCCESS; - } - else - return RAM_BAD_BIT; -} - -uint8_t ram_write_byte(uint16_t address, uint8_t data) -{ - ram_data[address]=data; - - return RAM_SUCCESS; -} - -uint8_t ram_write_word(uint16_t address, uint16_t data) -{ - if(address < (RAM_SIZE-1)) - { - ram_data[address]=data%256; - ram_data[address+1]=data/256; - - return RAM_SUCCESS; - } - else - return RAM_BAD_ADDRESS; -} - -uint8_t ram_write_table(uint16_t address, uint16_t length,uint8_t *data) -{ - uint16_t i; - - if((address+length)<RAM_SIZE) - { - for(i=0;i<length;i++) - ram_data[address+i]=data[i]; - return RAM_SUCCESS; - } - else - return RAM_BAD_ADDRESS; -} - -inline uint8_t ram_in_range(uint16_t reg,uint16_t address,uint16_t length) -{ - if(reg>=address && reg<(address+length)) - return 0x01; - else - return 0x00; -} - -uint8_t ram_in_window(uint16_t start_reg,uint16_t reg_length,uint16_t start_address,uint16_t address_length) -{ - uint16_t end_reg=start_reg+reg_length; - uint16_t end_address=start_address+address_length; - - if((start_reg>=start_address && start_reg<end_address) || (end_reg>=start_address && end_reg<end_address) || - (start_address>=start_reg && start_address<end_reg) || (end_address>=start_reg && end_address<end_reg)) - return 0x01; - else - return 0x00; -}