diff --git a/include/bioloid_registers.h b/include/bioloid_registers.h index 47a2a89265150e612812b4ea833cb3c13f58cbb6..5376e83a14e6c7d35db5f116586402a157ad432f 100644 --- a/include/bioloid_registers.h +++ b/include/bioloid_registers.h @@ -179,8 +179,8 @@ typedef enum { BIOLOID_MM_SERVO31_CUR_POS_L = 0x98, BIOLOID_MM_SERVO31_CUR_POS_H = 0x99, BIOLOID_ACTION_PAGE = 0x9A, - BIOLOID_ACTION_CNTRL = 0x9B, - BIOLOID_ACTION_STATUS = 0x9C + BIOLOID_ACTION_CNTRL = 0x9B // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // | | | page running | interrupt flag | enable interrupt | stop page | start page } bioloid_registers; #define GPIO_BASE_ADDRESS 0x20 @@ -194,15 +194,30 @@ typedef enum { #define ADC_BASE_ADDRESS 0x30 #define ADC_MEM_LENGTH 18 +#define ADC_ENABLE 0x01 #define ZIGBEE_BASE_ADDRESS 0x42 #define ZIGBEE_MEM_LENGTH 6 +#define ZIGBEE_EN_PWR 0x01 +#define ZIGBEE_ENABLE 0x02 #define MANAGER_BASE_ADDRESS 0x48 #define MANAGER_MEM_LENGTH 50 +#define MANAGER_ENABLE 0x01 +#define MANAGER_EN_BAL 0x02 +#define MANAGER_EN_PWR 0x04 +#define MANAGER_EVEN_SER_EN 0x80 +#define MANAGER_EVEN_SER_MOD 0x70 +#define MANAGER_ODD_SER_EN 0x08 +#define MANAGER_ODD_SER_MOD 0x07 #define ACTION_BASE_ADDRESS 0x9A -#define ACTION_MEM_LENGTH 3 +#define ACTION_MEM_LENGTH 2 +#define ACTION_START 0x01 +#define ACTION_STOP 0x02 +#define ACTION_INT_EN 0x04 +#define ACTION_INT_FLAG 0x08 +#define ACTION_STATUS 0x10 #ifdef __cplusplus } diff --git a/src/action.c b/src/action.c index c5ed9856fb7b387b6a833c4c632e00970e874989..c4262d0c01397f044037cbcecd61f268b96a05e3 100644 --- a/src/action.c +++ b/src/action.c @@ -286,15 +286,13 @@ void action_start_page(void) action_current_time=0; action_section_time=0; action_current_step_index=-1; - ram_data[BIOLOID_ACTION_STATUS]|=0x01; + ram_data[BIOLOID_ACTION_CNTRL]|=ACTION_STATUS; action_running=0x01; - ram_data[BIOLOID_ACTION_CNTRL]|=0x01; } void action_stop_page(void) { action_stop=0x01; - //ram_data[BIOLOID_ACTION_CNTRL]|=0x01; } uint8_t action_is_running(void) @@ -443,7 +441,7 @@ void action_process(void) action_load_next_step(); state=ACTION_PAUSE; action_end=0x00; - ram_data[BIOLOID_ACTION_STATUS]&=0xFE; + ram_data[BIOLOID_ACTION_CNTRL]&=(~ACTION_STATUS); action_running=0x00; } else @@ -502,7 +500,7 @@ void action_process(void) action_load_next_step(); state=ACTION_PAUSE; action_end=0x00; - ram_data[BIOLOID_ACTION_STATUS]&=0xFE; + ram_data[BIOLOID_ACTION_CNTRL]&=(~ACTION_STATUS); action_running=0x00; } else @@ -533,19 +531,16 @@ void action_process(void) // operation functions uint8_t action_in_range(unsigned short int address, unsigned short int length) { - if(ram_in_window(ACTION_BASE_ADDRESS,ACTION_MEM_LENGTH,address,length)) - return 0x01; - else - return 0x00; + return ram_in_window(ACTION_BASE_ADDRESS,ACTION_MEM_LENGTH,address,length); } void action_process_write_cmd(unsigned short int address,unsigned short int length,unsigned char *data) { if(ram_in_range(BIOLOID_ACTION_CNTRL,address,length)) { - if(data[BIOLOID_ACTION_CNTRL-address]&0x01) + if(data[BIOLOID_ACTION_CNTRL-address]&ACTION_START) action_start_page(); - if(data[BIOLOID_ACTION_CNTRL-address]&0x02) + if(data[BIOLOID_ACTION_CNTRL-address]&ACTION_STOP) action_stop_page(); } if(ram_in_range(BIOLOID_ACTION_PAGE,address,length))// load the page identifier diff --git a/src/adc_dma.c b/src/adc_dma.c index 5a82d6492bca930e5abfcdbd575ca64ee5ba7f29..074643bcbfa444b91f7e84bd07c73e5ae3df24f0 100644 --- a/src/adc_dma.c +++ b/src/adc_dma.c @@ -378,7 +378,7 @@ void adc_process_write_cmd(unsigned short int address,unsigned short int length, { if(ram_in_range(BIOLOID_ADC_CNTRL,address,length)) { - if(data[BIOLOID_ADC_CNTRL-address]&0x01) + if(data[BIOLOID_ADC_CNTRL-address]&ADC_ENABLE) adc_start(); else adc_stop(); diff --git a/src/motion_manager.c b/src/motion_manager.c index 6ffd8347e49bbfd5a2470a7cec0bfd811180ffe5..9b294a3b8c1fe8b2dcd30907ba171658712182d6 100644 --- a/src/motion_manager.c +++ b/src/motion_manager.c @@ -316,30 +316,30 @@ inline void manager_enable(void) TIM_OCInitStructure.Pulse = capture+manager_motion_period; HAL_TIM_OC_ConfigChannel(&MANAGER_TIM_Handle, &TIM_OCInitStructure,TIM_CHANNEL_1); HAL_TIM_OC_Start_IT(&MANAGER_TIM_Handle, TIM_CHANNEL_1); - ram_data[BIOLOID_MM_CNTRL]|=0x01; + ram_data[BIOLOID_MM_CNTRL]|=MANAGER_ENABLE; } inline void manager_disable(void) { HAL_TIM_OC_Stop_IT(&MANAGER_TIM_Handle, TIM_CHANNEL_1); - ram_data[BIOLOID_MM_CNTRL]&=0xFE; + ram_data[BIOLOID_MM_CNTRL]&=(~MANAGER_ENABLE); } inline uint8_t manager_is_enabled(void) { - return ram_data[BIOLOID_MM_CNTRL]&0x01; + return ram_data[BIOLOID_MM_CNTRL]&MANAGER_ENABLE; } void manager_enable_balance(void) { manager_balance_enabled=0x01; - ram_data[BIOLOID_MM_CNTRL]|=0x02; + ram_data[BIOLOID_MM_CNTRL]|=MANAGER_EN_BAL; } void manager_disable_balance(void) { manager_balance_enabled=0x00; - ram_data[BIOLOID_MM_CNTRL]&=0xFD; + ram_data[BIOLOID_MM_CNTRL]&=(~MANAGER_EN_BAL); } inline uint8_t manager_get_num_servos(void) @@ -355,10 +355,10 @@ void manager_set_module(uint8_t servo_id,TModules module) { manager_servos[servo_id].module=module; byte=ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2]; - if(servo_id%2) - byte=(byte&0xF8)+((uint8_t)module); - else - byte=(byte&0x8F)+(((uint8_t)module)<<4); + if(servo_id%2)// odd servo + byte=(byte&(~MANAGER_ODD_SER_MOD))+((uint8_t)module); + else// even servo + byte=(byte&(~MANAGER_EVEN_SER_MOD))+(((uint8_t)module)<<4); ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2]=byte; } } @@ -379,10 +379,10 @@ inline void manager_enable_servo(uint8_t servo_id) { manager_servos[servo_id].enabled=0x01; byte=ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2];; - if(servo_id%2) - byte|=0x08; - else - byte|=0x80; + if(servo_id%2)// odd servo + byte|=MANAGER_ODD_SER_EN; + else// even servo + byte|=MANAGER_EVEN_SER_EN; ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2]=byte; } } @@ -396,9 +396,9 @@ inline void manager_disable_servo(uint8_t servo_id) manager_servos[servo_id].enabled=0x00; byte=ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2]; if(servo_id%2) - byte&=0xF7; + byte&=(~MANAGER_ODD_SER_EN); else - byte&=0x7F; + byte&=(~MANAGER_EVEN_SER_EN); ram_data[BIOLOID_MM_MODULE_EN0+servo_id/2]=byte; } } @@ -446,27 +446,27 @@ void manager_process_write_cmd(unsigned short int address,unsigned short int len if(ram_in_range(i,address,length)) { byte_value=data[i-address]; - if(byte_value&0x80) manager_enable_servo(j); + if(byte_value&MANAGER_EVEN_SER_EN) manager_enable_servo(j); else manager_disable_servo(j); - module=(byte_value&0x70)>>4; + module=(byte_value&MANAGER_EVEN_SER_MOD)>>4; manager_set_module(j,module); - if(byte_value&0x08) manager_enable_servo(j+1); + if(byte_value&MANAGER_ODD_SER_EN) manager_enable_servo(j+1); else manager_disable_servo(j+1); - module=byte_value&0x07; + module=byte_value&MANAGER_ODD_SER_MOD; manager_set_module(j+1,module); } } if(ram_in_range(BIOLOID_MM_CNTRL,address,length)) { - if(data[BIOLOID_MM_CNTRL-address]&0x01) + if(data[BIOLOID_MM_CNTRL-address]&MANAGER_ENABLE) manager_enable(); else manager_disable(); - if(data[BIOLOID_MM_CNTRL-address]&0x02) + if(data[BIOLOID_MM_CNTRL-address]&MANAGER_EN_BAL) manager_enable_balance(); else manager_disable_balance(); - if(data[BIOLOID_MM_CNTRL-address]&0x04) + if(data[BIOLOID_MM_CNTRL-address]&MANAGER_EN_PWR) bioloid_dyn_master_servos_enable_power(); else bioloid_dyn_master_servos_disable_power(); diff --git a/src/zigbee.c b/src/zigbee.c index 9421b7214bd0bfeefb6d4757013ba8aaa730eb9f..debd30f4bcc75e3c7ff96c2fe48464edaa073607 100644 --- a/src/zigbee.c +++ b/src/zigbee.c @@ -27,23 +27,23 @@ void zigbee_init(void) void zigbee_enable_power(void) { HAL_GPIO_WritePin(ZIGBEE_PWR_GPIO_PORT,ZIGBEE_PWR_PIN,GPIO_PIN_RESET); - ram_data[BIOLOID_ZIGBEE_CNTRL]|=0x01; + ram_data[BIOLOID_ZIGBEE_CNTRL]|=ZIGBEE_EN_PWR; } void zigbee_disable_power(void) { HAL_GPIO_WritePin(ZIGBEE_PWR_GPIO_PORT,ZIGBEE_PWR_PIN,GPIO_PIN_SET); - ram_data[BIOLOID_ZIGBEE_CNTRL]&=0xFE; + ram_data[BIOLOID_ZIGBEE_CNTRL]&=(~ZIGBEE_EN_PWR); } void zigbee_enable(void) { - ram_data[BIOLOID_ZIGBEE_CNTRL]|=0x02; + ram_data[BIOLOID_ZIGBEE_CNTRL]|=ZIGBEE_ENABLE; } void zigbee_disable(void) { - ram_data[BIOLOID_ZIGBEE_CNTRL]&=0xFD; + ram_data[BIOLOID_ZIGBEE_CNTRL]&=(~ZIGBEE_ENABLE); } // operation functions @@ -56,11 +56,11 @@ void zigbee_process_write_cmd(unsigned short int address,unsigned short int leng { if(ram_in_range(BIOLOID_ZIGBEE_CNTRL,address,length)) { - if(data[BIOLOID_ZIGBEE_CNTRL-address]&0x01) + if(data[BIOLOID_ZIGBEE_CNTRL-address]&ZIGBEE_EN_PWR) zigbee_enable_power(); else zigbee_disable_power(); - if(data[BIOLOID_ZIGBEE_CNTRL-address]&0x02) + if(data[BIOLOID_ZIGBEE_CNTRL-address]&ZIGBEE_ENABLE) zigbee_enable(); else zigbee_disable();