Exemplo n.º 1
0
void PPM_ISR() {
   	static unsigned int state = PPM_NB_CHANNEL;
   	static unsigned int last;

    unsigned int now = T0CR2;
    unsigned int length = now - last;
    last = now;

    watchdog_set_time(WATCHDOG_CHANNEL_PPM);

    if (state == PPM_NB_CHANNEL) {
      	if (length > SYS_TICS_OF_USEC(PPM_SYNC_MIN_LEN) && length < SYS_TICS_OF_USEC(PPM_SYNC_MAX_LEN)) {
			state = 0;
      	}
      	else{
  			ppm_valid = 0;
      	}
    }
    else {
      	if (length > SYS_TICS_OF_USEC(PPM_DATA_MIN_LEN) && length < SYS_TICS_OF_USEC(PPM_DATA_MAX_LEN)) {
      		ppm_pulses[state] = (int)length;
			state++;
			if (state == PPM_NB_CHANNEL) {
	  			ppm_valid = 1;
			}
    	}
      	else{
			state = PPM_NB_CHANNEL;
  			ppm_valid = 0;
      	}
    }
}
Exemplo n.º 2
0
void ppm_init(void){
	/* select pin for capture */
	PINSEL0 |= 2 << 12;
	/* enable capture 0.2 on falling edge + trigger interrupt */
	T0CCR = TCCR_CR2_F | TCCR_CR2_I;
	int i;
	for(i=0;i<PPM_NB_CHANNEL;i++){
		ppm_pulses[i]=SYS_TICS_OF_USEC(1500);
	}
	ppm_valid = 0;
}
Exemplo n.º 3
0
#include "csc_servos.h"

#include "LPC21xx.h"
#include "std.h"
#include "sys_time.h"
#include "firmwares/rotorcraft/actuators.h"
#include "airframe.h"
#include ACTUATORS

#define CSC_SERVOS_NB 4

static uint32_t csc_servos_rng[] = {SYS_TICS_OF_USEC(SERVO_S1_MAX-SERVO_S1_MIN),
                    SYS_TICS_OF_USEC(SERVO_S2_MAX-SERVO_S2_MIN),
                    SYS_TICS_OF_USEC(SERVO_S3_MAX-SERVO_S3_MIN),
                    SYS_TICS_OF_USEC(SERVO_S4_MAX-SERVO_S4_MIN)};
static uint32_t csc_servos_min[] = {SYS_TICS_OF_USEC(SERVO_S1_MIN),
                    SYS_TICS_OF_USEC(SERVO_S2_MIN),
                    SYS_TICS_OF_USEC(SERVO_S3_MIN),
                    SYS_TICS_OF_USEC(SERVO_S4_MIN)};


void csc_servos_init(void)
{
  actuators_init();
}

/* val == 0 literally mean off, otherwise, val 1-255 are continuous angle */
void csc_servo_normalized_set(uint8_t id, uint16_t val)
{
  if(id > 3) return;
  if(val == 0) csc_servo_set(id,0);
Exemplo n.º 4
0
void sys_time_usleep(uint32_t us) {
  uint32_t start = T0TC;
  uint32_t ticks = SYS_TICS_OF_USEC(us);
  while ((uint32_t)(T0TC-start) < ticks);
}