void thread_a(void) { while (1) { printk("Timer launched !\n"); #ifdef DEBUG_IO_SLEEP #ifdef SOFT_TIMER timer_soft_oneshot(5000, &callback, NULL); #else timer_oneshot(200, &callback, NULL); #endif printk("Sleeping..."); pio_set_value(GPIOA_BASE, 3); usleep(200000); pio_clear_value(GPIOA_BASE, 3); printk("Waking up !\n"); #else pio_set_value(GPIOA_BASE, 3); #ifdef SOFT_TIMER timer_soft_oneshot(5000, &callback, NULL); #else timer_oneshot(200, &callback, NULL); #endif printk("Sleeping..."); pio_set_value(GPIOC_BASE, 7); usleep(100000); pio_clear_value(GPIOC_BASE, 7); printk("Waking up !\n"); #endif /* DEBUG_IO_SLEEP */ } }
void ili9341_send_data(unsigned char data) { pio_set_value(GPIOD_BASE, 13); pio_clear_value(GPIOC_BASE, 2); spi_write(&spi, data); pio_set_value(GPIOC_BASE, 2); }
void move_steps(int steps_x, int steps_y, int dir_x, int dir_y) { int i = 0; int stepPin; int dirPin; int steps_max; if(steps_x >= steps_y) steps_max = steps_x; else steps_max = steps_y; pio_set_value(GPIO_NUM + MOTOR_1_DIR, dir_x); pio_set_value(GPIO_NUM + MOTOR_2_DIR, dir_y); for(i; i < steps_max; i++){ //write 1 to move one step pio_set_value(GPIO_NUM + MOTOR_1_STEP, 1); pio_set_value(GPIO_NUM + MOTOR_2_STEP, 1); usleep(500); //need to reset value to 0 pio_set_value(GPIO_NUM + MOTOR_1_STEP, 0); pio_set_value(GPIO_NUM + MOTOR_2_STEP, 0); usleep(500); pio_set_value(GPIO_NUM + MOTOR_1_STEP, 1); pio_set_value(GPIO_NUM + MOTOR_2_STEP, 1); usleep(500); //need to reset value to 0 pio_set_value(GPIO_NUM + MOTOR_1_STEP, 0); pio_set_value(GPIO_NUM + MOTOR_2_STEP, 0); //delay 6ms usleep(10000); } }
void df_cs_deactive(int cs) { switch (cs) { case 0: pio_set_value(AT91C_PIN_PA(14), 1); break; case 1: pio_set_value(AT91C_PIN_PA(7), 1); break; } }
void setup_motors() { pio_enable(GPIO_NUM + MOTOR_1_STEP); pio_enable(GPIO_NUM + MOTOR_2_STEP); pio_enable(GPIO_NUM + MOTOR_1_DIR); pio_enable(GPIO_NUM + MOTOR_2_DIR); pio_set_direction(GPIO_NUM + MOTOR_1_STEP, GPIO_OUT); pio_set_direction(GPIO_NUM + MOTOR_2_STEP, GPIO_OUT); pio_set_direction(GPIO_NUM + MOTOR_1_DIR, GPIO_OUT); pio_set_direction(GPIO_NUM + MOTOR_2_DIR, GPIO_OUT); pio_set_value(GPIO_NUM + MOTOR_1_STEP, 0); pio_set_value(GPIO_NUM + MOTOR_2_STEP, 0); pio_set_value(GPIO_NUM + MOTOR_1_DIR, 0); pio_set_value(GPIO_NUM + MOTOR_2_DIR, 0); }
static void data_access_enable(void) { pio_set_value(CONFIG_SYS_PSRAM_DATA_ACCESS_PIN, 0); }
static void spi_cs_deactivate(void) { pio_set_value(CONFIG_SYS_SPI_PCS, 1); }
void mag_on_off(int state) { pio_set_value(MAGNET_PIO, state); }