void ant_v2x_periodic( void ) { /* Run initialisation and communication request */ switch (ant_v2x_status) { case MAG_S_RESET: SetBit(ANT_V2X_PORT, ANT_V2X_PIN); ant_v2x_status = MAG_S_UNINIT; break; case MAG_S_UNINIT: ant_v2x_periodic_initialise(); break; case MAG_S_READY: /* Ready to receive request */ /*GREEN_LED_ON();*/ /*YELLOW_LED_OFF();*/ // if (ant_v2x_data_available) return ant_v2x_send_get_data(); ant_v2x_status = MAG_S_WAIT_MEAS; ant_v2x_periodic_count = 0; break; case MAG_S_WAIT_MEAS: { /* Waiting for measures */ ant_v2x_periodic_count++; if (ant_v2x_periodic_count > 5) { ant_v2x_com_status = MAG_CS_READING; SPI_start(); ant_v2x_res_idx = 0; ant_v2x_res_len = 43; SPI_transmit(0x00); } } break; } }
/********************************Request procedure***********************************/ void ant_v2x_send_req(const uint8_t* req, uint8_t len) { memcpy(ant_v2x_req, req, len); ant_v2x_req_len = len; ant_v2x_req_idx = 0; ant_v2x_com_status = MAG_CS_WRITING; SPI_start(); SPI_transmit(SYNC_FLAG);/* transmit SYNC_FLAG first for every beginning of transmition */ }
void SPI_init(SPIDef * port, GPIOPin sck, GPIOPin miso, GPIOPin mosi, GPIOPin ncs) { SPI_enable(port); SPI_IOconfig(port, sck, miso, mosi, ncs); SPI_start(port); }