19 #include "libschedule/schedule.h"
25 #include "inc/hw_memmap.h"
27 #include "driverlib/adc.h"
28 #include "driverlib/sysctl.h"
29 #include "driverlib/gpio.h"
30 #include "driverlib/interrupt.h"
31 #include "driverlib/uart.h"
32 #include "driverlib/pwm.h"
37 os_surrender_context(); \
49 #define can_data_length 5*2
55 #define UART0_RX_BUFFER_SIZE 8
111 if(!(uart0.
ack() & (UART_INT_RX | UART_INT_RT))) {
115 while(UARTCharsAvail(UART0_BASE)) {
135 UART0_RX_BUFFER.
notify((
const int8_t) recv);
153 uint32_t message_id = can0.
ack();
170 if (ping0_sem->
guard()) {
174 os_surrender_context();
184 uart0.
printf(
"Received CAN data: %0X %0X %0X %0X %0X %0X %0X %0X ",
188 os_surrender_context();
205 uint8_t* ir_left_ptr;
206 uint8_t* ir_left_front_ptr;
207 uint8_t* ir_right_ptr;
208 uint8_t* ir_right_front_ptr;
209 uint8_t* ping_front_ptr;
210 uint8_t* can_msg_id_ptr;
212 ir_left_ptr = (uint8_t*)(&sens_ir_left);
213 ir_left_front_ptr = (uint8_t*)(&sens_ir_left_front);
214 ir_right_ptr = (uint8_t*)(&sens_ir_right);
215 ir_right_front_ptr = (uint8_t*)(&sens_ir_right_front);
216 ping_front_ptr = (uint8_t*)(&sens_ping_front);
217 can_msg_id_ptr = (uint8_t*)(&can_msg_id);
221 if (can_msg_id == 0) {
223 sens_ir_left_front = ir1.
distance();
242 sens_ir_right_front = ir3.
distance();
247 can_data[2] = ir_right_front_ptr[0];
248 can_data[3] = ir_right_front_ptr[1];
259 uart0.
printf(
"l: %u lf: %u r: %u rf: %u pf: %u\r\n",
260 sens_ir_left, sens_ir_left_front,
261 sens_ir_right, sens_ir_right_front,
266 os_surrender_context();
273 if(UART0_RX_SEM.
guard()) {
276 char recv = UART0_RX_BUFFER.
get(ok);
278 if(ok) { shell0.
accept(recv); }
280 os_surrender_context();
296 blink =
blinker(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
298 timer0a =
timer(0, TIMER_A, TIMER_CFG_PERIODIC, SysCtlClockGet() / 1000,
299 TIMER_TIMA_TIMEOUT,
true);
301 ping0 =
ping(GPIO_PORTD_BASE, GPIO_PIN_3, 1, TIMER_A);
304 adc0 =
adc(ADC0_BASE, ADC_TRIGGER_TIMER, 0);
313 ir0 =
ir(1, &adc0, 307042, -200, 14);
314 ir1 =
ir(0, &adc0, 300147, -153, 11);
315 ir2 =
ir(3, &adc0, 279094, -295, 8);
316 ir3 =
ir(2, &adc0, 302703, -198, 11);
320 uart0 =
uart(UART0_BASE, INT_UART0);
327 shell0 =
shell(&uart0);
semaphore * get_sem(void)
uint32_t blink_count_green
void atomic_printf(const char *pcString,...)
virtual uint32_t ack(void)
void notify(const T data)
void __cxa_pure_virtual()
uint16_t sens_ir_right_front
void thread_blink_green()
void configure_timer_interrupt(uint32_t timer_base, uint32_t timer_subtimer)
void transmit(uint8_t *data, uint32_t length, uint32_t id=1)
void thread_uart_update()
uint32_t blink_count_blue
const uint32_t can_msg_id
uint16_t sens_ir_left_front
void printf(const char *pcString,...)
void can_prepare_dummy_data(void)
static buffer< char, 8 > UART0_RX_BUFFER
void can_transmitter(void)
static semaphore UART0_RX_SEM
void configure_sequence(uint32_t sequencer_configuration)
static void set_clock(void)
virtual uint32_t ack(void)
virtual void blink(pin_t pin)
uint32_t handle_timer(void)
void ADC0Seq0_Handler(void)
virtual void toggle(pin_t pin)
virtual uint32_t ack(void)
uint32_t handle_gpio(void)