diff --git a/include/darwin_registers.h b/include/darwin_registers.h index a9b994e3cd5ba18ac01f6612fffebf927098724e..d2ce3984760b0afde7554319c78ef15a892ab02e 100644 --- a/include/darwin_registers.h +++ b/include/darwin_registers.h @@ -227,117 +227,117 @@ typedef enum { DARWIN_IMU_ACCEL_Z_L = 0x0148, DARWIN_IMU_ACCEL_Z_H = 0x0149, - DARWIN_MM_NUM_SERVOS = 0x0128, - DARWIN_MM_CNTRL = 0x0129, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 - // | | | | | Enable power | Enable balance | Enable manager - DARWIN_MM_MODULE_EN0 = 0x012A, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0i + DARWIN_MM_NUM_SERVOS = 0x014A, + DARWIN_MM_CNTRL = 0x014B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // scanning | | | | | Enable power | Enable balance | Enable manager + DARWIN_MM_MODULE_EN0 = 0x014C, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0i // Enable servo 0 | assigned module | Enable servo 1 | assigned module // | 000 -> none | // | 001 -> action | // | 010 -> walk | // | 011 -> joints | - DARWIN_MM_MODULE_EN1 = 0x012B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN1 = 0x014D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 2 | assigned module | Enable servo 3 | assigned module - DARWIN_MM_MODULE_EN2 = 0x012C, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN2 = 0x014E, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 4 | assigned module | Enable servo 5 | assigned module - DARWIN_MM_MODULE_EN3 = 0x012D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN3 = 0x014F, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 6 | assigned module | Enable servo 7 | assigned module - DARWIN_MM_MODULE_EN4 = 0x012E, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN4 = 0x0150, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 8 | assigned module | Enable servo 9 | assigned module - DARWIN_MM_MODULE_EN5 = 0x012F, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN5 = 0x0151, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 10 | assigned module | Enable servo 11 | assigned module - DARWIN_MM_MODULE_EN6 = 0x0130, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN6 = 0x0152, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 12 | assigned module | Enable servo 13 | assigned module - DARWIN_MM_MODULE_EN7 = 0x0131, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN7 = 0x0153, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 14 | assigned module | Enable servo 15 | assigned module - DARWIN_MM_MODULE_EN8 = 0x0132, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN8 = 0x0154, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 16 | assigned module | Enable servo 17 | assigned module - DARWIN_MM_MODULE_EN9 = 0x0133, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN9 = 0x0155, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 18 | assigned module | Enable servo 19 | assigned module - DARWIN_MM_MODULE_EN10 = 0x0134, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN10 = 0x0156, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 20 | assigned module | Enable servo 21 | assigned module - DARWIN_MM_MODULE_EN11 = 0x0135, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN11 = 0x0157, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 22 | assigned module | Enable servo 23 | assigned module - DARWIN_MM_MODULE_EN12 = 0x0136, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN12 = 0x0158, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 24 | assigned module | Enable servo 25 | assigned module - DARWIN_MM_MODULE_EN13 = 0x0137, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN13 = 0x0159, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 26 | assigned module | Enable servo 27 | assigned module - DARWIN_MM_MODULE_EN14 = 0x0138, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN14 = 0x015A, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 28 | assigned module | Enable servo 29 | assigned module - DARWIN_MM_MODULE_EN15 = 0x0139, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_MODULE_EN15 = 0x015B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // Enable servo 30 | assigned module | Enable servo 31 | assigned module - DARWIN_MM_SERVO0_CUR_POS_L = 0x013A, // angle in fixed point format 9|7 - DARWIN_MM_SERVO0_CUR_POS_H = 0x013B, - DARWIN_MM_SERVO1_CUR_POS_L = 0x013C, // angle in fixed point format 9|7 - DARWIN_MM_SERVO1_CUR_POS_H = 0x013D, - DARWIN_MM_SERVO2_CUR_POS_L = 0x013E, // angle in fixed point format 9|7 - DARWIN_MM_SERVO2_CUR_POS_H = 0x013F, - DARWIN_MM_SERVO3_CUR_POS_L = 0x0140, // angle in fixed point format 9|7 - DARWIN_MM_SERVO3_CUR_POS_H = 0x0141, - DARWIN_MM_SERVO4_CUR_POS_L = 0x0142, // angle in fixed point format 9|7 - DARWIN_MM_SERVO4_CUR_POS_H = 0x0143, - DARWIN_MM_SERVO5_CUR_POS_L = 0x0144, // angle in fixed point format 9|7 - DARWIN_MM_SERVO5_CUR_POS_H = 0x0145, - DARWIN_MM_SERVO6_CUR_POS_L = 0x0146, // angle in fixed point format 9|7 - DARWIN_MM_SERVO6_CUR_POS_H = 0x0147, - DARWIN_MM_SERVO7_CUR_POS_L = 0x0148, // angle in fixed point format 9|7 - DARWIN_MM_SERVO7_CUR_POS_H = 0x0149, - DARWIN_MM_SERVO8_CUR_POS_L = 0x014A, // angle in fixed point format 9|7 - DARWIN_MM_SERVO8_CUR_POS_H = 0x014B, - DARWIN_MM_SERVO9_CUR_POS_L = 0x014C, // angle in fixed point format 9|7 - DARWIN_MM_SERVO9_CUR_POS_H = 0x014D, - DARWIN_MM_SERVO10_CUR_POS_L = 0x014E, // angle in fixed point format 9|7 - DARWIN_MM_SERVO10_CUR_POS_H = 0x014F, - DARWIN_MM_SERVO11_CUR_POS_L = 0x0150, // angle in fixed point format 9|7 - DARWIN_MM_SERVO11_CUR_POS_H = 0x0151, - DARWIN_MM_SERVO12_CUR_POS_L = 0x0152, // angle in fixed point format 9|7 - DARWIN_MM_SERVO12_CUR_POS_H = 0x0153, - DARWIN_MM_SERVO13_CUR_POS_L = 0x0154, // angle in fixed point format 9|7 - DARWIN_MM_SERVO13_CUR_POS_H = 0x0155, - DARWIN_MM_SERVO14_CUR_POS_L = 0x0156, // angle in fixed point format 9|7 - DARWIN_MM_SERVO14_CUR_POS_H = 0x0157, - DARWIN_MM_SERVO15_CUR_POS_L = 0x0158, // angle in fixed point format 9|7 - DARWIN_MM_SERVO15_CUR_POS_H = 0x0159, - DARWIN_MM_SERVO16_CUR_POS_L = 0x015A, // angle in fixed point format 9|7 - DARWIN_MM_SERVO16_CUR_POS_H = 0x015B, - DARWIN_MM_SERVO17_CUR_POS_L = 0x015C, // angle in fixed point format 9|7 - DARWIN_MM_SERVO17_CUR_POS_H = 0x015D, - DARWIN_MM_SERVO18_CUR_POS_L = 0x015E, // angle in fixed point format 9|7 - DARWIN_MM_SERVO18_CUR_POS_H = 0x015F, - DARWIN_MM_SERVO19_CUR_POS_L = 0x0160, // angle in fixed point format 9|7 - DARWIN_MM_SERVO19_CUR_POS_H = 0x0161, - DARWIN_MM_SERVO20_CUR_POS_L = 0x0162, // angle in fixed point format 9|7 - DARWIN_MM_SERVO20_CUR_POS_H = 0x0163, - DARWIN_MM_SERVO21_CUR_POS_L = 0x0164, // angle in fixed point format 9|7 - DARWIN_MM_SERVO21_CUR_POS_H = 0x0165, - DARWIN_MM_SERVO22_CUR_POS_L = 0x0166, // angle in fixed point format 9|7 - DARWIN_MM_SERVO22_CUR_POS_H = 0x0167, - DARWIN_MM_SERVO23_CUR_POS_L = 0x0168, // angle in fixed point format 9|7 - DARWIN_MM_SERVO23_CUR_POS_H = 0x0169, - DARWIN_MM_SERVO24_CUR_POS_L = 0x016A, // angle in fixed point format 9|7 - DARWIN_MM_SERVO24_CUR_POS_H = 0x016B, - DARWIN_MM_SERVO25_CUR_POS_L = 0x016C, // angle in fixed point format 9|7 - DARWIN_MM_SERVO25_CUR_POS_H = 0x016D, - DARWIN_MM_SERVO26_CUR_POS_L = 0x016E, // angle in fixed point format 9|7 - DARWIN_MM_SERVO26_CUR_POS_H = 0x016F, - DARWIN_MM_SERVO27_CUR_POS_L = 0x0170, // angle in fixed point format 9|7 - DARWIN_MM_SERVO27_CUR_POS_H = 0x0171, - DARWIN_MM_SERVO28_CUR_POS_L = 0x0172, // angle in fixed point format 9|7 - DARWIN_MM_SERVO28_CUR_POS_H = 0x0173, - DARWIN_MM_SERVO29_CUR_POS_L = 0x0174, // angle in fixed point format 9|7 - DARWIN_MM_SERVO29_CUR_POS_H = 0x0175, - DARWIN_MM_SERVO30_CUR_POS_L = 0x0176, // angle in fixed point format 9|7 - DARWIN_MM_SERVO30_CUR_POS_H = 0x0177, - DARWIN_MM_SERVO31_CUR_POS_L = 0x0178, // angle in fixed point format 9|7 - DARWIN_MM_SERVO31_CUR_POS_H = 0x0179, - DARWIN_ACTION_PAGE = 0x017A, - DARWIN_ACTION_CNTRL = 0x017B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_MM_SERVO0_CUR_POS_L = 0x015C, // angle in fixed point format 9|7 + DARWIN_MM_SERVO0_CUR_POS_H = 0x015D, + DARWIN_MM_SERVO1_CUR_POS_L = 0x015E, // angle in fixed point format 9|7 + DARWIN_MM_SERVO1_CUR_POS_H = 0x015F, + DARWIN_MM_SERVO2_CUR_POS_L = 0x0160, // angle in fixed point format 9|7 + DARWIN_MM_SERVO2_CUR_POS_H = 0x0161, + DARWIN_MM_SERVO3_CUR_POS_L = 0x0162, // angle in fixed point format 9|7 + DARWIN_MM_SERVO3_CUR_POS_H = 0x0163, + DARWIN_MM_SERVO4_CUR_POS_L = 0x0164, // angle in fixed point format 9|7 + DARWIN_MM_SERVO4_CUR_POS_H = 0x0165, + DARWIN_MM_SERVO5_CUR_POS_L = 0x0166, // angle in fixed point format 9|7 + DARWIN_MM_SERVO5_CUR_POS_H = 0x0167, + DARWIN_MM_SERVO6_CUR_POS_L = 0x0168, // angle in fixed point format 9|7 + DARWIN_MM_SERVO6_CUR_POS_H = 0x0169, + DARWIN_MM_SERVO7_CUR_POS_L = 0x016A, // angle in fixed point format 9|7 + DARWIN_MM_SERVO7_CUR_POS_H = 0x016B, + DARWIN_MM_SERVO8_CUR_POS_L = 0x016C, // angle in fixed point format 9|7 + DARWIN_MM_SERVO8_CUR_POS_H = 0x016D, + DARWIN_MM_SERVO9_CUR_POS_L = 0x016E, // angle in fixed point format 9|7 + DARWIN_MM_SERVO9_CUR_POS_H = 0x016F, + DARWIN_MM_SERVO10_CUR_POS_L = 0x0170, // angle in fixed point format 9|7 + DARWIN_MM_SERVO10_CUR_POS_H = 0x0171, + DARWIN_MM_SERVO11_CUR_POS_L = 0x0172, // angle in fixed point format 9|7 + DARWIN_MM_SERVO11_CUR_POS_H = 0x0173, + DARWIN_MM_SERVO12_CUR_POS_L = 0x0174, // angle in fixed point format 9|7 + DARWIN_MM_SERVO12_CUR_POS_H = 0x0175, + DARWIN_MM_SERVO13_CUR_POS_L = 0x0176, // angle in fixed point format 9|7 + DARWIN_MM_SERVO13_CUR_POS_H = 0x0177, + DARWIN_MM_SERVO14_CUR_POS_L = 0x0178, // angle in fixed point format 9|7 + DARWIN_MM_SERVO14_CUR_POS_H = 0x0179, + DARWIN_MM_SERVO15_CUR_POS_L = 0x017A, // angle in fixed point format 9|7 + DARWIN_MM_SERVO15_CUR_POS_H = 0x017B, + DARWIN_MM_SERVO16_CUR_POS_L = 0x017C, // angle in fixed point format 9|7 + DARWIN_MM_SERVO16_CUR_POS_H = 0x017D, + DARWIN_MM_SERVO17_CUR_POS_L = 0x017E, // angle in fixed point format 9|7 + DARWIN_MM_SERVO17_CUR_POS_H = 0x017F, + DARWIN_MM_SERVO18_CUR_POS_L = 0x0180, // angle in fixed point format 9|7 + DARWIN_MM_SERVO18_CUR_POS_H = 0x0181, + DARWIN_MM_SERVO19_CUR_POS_L = 0x0182, // angle in fixed point format 9|7 + DARWIN_MM_SERVO19_CUR_POS_H = 0x0183, + DARWIN_MM_SERVO20_CUR_POS_L = 0x0184, // angle in fixed point format 9|7 + DARWIN_MM_SERVO20_CUR_POS_H = 0x0185, + DARWIN_MM_SERVO21_CUR_POS_L = 0x0186, // angle in fixed point format 9|7 + DARWIN_MM_SERVO21_CUR_POS_H = 0x0187, + DARWIN_MM_SERVO22_CUR_POS_L = 0x0188, // angle in fixed point format 9|7 + DARWIN_MM_SERVO22_CUR_POS_H = 0x0189, + DARWIN_MM_SERVO23_CUR_POS_L = 0x018A, // angle in fixed point format 9|7 + DARWIN_MM_SERVO23_CUR_POS_H = 0x018B, + DARWIN_MM_SERVO24_CUR_POS_L = 0x018C, // angle in fixed point format 9|7 + DARWIN_MM_SERVO24_CUR_POS_H = 0x018D, + DARWIN_MM_SERVO25_CUR_POS_L = 0x018E, // angle in fixed point format 9|7 + DARWIN_MM_SERVO25_CUR_POS_H = 0x018F, + DARWIN_MM_SERVO26_CUR_POS_L = 0x0190, // angle in fixed point format 9|7 + DARWIN_MM_SERVO26_CUR_POS_H = 0x0191, + DARWIN_MM_SERVO27_CUR_POS_L = 0x0192, // angle in fixed point format 9|7 + DARWIN_MM_SERVO27_CUR_POS_H = 0x0193, + DARWIN_MM_SERVO28_CUR_POS_L = 0x0194, // angle in fixed point format 9|7 + DARWIN_MM_SERVO28_CUR_POS_H = 0x0195, + DARWIN_MM_SERVO29_CUR_POS_L = 0x0196, // angle in fixed point format 9|7 + DARWIN_MM_SERVO29_CUR_POS_H = 0x0197, + DARWIN_MM_SERVO30_CUR_POS_L = 0x0198, // angle in fixed point format 9|7 + DARWIN_MM_SERVO30_CUR_POS_H = 0x0199, + DARWIN_MM_SERVO31_CUR_POS_L = 0x019A, // angle in fixed point format 9|7 + DARWIN_MM_SERVO31_CUR_POS_H = 0x019B, + DARWIN_ACTION_PAGE = 0x019C, + DARWIN_ACTION_CNTRL = 0x019D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // | | | page running | | | stop page | start page - DARWIN_WALK_CNTRL = 0x017C, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + DARWIN_WALK_CNTRL = 0x019E, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // current phase walking stop walking start walking - DARWIN_WALK_STEP_FW_BW = 0x017D, - DARWIN_WALK_STEP_LEFT_RIGHT = 0x017E, - DARWIN_WALK_STEP_DIRECTION = 0x017F + DARWIN_WALK_STEP_FW_BW = 0x019F, + DARWIN_WALK_STEP_LEFT_RIGHT = 0x01A0, + DARWIN_WALK_STEP_DIRECTION = 0x01A1 } darwin_registers; #define GPIO_BASE_ADDRESS 0x0100 @@ -382,6 +382,7 @@ typedef enum { #define MANAGER_ENABLE 0x01 #define MANAGER_EN_BAL 0x02 #define MANAGER_EN_PWR 0x04 +#define MANAGER_SCANNING 0x80 #define MANAGER_EVEN_SER_EN 0x80 #define MANAGER_EVEN_SER_MOD 0x70 #define MANAGER_ODD_SER_EN 0x08 diff --git a/src/cm730_fw.c b/src/cm730_fw.c index 5679db03820b8b854ea451224f6aebedf1258039..272785af5a7afbfed7e541edbe7e52dd917aa739 100755 --- a/src/cm730_fw.c +++ b/src/cm730_fw.c @@ -35,6 +35,7 @@ int main(void) EE_ReadVariable(MM_PERIOD_OFFSET+1,&eeprom_data); period+=((eeprom_data&0x00FF)<<8); manager_init(period); + gpio_set_led(LED_4); while(1);/* main function does not return */ } diff --git a/src/darwin_dyn_master.c b/src/darwin_dyn_master.c index d55b13c8a87d614617273bd9aaf3bdad3af9671d..23c7525f167bf41e05fc372fc4136d29ed94b684 100755 --- a/src/darwin_dyn_master.c +++ b/src/darwin_dyn_master.c @@ -1,6 +1,7 @@ #include "darwin_dyn_master.h" #include "darwin_time.h" #include "usart1.h" +#include "ram.h" #define ENABLE_RX_EN_GPIO_CLK __GPIOB_CLK_ENABLE() #define RX_EN_PIN GPIO_PIN_5 @@ -94,10 +95,12 @@ void darwin_dyn_master_init(void) inline void darwin_dyn_master_enable_power(void) { HAL_GPIO_WritePin(POWER_GPIO_PORT,POWER_PIN,GPIO_PIN_SET); + ram_data[DARWIN_MM_CNTRL]|=MANAGER_EN_PWR; } inline void darwin_dyn_master_disable_power(void) { HAL_GPIO_WritePin(POWER_GPIO_PORT,POWER_PIN,GPIO_PIN_RESET); + ram_data[DARWIN_MM_CNTRL]&=(~MANAGER_EN_PWR); } diff --git a/src/motion_manager.c b/src/motion_manager.c index 4857ef925fab6881334dbfbf3eabb408ad5d7c35..a19992252053b04f9698dadf168f10ba28d9e38c 100755 --- a/src/motion_manager.c +++ b/src/motion_manager.c @@ -183,6 +183,7 @@ void manager_init(uint16_t period_us) /* initialize the dynamixel master module for the servos */ darwin_dyn_master_init(); + ram_data[DARWIN_MM_CNTRL]|=MANAGER_SCANNING; // enable power to the servos darwin_dyn_master_enable_power(); HAL_Delay(1000); @@ -296,6 +297,7 @@ void manager_init(uint16_t period_us) } } darwin_dyn_master_disable_power(); + ram_data[DARWIN_MM_CNTRL]&=(~MANAGER_SCANNING); /* configure timer */ ENABLE_MANAGER_TIMER_CLK; @@ -304,6 +306,7 @@ void manager_init(uint16_t period_us) MANAGER_TIM_Handle.Init.Prescaler = 72; MANAGER_TIM_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; MANAGER_TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP; + HAL_TIM_Base_Init(&MANAGER_TIM_Handle); HAL_NVIC_SetPriority(MANAGER_TIMER_IRQn, 2, 1); HAL_NVIC_EnableIRQ(MANAGER_TIMER_IRQn); /* use the internal clock */