void radio_reset(void) { gpio_high(RESET); delayms(150); gpio_low(RESET); delayus(100); }
static void _change_mode(uint8_t mode) { HRF_writereg(HRF_ADDR_OPMODE, mode); _wait_ready(); gpio_low(LED_GREEN); // TX OFF gpio_low(LED_RED); // RX OFF if (mode == HRF_MODE_TRANSMITTER) { _wait_txready(); gpio_high(LED_RED); // TX ON } else if (mode == HRF_MODE_RECEIVER) { gpio_high(LED_GREEN); // RX ON } radio_data.mode = mode; }
/** * Send a command strobe (one-byte register access that initiates an action) * * @returns status byte */ uint8_t cc2500_send_strobe(uint8_t reg) { uint8_t status = 0; gpio_low(cs_pin); status = spi_write_byte(SPIx, reg); gpio_high(cs_pin); return status; }
/** * Access a configuration register on the CC2500 * NOT used for multi-byte registers or command strobes * * @returns status byte for writes, or value for reads */ uint8_t cc2500_write_register(uint8_t reg, uint8_t val) { uint8_t status = 0; gpio_low(cs_pin); spi_write_byte(SPIx, reg); status = spi_write_byte(SPIx, val); gpio_high(cs_pin); return status; }
void motor_prepare(void) { // motor1 gpio_high(M1_EN); gpio_high(M1_STEP); gpio_high(M1_DIR); gpio_out(M1_EN); gpio_out(M1_STEP); gpio_out(M1_DIR); // motor2 gpio_high(M2_EN); gpio_high(M2_STEP); gpio_high(M2_DIR); gpio_out(M2_EN); gpio_out(M2_STEP); gpio_out(M2_DIR); // timer 1 FastPWM with interrupt TCCR1A = _BV(WGM11); TCCR1B = _BV(WGM12) | _BV(WGM13) | 1; ICR1 = 0x0FFF; // 122Hz TIMSK1 = _BV(TOIE1); }
void blink(const ff_gpio *gpio) { int i; printf("blink\n"); gpio_input(gpio); gpio_output(gpio); printf("Start loop\n"); for (i = 0; i < 10; ++i) { gpio_high(gpio); sleep(1); gpio_low(gpio); sleep(1); } }