Example #1
0
void actuators_init ( void ) {
  /* select clock pin as MAT0.1 output */
  IO0DIR |= _BV(SERVO_CLOCK_PIN);
  SERVO_CLOCK_PINSEL |= SERVO_CLOCK_PINSEL_VAL << SERVO_CLOCK_PINSEL_BIT;

  /* select reset pin as GPIO output */
  IO1DIR |= _BV(SERVO_RESET_PIN);
  PINSEL2 &= ~(_BV(3)); /* P1.25-16 are used as GPIO */
  /* assert RESET */
  IO1SET = _BV(SERVO_RESET_PIN);

  /* DATA pin output */
  IO1DIR |= _BV(SERVO_DATA_PIN);

  /* enable match 1 interrupt */
  T0MCR |= TMCR_MR1_I;

  /* lower clock         */
  T0EMR &= ~TEMR_EM1;
  /* set high on match 1 */
  T0EMR |= TEMR_EMC1_2;

  /* set first pulse in a while */
  T0MR1 = START_TIMEOUT;
  servos_4015_idx = _4015_NB_CHANNELS;
  /* Set all servos at their midpoints */
  /* compulsory for unaffected servos  */
  uint8_t i;
  for( i=0 ; i < _4015_NB_CHANNELS ; i++ )
    servos_values[i] = SERVOS_TICS_OF_USEC(1500);
}
Example #2
0
void servos_4017_init ( void ) 
{
    uint8_t i;

    /* select clock pin as MAT0.0 output */
    SERVO_CLOCK_IODIR  |= _BV(SERVO_CLOCK_PIN);
    SERVO_CLOCK_PINSEL |= SERVO_CLOCK_PINSEL_VAL << SERVO_CLOCK_PINSEL_BIT;

    /* select reset pin as GPIO output */
    SERVO_RESET_IODIR  |= _BV(SERVO_RESET_PIN);

    /* assert RESET */
    SetBit(SERVO_RESET_IOSET, SERVO_RESET_PIN);

    /* enable match 0 interrupt */
    T0MCR |= TMCR_MR0_I;

    /* assert clock */
    T0EMR |= TEMR_EM0;	
    /* set low on match 0 */
    T0EMR |= TEMR_EMC0_1;

    /* set first pulse in a while */
    T0MR0 = START_TIMEOUT;
    servos_4017_idx = SERVOS_4017_NB_CHANNELS;

    /* Set all servos at their midpoints */
    /* compulsory for unaffected servos */
    for( i=0 ; i < SERVOS_4017_NB_CHANNELS ; i++ )
        servos_4017_values[i] = SERVOS_TICS_OF_USEC(1500);

}
Example #3
0
void actuators_init ( void ) {
  /* select clock pin as MAT0.1 output */
  IO0DIR |= _BV(SERVO_CLOCK_PIN);
  SERVO_CLOCK_PINSEL |= SERVO_CLOCK_PINSEL_VAL << SERVO_CLOCK_PINSEL_BIT;

  /* select reset pin as GPIO output */
  IO1DIR |= _BV(SERVO_RESET_PIN);
  PINSEL2 &= ~(_BV(3)); /* P1.25-16 are used as GPIO */
  //  SERVO_RESET_PINSEL |= SERVO_RESET_PINSEL_VAL << SERVO_RESET_PINSEL_BIT;
  /* assert RESET */
  IO1SET = _BV(SERVO_RESET_PIN);

  /* enable match 1 interrupt */
  T0MCR |= TMCR_MR1_I;

#ifndef SERVOS_4017_CLOCK_FALLING
  /* lower clock         */
  T0EMR &= ~TEMR_EM1;
  /* set high on match 1 */
  T0EMR |= TEMR_EMC1_2;
#else
  /* assert clock       */
  T0EMR |= TEMR_EM1;
  /* set low on match 1 */
  T0EMR |= TEMR_EMC1_1;
#endif
  /* set first pulse in a while */
  T0MR1 = START_TIMEOUT;
  servos_4017_idx = _4017_NB_CHANNELS;
  /* Set all servos at their midpoints */
  /* compulsory for unaffected servos  */
  uint8_t i;
  for( i=0 ; i < _4017_NB_CHANNELS ; i++ )
    servos_values[i] = SERVOS_TICS_OF_USEC(1500);
#ifdef SERVO_MOTOR
  servos_values[SERVO_MOTOR] = SERVOS_TICS_OF_USEC(SERVO_MOTOR_NEUTRAL);
#endif
#ifdef SERVO_MOTOR_LEFT
  servos_values[SERVO_MOTOR_LEFT] = SERVOS_TICS_OF_USEC(SERVO_MOTOR_LEFT_NEUTRAL);
#endif
#ifdef SERVO_MOTOR_RIGHT
  servos_values[SERVO_MOTOR_RIGHT] = SERVOS_TICS_OF_USEC(SERVO_MOTOR_RIGHT_NEUTRAL);
#endif
#ifdef SERVO_HATCH
  servos_values[SERVO_HATCH] = SERVOS_TICS_OF_USEC(SERVO_HATCH_NEUTRAL);
#endif
}
Example #4
0
void actuators_init ( void ) {
  /* PWM selected as IRQ */
  VICIntSelect &= ~VIC_BIT(VIC_PWM);
  /* PWM interrupt enabled */
  VICIntEnable = VIC_BIT(VIC_PWM);
  VICVectCntl3 = VIC_ENABLE | VIC_PWM;
  /* address of the ISR */
  VICVectAddr3 = (uint32_t)PWM_ISR;
  /* set clock, data and reset pins as output */
  IO0DIR |= _BV(SERV0_CLOCK_PIN);
  IO1DIR |= _BV(SERV0_DATA_PIN) | _BV(SERV0_RESET_PIN);
  IO0DIR |= _BV(SERV1_CLOCK_PIN);
  IO1DIR |= _BV(SERV1_DATA_PIN) | _BV(SERV1_RESET_PIN);
  /* Configure the two servo clocks as PWM  */
  SERV0_CLOCK_PINSEL |= SERV0_CLOCK_PINSEL_VAL << SERV0_CLOCK_PINSEL_BIT;
  SERV1_CLOCK_PINSEL |= SERV1_CLOCK_PINSEL_VAL << SERV1_CLOCK_PINSEL_BIT;

  /* set first pulse to be very long */
  PWMMR0 = 0XFFFFFF;
  PWMMR_SERV1 = 0XFFF;
  PWMMR_SERV0 = 0X0;
  /* commit above changes            */
  PWMLER = PWMLER_LATCH0 | PWMLER_LATCH_SERV0 | PWMLER_LATCH_SERV1;
  /* enable interrupt on serv1 PWM match    */
  PWMMCR = PWMMCR_MR0R | PWMMCR_MRI_SERV1;
  /* enable PWM ouptputs            */
  PWMPCR = PWMPCR_ENA_SERV0 | PWMPCR_ENA_SERV1;

  /* Prescaler */
  PWMPR = PWM_PRESCALER-1;

  /* enable PWM timer counter and PWM mode  */
  PWMTCR = PWMTCR_COUNTER_ENABLE | PWMTCR_PWM_ENABLE;
  /* Load failsafe values              */
  /* Set all servos at their midpoints */
  /* compulsory for unaffected servos  */
  uint8_t i;
  for( i=0 ; i < _4015_NB_CHANNELS ; i++ )
    servos_values[i] = SERVOS_TICS_OF_USEC(1500);
#ifdef SERVO_GAZ
  servos_values[SERVO_GAZ] = SERVOS_TICS_OF_USEC(SERVO_GAZ_NEUTRAL);
#endif
}
void actuators_init ( void ) {
  /* PWM selected as IRQ */
  VICIntSelect &= ~VIC_BIT(VIC_PWM);   
  /* PWM interrupt enabled */
  VICIntEnable = VIC_BIT(VIC_PWM);  
  VICVectCntl3 = VIC_ENABLE | VIC_PWM;
  /* address of the ISR */
  VICVectAddr3 = (uint32_t)PWM_ISR;
  /* PW5 pin (P0.21) used for PWM  */
  IO0DIR |= _BV(SERV1_CLOCK_PIN);
  IO1DIR |= _BV(SERV1_DATA_PIN) | _BV(SERV1_RESET_PIN);
  SERV1_CLOCK_PINSEL |= SERV1_CLOCK_PINSEL_VAL << SERV1_CLOCK_PINSEL_BIT;

  /* set match5 to go of a long time from now */
  PWMMR0 = 0XFFFFFF;  
  PWMMR_SERV1 = 0XFFF;  
  /* commit above change        */
  PWMLER = PWMLER_LATCH0 | PWMLER_LATCH_SERV1;
  /* interrupt on PWMMR5 match  */
  PWMMCR = PWMMCR_MR0R | PWMMCR_MRI_SERV1;
  /* enable PWM5 ouptput        */
  PWMPCR = PWMPCR_ENA_SERV1;

  /* Prescaler */
  PWMPR = PWM_PRESCALER-1;

  /* enable PWM timer counter and PWM mode  */
  PWMTCR = PWMTCR_COUNTER_ENABLE | PWMTCR_PWM_ENABLE; 
  /* Load failsafe values              */
   /* Set all servos at their midpoints */
  /* compulsory for unaffected servos  */
  uint8_t i;
  for( i=0 ; i < _4015_NB_CHANNELS ; i++ )
    servos_values[i] = SERVOS_TICS_OF_USEC(1500);
#ifdef SERVO_GAZ
  servos_values[SERVO_GAZ] = SERVOS_TICS_OF_USEC(SERVO_GAZ_NEUTRAL);
#endif
}