void Timer1_IRQHandler(void) { // FIXME: Reduce the length of this time critical section uint8_t pkt_len = TX_CTRL->PAY_LEN; int i; // Prepare packet pkt.src_addr = node_id; pkt.seq_num[0] = (seq_num >> 8) & 0xFF; pkt.seq_num[1] = seq_num & 0xFF; for (i = 0; i < pkt_len-5; i++) { pkt.payload[i] = lfsr_rand(); // pkt.payload[i] = 0x00; // pkt.payload[i] = i & 0xFF; } set_packet_crc(&pkt, pkt_len); send_packet(&pkt, pkt_len-5); seq_num++; // TX_CTRL->CTRL = 0x01; // Start // Turn on LED MSS_GPIO_set_output(MSS_GPIO_LED1, 1); MSS_TIM2_load_immediate(1e2 * MICRO_SEC_DIV); MSS_TIM2_start(); MSS_TIM1_clear_irq(); }
void delay( void) { MSS_TIM2_load_immediate(10000000); MSS_TIM2_start(); int timer_val = MSS_TIM2_get_current_value(); while ( timer_val != 0) { timer_val = MSS_TIM2_get_current_value(); } return; }
int main() { //uint32_t count; MSS_GPIO_init(); MSS_GPIO_config( MSS_GPIO_0, MSS_GPIO_OUTPUT_MODE); MSS_GPIO_config( MSS_GPIO_1, MSS_GPIO_OUTPUT_MODE); MSS_I2C_init(&g_mss_i2c1 , IMU_ADDRESS_WRITE, MSS_I2C_PCLK_DIV_256 ); imu_init(); //one timer tick is 10ns at 100Mhz MSS_TIM1_init( MSS_TIMER_PERIODIC_MODE); MSS_TIM1_enable_irq(); MSS_TIM1_load_background(100000); MSS_TIM1_start(); MSS_TIM2_init( MSS_TIMER_ONE_SHOT_MODE); while( 1 ) { //int16_t x_accl = imu_accl_x(); //int16_t y_accl = imu_accl_y(); //int16_t z_accl = imu_accl_z(); X_GYRO = imu_gyro_x(); Y_ACCL = imu_accl_y(); //uint16_t y_gyro = imu_gyro_y(); //uint16_t z_gyro = imu_gyro_z(); //printf("Avg X: %f\r\n", avg_x); //printf("Accel X: %i\n\r", x_accl); //printf("Accel Y: %u\n\r", y_accl); //printf("Accel Z: %u\n\r", z_accl); //printf("Gyro X: %u\r\n", x_gyro); //printf("Gyro Y: %u\r\n", y_gyro); //printf("Gyro Z: %u\r\n", z_gyro); //150000 = 1.5ms pulse //1.49ms pulse = equilibrium point uint32_t pulsewidth_right = 150000 + (angle/90.0)*100000; uint32_t pulsewidth_left = 150000 - (angle/90.0)*100000; uint32_t period = 2000000; MSS_TIM2_load_immediate(period); MSS_TIM2_start(); while (MSS_TIM2_get_current_value() > 0) { if (MSS_TIM2_get_current_value() > (period - pulsewidth_right)) MSS_GPIO_set_output( MSS_GPIO_0, 1); else MSS_GPIO_set_output( MSS_GPIO_0, 0); if (MSS_TIM2_get_current_value() > (period - pulsewidth_left)) MSS_GPIO_set_output( MSS_GPIO_1, 1); else MSS_GPIO_set_output( MSS_GPIO_1, 0); } } return 0; }