void dma1_channel6_isr() { if (state == ADC_WORKING) state = ADC_CH6_DONE; else if (state == ADC_CH5_DONE) dma_complete(); else cm3_assert(0); }
void gps_init() { int ok; calculate_crc_and_ack(set_navmode, sizeof(set_navmode)); cm3_assert(set_navmode[sizeof(set_navmode) - 2] == 94); cm3_assert(set_navmode[sizeof(set_navmode) - 1] == 235); cm3_assert(expect_ack[8] == 49); cm3_assert(expect_ack[9] == 89); gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO2); gpio_set_mode(GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO3); usart_set_baudrate(USART2, 9600); usart_set_databits(USART2, 8); usart_set_stopbits(USART2, USART_STOPBITS_1); usart_set_mode(USART2, USART_MODE_TX); usart_set_parity(USART2, USART_PARITY_NONE); usart_set_flow_control(USART2, USART_FLOWCONTROL_NONE); usart_enable(USART2); timer_reset(TIM5); timer_set_mode(TIM5, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); /* 2Hz */ timer_set_prescaler(TIM5, 640); timer_set_period(TIM5, 28125); ok = silence_nmea(); if (!ok) goto bail; ok = command(set_port, sizeof(set_port)); if (!ok) goto bail; bail: asm("nop"); }
void bsp_init(void) { cm3_assert(!is_initialized); // Main clock setup rcc_clock_setup_in_hsi48_out_48mhz(); led_init(); comm_init(); is_initialized = true; }
void dma1_channel4_isr() { cm3_assert(state == READING); deselect_slave(); /* Data is in bytes 1, 3, 5, 7 */ rxbuf[0] = rxbuf[1]; rxbuf[1] = rxbuf[3]; rxbuf[2] = rxbuf[5]; rxbuf[3] = rxbuf[7]; debug("baro: %i %i %i %i\n", rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3]); /* Assume that all zeros is implausible: */ if ((rxbuf[0] | rxbuf[1] | rxbuf[2] | rxbuf[3]) == 0) bad_thing_set(BARO_FAIL); else bad_thing_clear(BARO_FAIL); state = IDLE; }
void tim4_isr() { timer_clear_flag(TIM4, TIM_SR_UIF); cm3_assert(state == IDLE); state = READING; select_slave(); dma_clear_interrupt_flags(DMA1, DMA_CHANNEL1, 0xf); dma_clear_interrupt_flags(DMA1, DMA_CHANNEL2, 0xf); dma_set_memory_address(DMA1, DMA_CHANNEL1, (uint32_t) txstr); dma_set_number_of_data(DMA1, DMA_CHANNEL1, 10); dma_set_memory_address(DMA1, DMA_CHANNEL2, (uint32_t) rxbuf); dma_set_number_of_data(DMA1, DMA_CHANNEL2, 10); spi_enable_tx_dma(SPI2); spi_enable_rx_dma(SPI2); dma_enable_channel(DMA1, DMA_CHANNEL1); dma_enable_channel(DMA1, DMA_CHANNEL2); }
static void assert_idle() { cm3_assert(SPI2_SR & SPI_SR_TXE); cm3_assert(!(SPI2_SR & SPI_SR_RXNE)); }
void bsp_led_toggle(enum board_led led) { cm3_assert(is_initialized); gpio_toggle(GPIOC, led_pin_lut[led]); }
void bsp_led_off(enum board_led led) { cm3_assert(is_initialized); gpio_clear(GPIOC, led_pin_lut[led]); }
bool bsp_led_get_state(enum board_led led) { cm3_assert(is_initialized); return gpio_get(GPIOC, led_pin_lut[led]); }