mirror of
https://github.com/EFeru/hoverboard-sideboard-hack-GD.git
synced 2025-08-16 16:46:11 +00:00
iBUS on AUX Serial is working
- implemented iBUS - updated the Tabs to spaces
This commit is contained in:
14
Inc/config.h
14
Inc/config.h
@@ -78,6 +78,13 @@
|
||||
/* ==================================== VARIANT DEBUG ==================================== */
|
||||
#ifdef VARIANT_DEBUG
|
||||
#define SERIAL_DEBUG // [-] Define for Serial Debug via the serial port
|
||||
#define SERIAL_AUX_RX // [-] Use AUX4, AUX5 as USART port
|
||||
// #define SERIAL_AUX_TX // [-] Use AUX4, AUX5 as USART port
|
||||
|
||||
#define CONTROL_IBUS
|
||||
#define IBUS_NUM_CHANNELS 14 // Total number of IBUS channels to receive, even if they are not used.
|
||||
#define IBUS_LENGTH 0x20
|
||||
#define IBUS_COMMAND 0x40
|
||||
#endif
|
||||
|
||||
|
||||
@@ -85,11 +92,11 @@
|
||||
#ifdef VARIANT_HOVERCAR
|
||||
#define SERIAL_CONTROL // [-] Define for Serial Control via the serial port
|
||||
#define SERIAL_FEEDBACK // [-] Define for Serial Feedback via the serial port
|
||||
#define SERIAL_AUX_TX // [-] Use AUX4, AUX5 as USART port
|
||||
#define SERIAL_AUX_RX // [-] Use AUX4, AUX5 as USART port
|
||||
// #define SERIAL_AUX_TX // [-] Use AUX4, AUX5 as USART port
|
||||
|
||||
#define CONTROL_IBUS
|
||||
#define IBUS_NUM_CHANNELS 14 // total number of IBUS channels to receive, even if they are not used.
|
||||
#define IBUS_NUM_CHANNELS 14 // Total number of IBUS channels to receive, even if they are not used.
|
||||
#define IBUS_LENGTH 0x20
|
||||
#define IBUS_COMMAND 0x40
|
||||
#endif
|
||||
@@ -112,7 +119,8 @@
|
||||
#error SERIAL_DEBUG and SERIAL_FEEDBACK not allowed. It is on the same cable.
|
||||
#endif
|
||||
|
||||
#if defined(AUX45_USE_GPIO) && (defined(SERIAL_AUX_RX) || defined(AUX45_USE_I2C)) || (defined(SERIAL_AUX_RX) && defined(AUX45_USE_I2C))
|
||||
#if defined(AUX45_USE_GPIO) && (defined(SERIAL_AUX_RX) || defined(SERIAL_AUX_TX) || defined(AUX45_USE_I2C)) \
|
||||
|| ((defined(SERIAL_AUX_RX) || defined(SERIAL_AUX_TX)) && defined(AUX45_USE_I2C))
|
||||
#error AUX45_USE_(GPIO,USART,I2C) not allowed in the same time. It is on the same cable.
|
||||
#endif
|
||||
|
||||
|
206
Inc/defines.h
206
Inc/defines.h
@@ -28,156 +28,158 @@
|
||||
#include "util.h"
|
||||
|
||||
#if defined(PRINTF_FLOAT_SUPPORT) && defined(SERIAL_DEBUG) && defined(__GNUC__)
|
||||
asm(".global _printf_float"); // this is the magic trick for printf to support float. Warning: It will increase code considerably! Better to avoid!
|
||||
asm(".global _printf_float"); // this is the magic trick for printf to support float. Warning: It will increase code considerably! Better to avoid!
|
||||
#endif
|
||||
|
||||
/* =========================== Defines General =========================== */
|
||||
// #define _BV(bit) (1 << (bit))
|
||||
#define ARRAY_LEN(x) (uint32_t)(sizeof(x) / sizeof(*(x)))
|
||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#define i2c_write i2c_writeBytes
|
||||
#define i2c_read i2c_readBytes
|
||||
#define delay_ms delay_1ms
|
||||
#define get_ms get_tick_count_ms
|
||||
#define log_i printf // redirect the log_i debug function to printf
|
||||
// #define _BV(bit) (1 << (bit))
|
||||
#define ARRAY_LEN(x) (uint32_t)(sizeof(x) / sizeof(*(x)))
|
||||
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
|
||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#define i2c_write i2c_writeBytes
|
||||
#define i2c_read i2c_readBytes
|
||||
#define delay_ms delay_1ms
|
||||
#define get_ms get_tick_count_ms
|
||||
#define log_i printf // redirect the log_i debug function to printf
|
||||
|
||||
|
||||
/* =========================== Defines LEDs =========================== */
|
||||
#define LED1_GPIO_Port GPIOA
|
||||
#define LED1_Pin GPIO_PIN_0 // RED
|
||||
#define LED2_GPIO_Port GPIOB
|
||||
#define LED2_Pin GPIO_PIN_9 // GREEN
|
||||
#define LED3_GPIO_Port GPIOB
|
||||
#define LED3_Pin GPIO_PIN_8 // YELLOW
|
||||
#define LED4_GPIO_Port GPIOB
|
||||
#define LED4_Pin GPIO_PIN_5 // BLUE1
|
||||
#define LED5_GPIO_Port GPIOB
|
||||
#define LED5_Pin GPIO_PIN_4 // BLUE2
|
||||
#define LED1_GPIO_Port GPIOA
|
||||
#define LED1_Pin GPIO_PIN_0 // RED
|
||||
#define LED2_GPIO_Port GPIOB
|
||||
#define LED2_Pin GPIO_PIN_9 // GREEN
|
||||
#define LED3_GPIO_Port GPIOB
|
||||
#define LED3_Pin GPIO_PIN_8 // YELLOW
|
||||
#define LED4_GPIO_Port GPIOB
|
||||
#define LED4_Pin GPIO_PIN_5 // BLUE1
|
||||
#define LED5_GPIO_Port GPIOB
|
||||
#define LED5_Pin GPIO_PIN_4 // BLUE2
|
||||
|
||||
#define LED1_SET (0x01)
|
||||
#define LED2_SET (0x02)
|
||||
#define LED3_SET (0x04)
|
||||
#define LED4_SET (0x08)
|
||||
#define LED5_SET (0x10)
|
||||
#define LED1_SET (0x01)
|
||||
#define LED2_SET (0x02)
|
||||
#define LED3_SET (0x04)
|
||||
#define LED4_SET (0x08)
|
||||
#define LED5_SET (0x10)
|
||||
|
||||
|
||||
/* =========================== Defines SENSORS =========================== */
|
||||
#define SENSOR1_GPIO_Port GPIOA
|
||||
#define SENSOR1_Pin GPIO_PIN_4
|
||||
#define SENSOR2_GPIO_Port GPIOC
|
||||
#define SENSOR2_Pin GPIO_PIN_14
|
||||
#define SENSOR1_GPIO_Port GPIOA
|
||||
#define SENSOR1_Pin GPIO_PIN_4
|
||||
#define SENSOR2_GPIO_Port GPIOC
|
||||
#define SENSOR2_Pin GPIO_PIN_14
|
||||
|
||||
|
||||
/* =========================== Defines USART =========================== */
|
||||
#define USART_GPIO_PORT GPIOA
|
||||
#define USART_GPIO_CLK RCU_GPIOA
|
||||
#define USART_AF GPIO_AF_1
|
||||
#define USART_GPIO_PORT GPIOA
|
||||
#define USART_GPIO_CLK RCU_GPIOA
|
||||
#define USART_AF GPIO_AF_1
|
||||
|
||||
// USART ports number
|
||||
#define USARTn 2
|
||||
#define USARTn 2
|
||||
|
||||
// USART AUX, connected to USART0
|
||||
#define USART_AUX USART0
|
||||
#define USART0_CLK RCU_USART0
|
||||
#define USART0_TX_PIN GPIO_PIN_9
|
||||
#define USART0_RX_PIN GPIO_PIN_10
|
||||
#define USART0_TX_DMA_CH DMA_CH1
|
||||
#define USART0_RX_DMA_CH DMA_CH2
|
||||
#define USART0_TDATA_ADDRESS ((uint32_t)0x40013828) // USART0: 0x4001 3800 - 0x4001 3BFF, Rx offset: 0x28, Tx offset: 0x24
|
||||
#define USART0_RDATA_ADDRESS ((uint32_t)0x40013824)
|
||||
#define USART_AUX USART0
|
||||
#define USART0_CLK RCU_USART0
|
||||
#define USART0_TX_PIN GPIO_PIN_9
|
||||
#define USART0_RX_PIN GPIO_PIN_10
|
||||
#define USART0_TX_DMA_CH DMA_CH1
|
||||
#define USART0_RX_DMA_CH DMA_CH2
|
||||
#define USART0_TDATA_ADDRESS ((uint32_t)0x40013828) // USART0: 0x4001 3800 - 0x4001 3BFF, Rx offset: 0x28, Tx offset: 0x24
|
||||
#define USART0_RDATA_ADDRESS ((uint32_t)0x40013824)
|
||||
|
||||
// USART MAIN, connected to USART1
|
||||
#define USART_MAIN USART1
|
||||
#define USART1_CLK RCU_USART1
|
||||
#define USART1_TX_PIN GPIO_PIN_2
|
||||
#define USART1_RX_PIN GPIO_PIN_3
|
||||
#define USART1_TX_DMA_CH DMA_CH3
|
||||
#define USART1_RX_DMA_CH DMA_CH4
|
||||
#define USART1_TDATA_ADDRESS ((uint32_t)0x40004428) // USART1: 0x4000 4400 - 0x4000 47FF, Rx offset: 0x28, Tx offset: 0x24
|
||||
#define USART1_RDATA_ADDRESS ((uint32_t)0x40004424)
|
||||
#define USART_MAIN USART1
|
||||
#define USART1_CLK RCU_USART1
|
||||
#define USART1_TX_PIN GPIO_PIN_2
|
||||
#define USART1_RX_PIN GPIO_PIN_3
|
||||
#define USART1_TX_DMA_CH DMA_CH3
|
||||
#define USART1_RX_DMA_CH DMA_CH4
|
||||
#define USART1_TDATA_ADDRESS ((uint32_t)0x40004428) // USART1: 0x4000 4400 - 0x4000 47FF, Rx offset: 0x28, Tx offset: 0x24
|
||||
#define USART1_RDATA_ADDRESS ((uint32_t)0x40004424)
|
||||
|
||||
#define PRINT_AUX (0x01)
|
||||
|
||||
/* =========================== Defines AUX =========================== */
|
||||
#define AUX1_PU_GPIO_Port GPIOC
|
||||
#define AUX1_PU_Pin GPIO_PIN_15
|
||||
#define AUX2_GPIO_Port GPIOA
|
||||
#define AUX2_Pin GPIO_PIN_1
|
||||
#define AUX3_GPIO_Port GPIOB
|
||||
#define AUX3_Pin GPIO_PIN_10
|
||||
#define AUX1_PU_GPIO_Port GPIOC
|
||||
#define AUX1_PU_Pin GPIO_PIN_15
|
||||
#define AUX2_GPIO_Port GPIOA
|
||||
#define AUX2_Pin GPIO_PIN_1
|
||||
#define AUX3_GPIO_Port GPIOB
|
||||
#define AUX3_Pin GPIO_PIN_10
|
||||
#ifdef AUX45_USE_GPIO
|
||||
#define AUX4_GPIO_Port GPIOA
|
||||
#define AUX4_Pin GPIO_PIN_10
|
||||
#define AUX5_GPIO_Port GPIOA
|
||||
#define AUX5_Pin GPIO_PIN_9
|
||||
#define AUX4_GPIO_Port GPIOA
|
||||
#define AUX4_Pin GPIO_PIN_10
|
||||
#define AUX5_GPIO_Port GPIOA
|
||||
#define AUX5_Pin GPIO_PIN_9
|
||||
#endif
|
||||
|
||||
|
||||
/* =========================== Defines I2C =========================== */
|
||||
typedef enum {READ = 0, WRITE = !READ} i2c_cmd;
|
||||
#define MPU_I2C I2C0
|
||||
#define MPU_RCU_I2C RCU_I2C0
|
||||
#define MPU_SCL_GPIO_Port GPIOB
|
||||
#define MPU_SCL_Pin GPIO_PIN_6
|
||||
#define MPU_SDA_GPIO_Port GPIOB
|
||||
#define MPU_SDA_Pin GPIO_PIN_7
|
||||
#define I2C_OWN_ADDRESS7 0x24
|
||||
#define MPU_I2C I2C0
|
||||
#define MPU_RCU_I2C RCU_I2C0
|
||||
#define MPU_SCL_GPIO_Port GPIOB
|
||||
#define MPU_SCL_Pin GPIO_PIN_6
|
||||
#define MPU_SDA_GPIO_Port GPIOB
|
||||
#define MPU_SDA_Pin GPIO_PIN_7
|
||||
#define I2C_OWN_ADDRESS7 0x24
|
||||
|
||||
#ifdef AUX45_USE_I2C
|
||||
#define AUX_I2C I2C1
|
||||
#define AUX_RCU_I2C RCU_I2C1
|
||||
#define AUX_SCL_GPIO_Port GPIOA
|
||||
#define AUX_SCL_Pin GPIO_PIN_9
|
||||
#define AUX_SDA_GPIO_Port GPIOA
|
||||
#define AUX_SDA_Pin GPIO_PIN_10
|
||||
#define AUX_I2C_OWN_ADDRESS7 0x34
|
||||
#define AUX_I2C I2C1
|
||||
#define AUX_RCU_I2C RCU_I2C1
|
||||
#define AUX_SCL_GPIO_Port GPIOA
|
||||
#define AUX_SCL_Pin GPIO_PIN_9
|
||||
#define AUX_SDA_GPIO_Port GPIOA
|
||||
#define AUX_SDA_Pin GPIO_PIN_10
|
||||
#define AUX_I2C_OWN_ADDRESS7 0x34
|
||||
#endif
|
||||
|
||||
/* =========================== Defines MPU-6050 =========================== */
|
||||
#define RAD2DEG 57.295779513082323 // RAD2DEG = 180/pi. Example: angle[deg] = angle[rad] * RAD2DEG
|
||||
#define q30 1073741824 // 1073741824 = 2^30
|
||||
#define ACCEL_ON (0x01)
|
||||
#define GYRO_ON (0x02)
|
||||
#define COMPASS_ON (0x04)
|
||||
#define RAD2DEG 57.295779513082323 // RAD2DEG = 180/pi. Example: angle[deg] = angle[rad] * RAD2DEG
|
||||
#define q30 1073741824 // 1073741824 = 2^30
|
||||
#define ACCEL_ON (0x01)
|
||||
#define GYRO_ON (0x02)
|
||||
#define COMPASS_ON (0x04)
|
||||
|
||||
#define PRINT_ACCEL (0x01)
|
||||
#define PRINT_GYRO (0x02)
|
||||
#define PRINT_QUAT (0x04)
|
||||
#define PRINT_EULER (0x08)
|
||||
#define PRINT_TEMP (0x10)
|
||||
#define PRINT_PEDO (0x20)
|
||||
#define PRINT_ACCEL (0x01)
|
||||
#define PRINT_GYRO (0x02)
|
||||
#define PRINT_QUAT (0x04)
|
||||
#define PRINT_EULER (0x08)
|
||||
#define PRINT_TEMP (0x10)
|
||||
#define PRINT_PEDO (0x20)
|
||||
|
||||
typedef struct{
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t z;
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t z;
|
||||
} Gyro;
|
||||
|
||||
typedef struct{
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t z;
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t z;
|
||||
} Accel;
|
||||
|
||||
typedef struct{
|
||||
int32_t w;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t z;
|
||||
int32_t w;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t z;
|
||||
} Quaternion;
|
||||
|
||||
typedef struct{
|
||||
int16_t roll;
|
||||
int16_t pitch;
|
||||
int16_t yaw;
|
||||
int16_t roll;
|
||||
int16_t pitch;
|
||||
int16_t yaw;
|
||||
} Euler;
|
||||
|
||||
typedef struct {
|
||||
Gyro gyro;
|
||||
Accel accel;
|
||||
Quaternion quat;
|
||||
Euler euler;
|
||||
int16_t temp;
|
||||
Gyro gyro;
|
||||
Accel accel;
|
||||
Quaternion quat;
|
||||
Euler euler;
|
||||
int16_t temp;
|
||||
} MPU_Data;
|
||||
|
||||
#endif // DEFINES_H
|
||||
|
@@ -24,12 +24,12 @@
|
||||
#include "config.h"
|
||||
|
||||
/* Interrupt function declarations */
|
||||
void I2C0_EventIRQ_Handler(void); // handle I2C0 event interrupt request
|
||||
void I2C0_ErrorIRQ_Handler(void); // handle I2C0 error interrupt request
|
||||
void I2C0_EventIRQ_Handler(void); // handle I2C0 event interrupt request
|
||||
void I2C0_ErrorIRQ_Handler(void); // handle I2C0 error interrupt request
|
||||
|
||||
#ifdef AUX45_USE_I2C
|
||||
void I2C1_EventIRQ_Handler(void); // handle I2C1 event interrupt request
|
||||
void I2C1_ErrorIRQ_Handler(void); // handle I2C1 error interrupt request
|
||||
void I2C1_EventIRQ_Handler(void); // handle I2C1 event interrupt request
|
||||
void I2C1_ErrorIRQ_Handler(void); // handle I2C1 error interrupt request
|
||||
#endif
|
||||
|
||||
|
||||
|
@@ -54,7 +54,6 @@
|
||||
|
||||
/* Set up APIs */
|
||||
int mpu_init(void);
|
||||
int mpu_init_slave(void);
|
||||
int mpu_set_bypass(unsigned char bypass_on);
|
||||
|
||||
/* Configuration APIs */
|
||||
@@ -134,9 +133,13 @@ void mpu_calc_euler_angles(void);
|
||||
void mpu_tap_func(unsigned char direction, unsigned char count);
|
||||
void mpu_android_orient_func(unsigned char orientation);
|
||||
|
||||
/* Handle user input commands */
|
||||
void mpu_handle_input(char c);
|
||||
/* MPU Print data */
|
||||
void mpu_print_to_console(void);
|
||||
|
||||
#endif // MPU_SENSOR_ENABLE
|
||||
|
||||
/* Handle user input commands */
|
||||
void mpu_handle_input(char c);
|
||||
|
||||
#endif // MPU6050_H
|
||||
|
||||
|
25
Inc/util.h
25
Inc/util.h
@@ -27,10 +27,11 @@
|
||||
#ifdef SERIAL_CONTROL
|
||||
typedef struct{
|
||||
uint16_t start;
|
||||
int16_t roll;
|
||||
int16_t pitch;
|
||||
int16_t yaw;
|
||||
uint16_t sensors;
|
||||
int16_t pitch; // Angle
|
||||
int16_t dPitch; // Angle derivative
|
||||
int16_t cmd1; // RC Channel 1
|
||||
int16_t cmd2; // RC Channel 2
|
||||
uint16_t sensors; // RC Switches and Optical sideboard sensors
|
||||
uint16_t checksum;
|
||||
} SerialSideboard;
|
||||
#endif
|
||||
@@ -75,12 +76,18 @@ typedef struct{
|
||||
void consoleLog(char *message);
|
||||
void toggle_led(uint32_t gpio_periph, uint32_t pin);
|
||||
void intro_demo_led(uint32_t tDelay);
|
||||
uint8_t switch_check(uint16_t ch, uint8_t type);
|
||||
|
||||
/* input initialization function */
|
||||
void input_init(void);
|
||||
|
||||
/* usart read functions */
|
||||
void usart0_rx_check(void);
|
||||
/* handle functions */
|
||||
void handle_mpu6050(void);
|
||||
void handle_sensors(void);
|
||||
void handle_usart(void);
|
||||
void handle_leds(void);
|
||||
|
||||
/* usart1 read functions */
|
||||
void usart1_rx_check(void);
|
||||
#ifdef SERIAL_DEBUG
|
||||
void usart_process_debug(uint8_t *userCommand, uint32_t len);
|
||||
@@ -88,10 +95,16 @@ void usart_process_debug(uint8_t *userCommand, uint32_t len);
|
||||
#ifdef SERIAL_FEEDBACK
|
||||
void usart_process_data(SerialFeedback *Feedback_in, SerialFeedback *Feedback_out);
|
||||
#endif
|
||||
|
||||
/* usart0 read functions */
|
||||
void usart0_rx_check(void);
|
||||
#ifdef SERIAL_AUX_RX
|
||||
void usart_process_command(SerialCommand *command_in, SerialCommand *command_out);
|
||||
#endif
|
||||
|
||||
/* AUX Serial Print data */
|
||||
void aux_print_to_console(void);
|
||||
|
||||
/* i2c write/read functions */
|
||||
int8_t i2c_writeBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
|
||||
int8_t i2c_writeByte (uint8_t slaveAddr, uint8_t regAddr, uint8_t data);
|
||||
|
Reference in New Issue
Block a user