Ejemplo n.º 1
0
static void kbd_drv_rx(int irq, void *dev_id, struct pt_regs *regs)
{
  	int i;
	
        kbd_setregs(regs);
#ifndef CONFIG_SA1100_ITSY
	while (!ignore_kbd_irq  &&  (i=getcFromKBCTL()) != KBCTL_NODATA) {
	  if (i != KBCTL_AGAIN  &&  i != KK_NONE)
            handle_scancode((unsigned char) i, ((unsigned char)i & 0x80) ? 0 : 1);
	}
#endif
	// vsync_irq();
	reset_timer1( (TIMER1_RATE+30)/60 );
	mark_bh(KEYBOARD_BH);
}
Ejemplo n.º 2
0
// *************************************************************************************************
// Test RF reception
// *************************************************************************************************
void test_rf(void) 
{
  u16 time1, time2, packet1, packet2, div;
  s16 ref, delta;
  u8 i;
  s16 freqest;
  u8 freqest1;
  s16 freqest0;
  u8 continue_test = YES;
  
  // Config radio for RX
  rftest_init();

  // Set timeout in 1.5 seconds
  reset_timer1();
  set_timer1(32768*1.5);
  T1CCTL0 = 0x44;
  T1CTL   = 0x02;

  // Clear RF interrupts
  S1CON &= ~(BIT1 | BIT0);  // Clear MCU interrupt flag 
  RFIF &= ~BIT4;            // Clear "receive/transmit done" interrupt 
  RFIM |= BIT4;             // Enable "receive/transmit done" interrupt

  // Enable IRQ
  INT_ENABLE(INUM_RFTXRX, INT_ON);
  INT_ENABLE(INUM_RF, INT_ON);
  INT_ENABLE(INUM_T1, INT_ON);
  
  // Clear test result variable
  test_result = 0;
  
  // Continue to receive packets until timeout
  while ((rftest_count < RFTEST_PACKET_COUNT) && (!sTimer1.iflag))
  {
    // Start new RX if radio is IDLE
    if (MARCSTATE == 0x01) SRX();
  }
  SIDLE();
  
  // Analyze received packets
  if (sTimer1.iflag || rftest_count < RFTEST_PACKET_COUNT/2)
  {
    // Timeout - no or not enough packets received
    test_result = 0x8000;
    continue_test = NO;
  }
  else
  {
      // Store last and first packet
      for (i=0; i<RFTEST_PACKET_COUNT; i++)
      {
        if (rftest[i].valid) 
        {
          time1   = rftest[i].time;
          packet1 = rftest[i].packet_nb;
          break;
        }
      }
      for (i=RFTEST_PACKET_COUNT-1; i>0; i--)
      {
        if (rftest[i].valid) 
        {
          time2   = rftest[i].time;
          packet2 = rftest[i].packet_nb;
          break;
        }
      }
      
      // Calculate mean freqest
      freqest = 0;
      div = 0;
      for (i=0; i<RFTEST_PACKET_COUNT; i++)
      {
        if (rftest[i].valid) 
        {
            // Sign extend negative numbers
            if ((rftest[i].freqoffset & BIT7) == BIT7) 
            {
              freqest += (s16)(0xFF00 | rftest[i].freqoffset);
            }
            else
            {
              freqest += (s16)(rftest[i].freqoffset);
            }
            div++;
        }
      }
      
      // FREQEST range check
      freqest0 = freqest/(s16)div;
      if ((freqest0 < RFTEST_FREQEST_MIN) || (freqest0 > RFTEST_FREQEST_MAX)) 
      {
              test_result = 0x2000 | (u8)freqest0;
              continue_test = NO;
      }
      else
      { // FREQEST range ok
      
        // Calculate distance between 1 and 2
        // TX sends packet each 3276 ACLK ticks (= 1145 T1CLK ticks)
        ref = (packet2 - packet1)*3276;
        delta = time2 - time1;
  
        if ((ref - delta) < RFTEST_ACLK_DEVIATION_MAX)
        {
          // Store ACLK deviation in test result
          test_result = ((ref - delta)&0x0F) << 8; 
          
          // Store average FREQEST
          if (freqest < 0)
          {
            freqest1 = (u8)((freqest*(-1))/div);
            freqest1 = ~freqest1 + 1;
            test_result |= freqest1;
          }
          else
          {
            test_result |= (u8)(freqest/div);
          } 
        }
        else if ((delta - ref) < RFTEST_ACLK_DEVIATION_MAX)
        {
          // Store ACLK deviation in test result
          test_result = ((delta - ref)&0x0F) << 8; 
          
          // Store average FREQEST
          if (freqest < 0)
          {
            freqest1 = (u8)((freqest*(-1))/div);
            freqest1 = ~freqest1 + 1;
            test_result |= freqest1;
          }
          else
          {
            test_result |= (u8)(freqest/div);
          } 			
        }
        else
        {
          // Too high ACLK deviation
          test_result = 0x4000;
          continue_test = NO;
        }
      }
  }
  
  // 2nd test stage - use RF offset to catch another few packets
  if (continue_test == YES)
  {
    rftest_count = 0;
    
    // Clear RX variables
    for (i=0; i<RFTEST_PACKET_COUNT; i++)
    {
            rftest[i].valid      = 0;
            rftest[i].time 	     = 0;
            rftest[i].packet_nb  = 0;
            rftest[i].freqoffset = 0;
    }
    
    // Set frequency offset
    FSCTRL0 = freqest0;
    
    // Set timeout in 0.5 seconds
    reset_timer1();
    set_timer1(32768*0.5);
    
    // Try to receive just 1 packet
    while ((rftest_count < 1) && (!sTimer1.iflag))
    {
      // Start new RX if radio is IDLE
      if (MARCSTATE == 0x01) SRX();
    }
    SIDLE();
    
    // Analyze received packets frequency offset - should be close to 0
    if (rftest_count > 0)
    {
            if (!((rftest[0].freqoffset >= 0xFE) || (rftest[0].freqoffset <= 0x02)))
            {
                    test_result = 0x1000;
            }
    }
    else
    {
            test_result = 0x1000;
    }
  }

  // Disable IRQ
  INT_ENABLE(INUM_RFTXRX, INT_OFF);
  INT_ENABLE(INUM_RF, INT_OFF);
  INT_ENABLE(INUM_T1, INT_OFF);

  // Stop Timer1 
  T1CTL  = 0x00;
  T1CNTL = 0x55;
  reset_timer1();
}
Ejemplo n.º 3
0
Archivo: Axon.c Proyecto: abarbu/axon
int main(void)
{
  /****************INITIALIZATIONS*******************/
  //other stuff Im experimenting with for SoR
  uartInit();  // initialize the UART (serial port)
  uartSetBaudRate(0, 9600); // set UARTE speed, for Bluetooth
  uartSetBaudRate(1, 115200); // set UARTD speed, for USB connection, up to 500k, try 115200 if it
  uartSetBaudRate(2, 57600); // set UARTH speed
  uartSetBaudRate(3, 57600); // set UARTJ speed, for Blackfin
  //G=Ground, T=Tx (connect to external Rx), R=Rx (connect to external Tx)

  // initialize rprintf system and configure uart1 (USB) for rprintf
  rprintfInit(uart1SendByte);

  configure_ports(); // configure which ports are analog, digital, etc.

  LED_on();

  rprintf("\r\nSystem Warming Up");

  // initialize the timer system (comment out ones you don't want)
  init_timer0(TIMER_CLK_1024);
  init_timer1(TIMER_CLK_64);
  init_timer2(TIMER2_CLK_64);
  init_timer3(TIMER_CLK_64);
  init_timer4(TIMER_CLK_64);
  init_timer5(TIMER_CLK_1024);
  //timer5Init();

  a2dInit(); // initialize analog to digital converter (ADC)
  a2dSetPrescaler(ADC_PRESCALE_DIV32); // configure ADC scaling
  a2dSetReference(ADC_REFERENCE_AVCC); // configure ADC reference voltage

  int i = 0, j = 0;
  //let system stabelize for X time
  for(i=0;i<16;i++)
  {
    j=a2dConvert8bit(i);//read each ADC once to get it working accurately
    delay_cycles(5000); //keep LED on long enough to see Axon reseting
    rprintf(".");
  }

  LED_off();

  rprintf("Initialization Complete \r\n");

  reset_timer0();
  reset_timer1();
  reset_timer2();
  reset_timer3();
  reset_timer4();
  reset_timer5();

  while(1)
  {
    control();
    delay_cycles(100);
    //an optional small delay to prevent crazy oscillations
  }

  return 0;
}
Ejemplo n.º 4
0
void prvSetupHardware(){

	int i, j;

	//add 1.7s delay for potential power issues
	delay_cycles(65535);
	delay_cycles(65535);
	delay_cycles(65535);
	delay_cycles(65535);
	delay_cycles(65535);
	delay_cycles(65535);
	delay_cycles(65535);
	
	

	uartInit();  // initialize the UART (serial port)
    uartSetBaudRate(0, 38400); // set UARTE speed, for Bluetooth
    uartSetBaudRate(1, 115200); // set UARTD speed, for USB connection, up to 500k, try 115200 if it doesn't work
    uartSetBaudRate(2, 38400); // set UARTH speed
    uartSetBaudRate(3, 38400); // set UARTJ speed, for Blackfin
	//G=Ground, T=Tx (connect to external Rx), R=Rx (connect to external Tx)

	rprintfInit(uart1SendByte);// initialize rprintf system and configure uart1 (USB) for rprintf

	configure_ports(); // configure which ports are analog, digital, etc.

	LED_on();

	//rprintf("\r\nSystem Warmed Up");

	// initialize the timer system
 	init_timer0(TIMER_CLK_1024);
// 	init_timer1(TIMER_CLK_64); // Timer 1 is initialized by FreeRTOS
 	init_timer2(TIMER2_CLK_64);
 	init_timer3(TIMER_CLK_64);
 	init_timer4(TIMER_CLK_64);
 	init_timer5(TIMER_CLK_64);

	a2dInit(); // initialize analog to digital converter (ADC)
	a2dSetPrescaler(ADC_PRESCALE_DIV32); // configure ADC scaling
	a2dSetReference(ADC_REFERENCE_AVCC); // configure ADC reference voltage

	//let system stabelize for X time
	for(i=0;i<16;i++)
		{
		j=a2dConvert8bit(i);//read each ADC once to get it working accurately
		delay_cycles(5000); //keep LED on long enough to see Axon reseting
		rprintf(".");
		}

	LED_off();

	rprintf("Initialization Complete \r\n");

	//reset all timers to zero
	reset_timer0();
	reset_timer1();
	reset_timer2();
	reset_timer3();
	reset_timer4();
	reset_timer5();



	/********PWM Setup***********/
	prvPWMSetup();

}