diff --git a/quad/sw/modular_quad_pid/src/application/main.c b/quad/sw/modular_quad_pid/src/application/main.c index f06bab8c9ecd4562989d50543eed7d3dfbfc639c..51c7e465f9ff16f228e962912e02817ce37d9f9a 100644 --- a/quad/sw/modular_quad_pid/src/application/main.c +++ b/quad/sw/modular_quad_pid/src/application/main.c @@ -25,6 +25,8 @@ int main() // Structures to be used throughout modular_structs_t structs = { }; + // Wire up hardware + setup_hardware(&structs.hardware_struct); // Initialize all required components and structs: // Uart, PWM receiver/generator, I2C, Sensor Board diff --git a/quad/sw/modular_quad_pid/src/application/util.c b/quad/sw/modular_quad_pid/src/application/util.c index 9262e49f48dba7bbbce6975527b848eb4111ca5c..864e61ce37d15ea8c863b6fba599d0c7e88684fa 100644 --- a/quad/sw/modular_quad_pid/src/application/util.c +++ b/quad/sw/modular_quad_pid/src/application/util.c @@ -1,4 +1,5 @@ #include "util.h" +#include "../hardware/hw_impl_zybo.h" #include <stdlib.h> #include <stdio.h> @@ -13,6 +14,16 @@ extern int motor0_bias, motor1_bias, motor2_bias, motor3_bias; +void setup_hardware(hardware_t *hardware) { + hardware->i2c = create_zybo_i2c(); + hardware->pwm_inputs = create_zybo_pwm_inputs(); + hardware->pwm_outputs = create_zybo_pwm_outputs(); + hardware->uart = create_zybo_uart(); + hardware->global_timer = create_zybo_global_timer(); + hardware->axi_timer = create_zybo_axi_timer(); + hardware->mio7_led = create_zybo_mio7_led(); +} + /** * Reads all 6 receiver channels at once */ diff --git a/quad/sw/modular_quad_pid/src/application/util.h b/quad/sw/modular_quad_pid/src/application/util.h index 540c15f9aab069bd316e2b7b17e91a37afb525e4..5524b56ff4ad3b8729b3b887fdbf7a433517b0e6 100644 --- a/quad/sw/modular_quad_pid/src/application/util.h +++ b/quad/sw/modular_quad_pid/src/application/util.h @@ -12,6 +12,8 @@ #include "controllers.h" #include "hw_iface.h" +void setup_hardware(hardware_t *hardware); + void read_rec_all(struct PWMInputDriver *pwm_input, u32 *mixer); int read_kill(int gear); int read_flap(int flap); diff --git a/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.c b/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.c new file mode 100644 index 0000000000000000000000000000000000000000..9e74c42c34fb303a1112534fb750680305e2cf15 --- /dev/null +++ b/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.c @@ -0,0 +1,62 @@ +#include "hw_impl_zybo.h" + +struct UARTDriver create_zybo_uart() { + struct UARTDriver uart; + uart.state = NULL; + uart.reset = zybo_uart_reset; + uart.write = zybo_uart_write; + uart.read = zybo_uart_read; + return uart; +} + +struct PWMOutputDriver create_zybo_pwm_outputs() { + struct PWMOutputDriver pwm_outputs; + pwm_outputs.state = NULL; + pwm_outputs.reset = zybo_pwm_output_reset; + pwm_outputs.write = zybo_pwm_output_write; + return pwm_outputs; +} + +struct PWMInputDriver create_zybo_pwm_inputs() { + struct PWMInputDriver pwm_inputs; + pwm_inputs.state = NULL; + pwm_inputs.reset = zybo_pwm_input_reset; + pwm_inputs.read = zybo_pwm_input_read; + return pwm_inputs; +} + +struct I2CDriver create_zybo_i2c() { + struct I2CDriver i2c; + i2c.state = NULL; + i2c.reset = zybo_i2c_reset; + i2c.write = zybo_i2c_write; + i2c.read = zybo_i2c_read; + return i2c; +} + +struct TimerDriver create_zybo_global_timer() { + struct TimerDriver global_timer; + global_timer.state = NULL; + global_timer.reset = zybo_global_timer_reset; + global_timer.restart = zybo_global_timer_restart; + global_timer.read = zybo_global_timer_read; + return global_timer; +} + +struct TimerDriver create_zybo_axi_timer() { + struct TimerDriver axi_timer; + axi_timer.state = NULL; + axi_timer.reset = zybo_axi_timer_reset; + axi_timer.restart = zybo_axi_timer_restart; + axi_timer.read = zybo_axi_timer_read; + return axi_timer; +} + +struct LEDDriver create_zybo_mio7_led() { + struct LEDDriver mio7_led; + mio7_led.state = NULL; + mio7_led.reset = zybo_mio7_led_reset; + mio7_led.turn_on = zybo_mio7_led_turn_on; + mio7_led.turn_off = zybo_mio7_led_turn_off; + return mio7_led; +} diff --git a/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.h b/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.h index 4128f9339f9600b5f377e14274737808f7d011b0..04b408c04dff83391f02e46e1884d6206be60a37 100644 --- a/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.h +++ b/quad/sw/modular_quad_pid/src/hardware/hw_impl_zybo.h @@ -44,8 +44,16 @@ int zybo_axi_timer_reset(struct TimerDriver *self); int zybo_axi_timer_restart(struct TimerDriver *self); int zybo_axi_timer_read(struct TimerDriver *self, unsigned long *us); -int zybo_led_reset(struct LEDDriver *self); -int zybo_led_turn_on(struct LEDDriver *self); -int zybo_led_turn_off(struct LEDDriver *self); +int zybo_mio7_led_reset(struct LEDDriver *self); +int zybo_mio7_led_turn_on(struct LEDDriver *self); +int zybo_mio7_led_turn_off(struct LEDDriver *self); + +struct UARTDriver create_zybo_uart(); +struct PWMOutputDriver create_zybo_pwm_outputs(); +struct PWMInputDriver create_zybo_pwm_inputs(); +struct I2CDriver create_zybo_i2c(); +struct TimerDriver create_zybo_global_timer(); +struct TimerDriver create_zybo_axi_timer(); +struct LEDDriver create_zybo_mio7_led(); #endif