예제 #1
0
int main (void) {
  int i;

  // Enable the Clock of the PIO
  AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);

  // Configure the PIO Lines corresponding to LED1..LED4 as Outputs
  AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_MASK);

  // Clear the LED's. On the Board we must apply a "1" to turn off LEDs
  AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_MASK);

  // Loop forever
  for (;;) {
    for (i = 0; i < NB_LED; i++) {
	  AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, led_mask[i]);
	  wait();
	  AT91F_PIO_SetOutput  (AT91C_BASE_PIOA, led_mask[i]);
	  wait();
    }
    for (i = (NB_LED - 1); i >= 0; i--) {
	  AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, led_mask[i]);
	  wait();
	  AT91F_PIO_SetOutput  (AT91C_BASE_PIOA, led_mask[i]);
	  wait();
    }
  }
}
예제 #2
0
파일: mezonin.c 프로젝트: fidomax/kium-mso
//------------------------------------------------------------------------------
// EnableChannel (Channel) активирует выбранный канал
// Входной параметр Channel - номер канала 1, 2, 3, 4.
//------------------------------------------------------------------------------
void Mez_EnableChannel(mezonin *MezStruct)
{
	switch (MezStruct->ActiveChannel) {
		case 1:
			AT91F_PIO_ClearOutput(MezStruct->LineA0.PIO_ctrl_ptr, MezStruct->LineA0.PIO_Line | MezStruct->LineA1.PIO_Line);
			//Конфигурация канала:   0      0
			//                       А1    А0
			break;

		case 2:
			AT91F_PIO_ClearOutput(MezStruct->LineA1.PIO_ctrl_ptr, MezStruct->LineA1.PIO_Line);
			AT91F_PIO_SetOutput(MezStruct->LineA0.PIO_ctrl_ptr, MezStruct->LineA0.PIO_Line);
			//Конфигурация канала:   0      1
			//                       А1    А0
			break;

		case 3:
			AT91F_PIO_ClearOutput(MezStruct->LineA0.PIO_ctrl_ptr, MezStruct->LineA0.PIO_Line);
			AT91F_PIO_SetOutput(MezStruct->LineA1.PIO_ctrl_ptr, MezStruct->LineA1.PIO_Line);
			//Конфигурация канала:   1      0
			//                       А1    А0
			break;

		case 4:
			AT91F_PIO_SetOutput(MezStruct->LineA0.PIO_ctrl_ptr, MezStruct->LineA0.PIO_Line | MezStruct->LineA1.PIO_Line);
			//Конфигурация канала:   1      1
			//                       А1     А0
			break;
	}
	vTaskDelay(2);

}
예제 #3
0
//*--------------------------------------------------------------------------------------
//* Function Name       : Main
//* Object              : Software entry point
//* Input Parameters    : none.
//* Output Parameters   : none.
//*--------------------------------------------------------------------------------------
int main() {
  int i;
  // First, enable the clock of the PIO
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
	// then, we configure the PIO Lines corresponding to LED1 to LED4
	// to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only.
	AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
	// Clear the LED's. On the EB55 we must apply a "1" to turn off LEDs
	AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;
	//* Init timer interrupt
	timer_init();
  // Loop forever
  for (;;) { // Once a Shot on each led
    for ( i=0 ; i < NB_LEB ; i++ ) {
      AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, led_mask[i]);
      wait();
      AT91F_PIO_SetOutput( AT91C_BASE_PIOA, led_mask[i] );
      wait();
    }
    // Once a Shot on each led
    for ( i = (NB_LEB - 1) ; i >= 0 ; i-- ) {
      AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, led_mask[i]);
      wait();
      AT91F_PIO_SetOutput( AT91C_BASE_PIOA, led_mask[i]);
      wait();
    }
  }
}
예제 #4
0
////////////////////////////////////////////////////////////////////////////////
// Odebranie ramki obrazu z kamery // po optymalizacji //
// podzielnik = 2 -> klatka 320 x 200
// podzielnik = 4 -> klatka 160 x 100
////////////////////////////////////////////////////////////////////////////////
void GetFrame(register char PodzielnikX, register char PodzielnikY,
		char transmit) {
	register unsigned int x = 0, y = 0, wsk = 0;
	register char x2 = 0, y2 = 0, CamClockEnable = 0;

	// 1-sza klatka do odrzutu
	CamClockEnable = 1;
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, DIODA2);
	while (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & VSYNC) {
		AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, MCLK);
		AT91F_PIO_SetOutput(AT91C_BASE_PIOA, MCLK);
	}

//	printf("-- Poza petla --\n\r");
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA, DIODA2);
	CamClockEnable = 1;
	wsk = 0;

	register int pclkJump;

	register int enter = 0;
	// 2-ga klatka dobra
	AT91C_BASE_PIOA->PIO_CODR = DIODA1;
	while (CamClockEnable) {
		for (pclkJump = 0; pclkJump < PodzielnikX; pclkJump++) {
			AT91C_BASE_PIOA->PIO_CODR = MCLK;
			AT91C_BASE_PIOA->PIO_SODR = MCLK;
			//      AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, MCLK );
			//      AT91F_PIO_SetOutput( AT91C_BASE_PIOA, MCLK );
		}

		// VSYNC = 1 (podczas aktywnej czesci klatki)
		if (AT91C_BASE_PIOA->PIO_PDSR & VSYNC) {
			//      AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, DIODA1 );
			// HSYNC = 1 (podczas aktywnej czesci linii)
			if (AT91C_BASE_PIOA->PIO_PDSR & HSYNC) {
				enter = 1;
				if (PodzielnikX < 8) {
					if (x < (640. / PodzielnikX) && y < (400. / PodzielnikY)) {
						//            printf(".");
						x++;
						mem[wsk] = (AT91C_BASE_PIOA->PIO_PDSR & (CAM_D2
								| CAM_D3 | CAM_D4 | CAM_D5 | CAM_D6 | CAM_D7))
								>> 14;
						if (AT91C_BASE_PIOA->PIO_PDSR & CAM_D0) {
							mem[wsk] += 1;
						}
						if (AT91C_BASE_PIOA->PIO_PDSR & CAM_D1) {
							mem[wsk] += 2;
						}
						wsk++;
					} else if (y >= 400 / PodzielnikY)
						CamClockEnable = 0;
					if (CamClockEnable == 1) {
						CamClockEnable = 2;
					}

				} else {
					if (x < 1280 && y < 800) {
예제 #5
0
// функция - обработчик прерывания от timer1
void timer1_c_irq_handler(void)
{
	AT91PS_TC TC_pt = AT91C_BASE_TC1;
    unsigned int dummy;
    //* определение состояния прерывания
    dummy = TC_pt->TC_SR;
    dummy = dummy; //чтобы не генерировалось замечание о неиспольз переменной

    //* действия при прерывании
    opros_kn1(); // опрос кнопки 1
    opros_kn2(); // опрос кнопки 2
    opros_kn3(); // опрос кнопки 3
    opros_kn4(); // опрос кнопки 4

     //смена состояния выхода генерации отриц напр для LCD
            if (U_NEG_old_state==OFF)
                     {
                     AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, U_NEG); // сброс U_NEG
                     U_NEG_old_state=ON;
                     }
            else
                     {
                     AT91F_PIO_SetOutput( AT91C_BASE_PIOA, U_NEG); // уст U_NEG
                     U_NEG_old_state=OFF;
                     }
}
예제 #6
0
파일: usb.c 프로젝트: ChrisX34/stuff
//*----------------------------------------------------------------------------
//* \fn    AT91F_USBDEV_Open
//* \brief
//*----------------------------------------------------------------------------
AT91PS_USBDEV AT91F_USBDEV_Open(AT91PS_USBDEV pUsbdev, AT91PS_UDP pUdp, unsigned char cdcHid)
{
    // Set the PLL USB Divider
    // writes to FFFFFC2C, divider should divide by 2
    AT91C_BASE_CKGR->CKGR_PLLR |= AT91C_CKGR_USBDIV_1 ;

    // Specific Chip USB Initialisation
    // Enables the 48MHz USB clock UDPCK and System Peripheral USB Clock
    AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP;
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_UDP);

    // Enable UDP PullUp on D+ line
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, USB_DP_PUP);
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, USB_DP_PUP);
#ifdef USB_DM_PUP
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, USB_DM_PUP);
    AT91F_PIO_SetOutput(AT91C_BASE_PIOA, USB_DM_PUP);
#endif
    pUsbdev->pUdp = pUdp;
    pUsbdev->cdcOrHid = cdcHid;   // 1: HID, 0: CDC/ACM
    pUsbdev->currentConfiguration = 0;
    pUsbdev->currentConnection    = 0;
    pUsbdev->currentRcvBank       = AT91C_UDP_RX_DATA_BK0;
    pUsbdev->IsConfigured = AT91F_UDP_IsConfigured;
    pUsbdev->Write        = AT91F_CDC_Write;
    pUsbdev->Read         = AT91F_CDC_Read;
    pUsbdev->SendReport   = AT91F_HID_SendReport;
    return pUsbdev;
}
예제 #7
0
void spi_low_set_ram_addr(int num)
{
  int set_mask = (num & 0x7) << SPI_RAM_A0_PIN;
  AT91F_PIO_SetOutput( AT91C_BASE_PIOA, set_mask );
  int clr_mask = ((num ^ 0x7) & 0x7) << SPI_RAM_A0_PIN;
  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, clr_mask );
}
static void GPIO_device_init_port(unsigned int port, unsigned int mode)
{
    unsigned int portMask = 0;
    switch(port) {
    case 0:
        portMask = GPIO_1;
        break;
    case 1:
        portMask = GPIO_2;
        break;
    case 2:
        portMask = GPIO_3;
        break;
    default:
        break;
    }

    if (mode == MODE_INPUT) {
        AT91F_PIO_CfgInput(AT91C_BASE_PIOA, portMask);
        AT91C_BASE_PIOA->PIO_PPUDR = portMask; //disable pullup
        AT91C_BASE_PIOA->PIO_IFER = portMask; //enable input filter
    } else {
        AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, portMask );
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, portMask );
    }
}
예제 #9
0
void turn_of_angle(double angle) {
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, 0x1 << 29);
	L3G4200D_Reset(&twid);

	PWM_Set(0, 15);
	waitms(1000);
	if (angle < 0) {
		TRACE_INFO("-- w lewo -- \r\n");
		Kierunek(RIGHT_ENGINES, FORWARD_GEAR);
		Kierunek(LEFT_ENGINES, REVERSE_GEAR);
	} else {
		TRACE_INFO("-- w prawo -- \r\n");
		Kierunek(RIGHT_ENGINES, REVERSE_GEAR);
		Kierunek(LEFT_ENGINES, FORWARD_GEAR);
	}

	while (ABS(angle) - ABS(L3G4200D_GetData().sAngle_z) > 0) {
		L3G4200D_ReadData(&twid);
	}

	L3G4200D_Reset(&twid);
	Kierunek(RIGHT_ENGINES, STOP_GEAR);
	Kierunek(LEFT_ENGINES, STOP_GEAR);

	AT91F_PIO_SetOutput(AT91C_BASE_PIOA, 0x1 << 29);
}
예제 #10
0
파일: poti.c 프로젝트: 12019/openpcd
void poti_reset(void)
{
	volatile int i;
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OPENPICC_PIO_nSLAVE_RESET);
	for (i = 0; i < 0xff; i++) { }
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA, OPENPICC_PIO_nSLAVE_RESET);
}
예제 #11
0
void nRFLL_CSN(unsigned char enable)
{
	if(enable)
		AT91F_PIO_SetOutput(AT91C_BASE_PIOA,CSN_PIN);
	else
		AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,CSN_PIN);
}
예제 #12
0
void nRFCMD_CE(unsigned char enable)
{
    if(enable)
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA,CE_PIN);
    else
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,CE_PIN);
}
예제 #13
0
파일: ultrasound.c 프로젝트: wercool/valter
void lowerDown(int force)
{
    setForce(force);
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, DIRD);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, DIRC);
    direction = 1;
}
예제 #14
0
void nRFLL_Init(void)
{
    AT91F_PIO_SetOutput  (AT91C_BASE_PIOA,CSN_PIN);
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,        CE_PIN|MOSI_PIN|SCK_PIN);    
    AT91F_PIO_CfgOutput  (AT91C_BASE_PIOA,CSN_PIN|CE_PIN|MOSI_PIN|SCK_PIN);
    AT91F_PIO_CfgInput   (AT91C_BASE_PIOA,MISO_PIN);
}
예제 #15
0
파일: ultrasound.c 프로젝트: wercool/valter
void liftUp(int force)
{
    setForce(force);
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, DIRC);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, DIRD);
    direction = -1;
}
예제 #16
0
파일: ultrasound.c 프로젝트: wercool/valter
void blinkingGreen(int delay)
{
    /*LED3 - GREEN*/
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3);
    Delay(delay);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
    Delay(delay);
}
예제 #17
0
static inline void
led_set(AT91PS_PIO pio, const u_int32_t led, const bool_t on)
{
	if (on)
		AT91F_PIO_ClearOutput(pio, led);
	else
		AT91F_PIO_SetOutput(pio, led);
}
예제 #18
0
////////////////////////////////////////////////////////////////////////////////
// Sterowanie kierunkiem obrotu silnikow
// silnik = 1 - silniki lewe, 2 - silniki prawe
// kierunek = 0 - stop, 1 - przod, 2 - tyl
////////////////////////////////////////////////////////////////////////////////
inline void Kierunek(int silnik, int kierunek) {
	if (silnik == 1) {
		switch (kierunek) {
		case 0:
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA7);
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA8);
			break;

		case 1:
			AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_PA7);
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA8);
			break;

		case 2:
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA7);
			AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_PA8);
			break;
		}
	}

	if (silnik == 2) {
		switch (kierunek) {
		case 0:
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA9);
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA10);
			break;

		case 1:
			AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_PA9);
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA10);
			break;

		case 2:
			AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, PIO_PA9);
			AT91F_PIO_SetOutput(AT91C_BASE_PIOA, PIO_PA10);
			break;
		}
	}
	switch (kierunek) {
	case 0:
		//      LcdClear();
		//      LcdPrint("STOP!");
		break;

	case 1:
		//      LcdClear();
		//      LcdPrint("Do przodu!");
		break;

	case 2:
		//      LcdClear();
		//      LcdPrint("Do tylu!");
		break;
	}
}
예제 #19
0
파일: ultrasound.c 프로젝트: wercool/valter
void startBlinking(int delay)
{
    /* START BLINKING LED */
    /*LED1 - RED*/
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1);
    Delay(delay);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1);
    Delay(delay);
    /*LED2 - YELLOW*/
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2);
    Delay(delay);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2);
    Delay(delay);
    /*LED3 - GREEN*/
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3);
    Delay(delay);
    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3);
    Delay(delay);
}
예제 #20
0
//инициализация основных узлов системы
void CPUinit()
  {
  //нициализация EFC (Flash-памяти)
  AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ; // 1 цикла на чтение, 3 цикла на запись
  //настройка тактовых частот
  //включение и задание времени запуска основного генератора
  AT91C_BASE_PMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN ));
  // ожидание стабилизации частоты основного генератора
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
  //задание  частоты PLL  96,109 МГц и такт частоты UDP 48,058 МГц
  AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1|(16 << 8) |
                               (AT91C_CKGR_MUL & (72 << 16)) |
                               (AT91C_CKGR_DIV & 14);
  //ожидание стабилизации PLL
  while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK) );
    // ожидание стабилизации задающей частоты от PLL
  while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
  //задание задающей частоты и частоты процессора PLL/2=48 МГц
  //регистр PMC_MCKR не должен програмироваться одной операцией записи
  AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
  // ожидание стабилизации задающей частоты
  while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
  AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
  // ожидание стабилизации задающей частоты
  while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
  // отключение сторожевого таймера
  AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
  // разрешение тактирования PIO
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
  // конфигурирование линий  PIO как выходов обслуживания светодиодов LED1,...LED4
  AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
  // установка выходов - гашение светодиодов
  AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;
  // конфигурирование линии  PIO как выхода генерации частоты отриц напряж для LCD
  AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, U_NEG ) ;
  // сброс выхода генерации частоты отриц напряж для LCD
  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, U_NEG ) ;
  // конфигурирование линий  PIO как выходов обслуживания ЖКИ
  AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LCD_MASK ) ;
  // сброс выходов обслуживания ЖКИ
  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LCD_MASK ) ;
  }
static inline void HaltBlinking(void)
{
    while(1)
    {
    	vTaskDelay (portTICK_RATE_MS * 500);
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_MASK );

        vTaskDelay (portTICK_RATE_MS * 500);
        AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK );
    }
}
예제 #22
0
파일: myprintf.c 프로젝트: Zurcan/UKZM_BPS
void US0_Send(int Count)
{
  
  pUS0->US_TPR = (unsigned int)&(US0_SendBuf[0]);
  pUS0->US_TCR = Count;
  
  AT91F_PIO_SetOutput( AT91C_BASE_PIOA, AT91C_PIO_PA1); //Led off

  while (pUS0->US_TCR != 0) {}; //wait end of transmission

  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,  AT91C_PIO_PA1); //Led on
}
예제 #23
0
파일: myprintf.c 프로젝트: Zurcan/UKZM_BPS
void DBGU_SendBuf(int Count)
{
  
  pDBGU->DBGU_TPR = (unsigned int)&(DBGU_Buf[0]);
  pDBGU->DBGU_TCR = Count;
  
  AT91F_PIO_SetOutput( AT91C_BASE_PIOA, AT91C_PIO_PA1); //Led off

  while (pDBGU->DBGU_TCR != 0) {}; //wait end of transmission

  AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,  AT91C_PIO_PA1); //Led on
}
예제 #24
0
파일: poti.c 프로젝트: 12019/openpcd
void poti_comp_carr(u_int8_t position)
{
	volatile int i;

	while (!(spi->SPI_SR & AT91C_SPI_TDRE)) { }
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OPENPICC_PIO_SS2_DT_THRESH);
	/* shift one left, since it is a seven-bit value written as 8 bit xfer */
	spi->SPI_TDR = position & 0x7f;
	while (!(spi->SPI_SR & AT91C_SPI_TDRE)) { }
	for (i = 0; i < 0xff; i++) { }
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA, OPENPICC_PIO_SS2_DT_THRESH);
}
예제 #25
0
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
{
	if( uxLED < ( portBASE_TYPE ) NB_LED )
	{
		if( xValue )
		{
			AT91F_PIO_SetOutput( AT91C_BASE_PIOB, ulLED_MASK[ uxLED ] );
		}
		else
		{
			AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, ulLED_MASK[ uxLED ]);
		}
	}
}
예제 #26
0
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
{
	if( uxLED < ( portBASE_TYPE ) NB_LED )
	{
		if( AT91F_PIO_GetInput( AT91C_BASE_PIOB ) & ulLED_MASK[ uxLED ] )
		{
			AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, ulLED_MASK[ uxLED ]);
		}
		else
		{
			AT91F_PIO_SetOutput( AT91C_BASE_PIOB, ulLED_MASK[ uxLED ] );					
		}
	}
}
예제 #27
0
unsigned char nRFLL_ReadWrite(unsigned char byte) 
{
    int bit;
    
    for(bit=0;bit<8;bit++)
    {
	if(byte & 0x80)
	    AT91F_PIO_SetOutput(AT91C_BASE_PIOA,MOSI_PIN);
	else
	    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,MOSI_PIN);
		
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA,SCK_PIN);

	byte<<=1;
	if(AT91F_PIO_GetInput(AT91C_BASE_PIOA)&MISO_PIN)
	    byte|=1;
		    
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,SCK_PIN);
    }	
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,MOSI_PIN);
	
    return byte;
}
예제 #28
0
파일: ParTest.c 프로젝트: wware/FreeRTOS
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
{
	if( uxLED < ( portBASE_TYPE ) NB_LED )
	{
		if( AT91F_PIO_GetInput( AT91C_BASE_PIOA ) & led_mask[ uxLED ] )
		{
			AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, led_mask[ uxLED ]);
		}
		else
		{
			AT91F_PIO_SetOutput( AT91C_BASE_PIOA, led_mask[ uxLED ] );					
		}
	}
}
void sendBeaconStat( portTickType diff) {
	/* send Stats */
	if( xTaskGetTickCount()-ob_int_mgmt.stat_time>1) {
		AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_GREEN );
	}
	if( xTaskGetTickCount()-ob_int_mgmt.stat_time>diff ) {
		ob_int_mgmt.stat_time = xTaskGetTickCount();
	    MemBlock *h = pullFreeBlock();

	    if(h!=NULL) {
	    	OBD2HW_Header* c2ob_h;
	    	char* bh=(char*)h->pValue;
			c2ob_h	=(OBD2HW_Header*)bh;

			c2ob_h->length = sizeof(StatusOpenbeacon_V1);
			c2ob_h->type   = STATUS_OPENBEACON_V1;

			StatusOpenbeacon_V1* sbv1 =(StatusOpenbeacon_V1*)(bh+sizeof(OBD2HW_Header));
			char i;

			// Statistik eintragen
			for(i=0; i<OPENBEACON_MACSIZE; i++) sbv1->NetID[i]=ob_int_mgmt.NetID[i];
			sbv1->TxChannel 		= ob_int_mgmt.TxChannel;
			sbv1->TxPowerLevel 		= ob_int_mgmt.TxPowerLevel;
			sbv1->TxRate			= ob_int_mgmt.TxRate;
			for(i=0; i<4; i++) {
				sbv1->rx_beacons[i]			= ob_int_mgmt.rx_beacons[i];
				sbv1->fail_rx_beacons[i]	= ob_int_mgmt.fail_rx_beacons[i];
				sbv1->tx_beacons[i]			= ob_int_mgmt.tx_beacons[i];
				sbv1->fail_tx_beacons[i]	= ob_int_mgmt.fail_tx_beacons[i];
			}

			vUSBSendPriPacket(h, sizeof(OBD2HW_Header)+c2ob_h->length );
			h=NULL;

			// reset stat
			for(i=0; i<4; i++) {
				ob_int_mgmt.rx_beacons[i] 		= 0;
				ob_int_mgmt.fail_rx_beacons[i]	= 0;
				ob_int_mgmt.tx_beacons[i]		= 0;
				ob_int_mgmt.fail_tx_beacons[i]	= 0;
			}

			AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_GREEN );
	    }
	}
}
예제 #30
0
unsigned char nRFCMD_Init(void)
{
    volatile int dummy;
    const int SCBR = ((int)(MCK / 8e6) + 1)&0xFF;
    
    nRFCMD_Macro=nRFCMD_MacroResult=NULL;

    vSemaphoreCreateBinary(xnRF_SemaphoreDMA);
    vSemaphoreCreateBinary(xnRF_SemaphoreACK);
    if(!(xnRF_SemaphoreDMA && xnRF_SemaphoreACK))
	return 1;

    xSemaphoreTake(xnRF_SemaphoreDMA,0);
    xSemaphoreTake(xnRF_SemaphoreACK,0);

    AT91F_SPI_CfgPMC();
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, NRF_SPI_PINS_PERIPHERAL_A, NRF_SPI_PINS_PERIPHERAL_B);
    AT91F_PIO_CfgInput(AT91C_BASE_PIOA, IRQ_PIN);
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, CE_PIN);
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, CE_PIN);  

    portENTER_CRITICAL();
    
    /* CPOL = 0, NCPHA = 1, CSAAT = 0, BITS = 0000, SCBR = <8MHz, 
     * DLYBS = 0, DLYBCT = 0 */
    AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_PS_FIXED;
    AT91F_SPI_CfgCs(AT91C_BASE_SPI, 0, AT91C_SPI_BITS_8|AT91C_SPI_NCPHA|(SCBR<<8));
    AT91F_SPI_Enable(AT91C_BASE_SPI);

    AT91F_AIC_ConfigureIt(AT91C_ID_SPI, 4, AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, nRFCMD_ISR_DMA );
    AT91C_BASE_SPI->SPI_IER = AT91C_SPI_ENDTX;

    /* Enable PIO interrupt for IRQ pin */
    AT91F_AIC_ConfigureIt(AT91C_ID_PIOA, 3, AT91C_AIC_SRCTYPE_HIGH_LEVEL, nRFCMD_ISR_ACK );    
    /* reset IRQ status */
    dummy = AT91C_BASE_PIOA->PIO_ISR;
    AT91C_BASE_PIOA->PIO_IER = IRQ_PIN;
    
    AT91C_BASE_AIC->AIC_IECR = (0x1 << AT91C_ID_SPI) | (0x1 << AT91C_ID_PIOA) ;
    
    portEXIT_CRITICAL();
    
    return 0;
}