Пример #1
0
void attachInterrupt(uint32_t pin, void (*callback)(void), uint32_t mode)
{
	static int enabled = 0;
	
#ifdef USE_BoardToPin	
	if(pin > BoardToPin_MAX_COUNT) return;
	pin=BoardToPinInfo[pin].pin;
#else
  if(pin>GPIO_MAX_COUNT || GPIO_Desc[pin].P==NULL) return;
 #endif
  		
	if (!enabled) {
		__initialize();
		enabled = 1;
	}
	// Retrieve pin information
	GPIO_T *pio = GPIO_Desc[pin].P;
	uint32_t mask = GPIO_Desc[pin].bit;
	uint32_t pos = 0;
	uint32_t t;
	
	for (t = mask; t>1; t>>=1, pos++);
	// Set callback function
	
	if (pio == PA )
		callbacksGPA[pos] = callback;
	else if (pio == PB )
		callbacksGPB[pos] = callback;
	else if (pio == PC )
		callbacksGPC[pos] = callback;
	else if (pio == PD )
		callbacksGPD[pos] = callback;
	else if (pio == PE )
		callbacksGPE[pos] = callback;
	else if (pio == PF )
		callbacksGPF[pos] = callback;		
	// Enable interrupt
	if(mode==FALLING)
		GPIO_EnableInt(pio,pos,GPIO_INT_FALLING);
	else if(mode==RISING)		
		GPIO_EnableInt(pio,pos,GPIO_INT_RISING);	
	else if(mode==CHANGE)
		GPIO_EnableInt(pio,pos,GPIO_INT_BOTH_EDGE);		
}
Пример #2
0
void GPIO_Init(void)
{
    /* Debounce function control */
    GPIO->DBNCECON = GPIO_DBNCECON_ICLK_ON | GPIO_DBNCECON_DBCLKSRC_HCLK | GPIO_DBNCECON_DBCLKSEL_32768;
    P3->DBEN = GPIO_DBEN_ENABLE(2);

    /* Configure external interrupt */
    GPIO_EnableInt(P3, 2, GPIO_INT_BOTH_EDGE);
    NVIC_EnableIRQ(EINT0_IRQn);

}
Пример #3
0
void GPIO_Init(void)
{
    /* Enable debunce function of P3.2 (EINT0) */
    P3->DBEN = (1 << 2);

    /* Set debounce time. it is about 6.4 ms */
    GPIO->DBNCECON = GPIO_DBNCECON_DBCLKSRC_IRC10K | GPIO_DBNCECON_DBCLKSEL_64;

    /* Enable P3.2 to be EINT0 */
    GPIO_EnableInt(P3, 2, GPIO_INT_BOTH_EDGE);
    NVIC_EnableIRQ(EINT0_IRQn);
}
Пример #4
0
void RC_PWM_Enable(char enable)
{
	if(enable) {
#ifdef M451
		GPIO_EnableInt(PB, 4, GPIO_INT_BOTH_EDGE);
		GPIO_EnableInt(PB, 5, GPIO_INT_BOTH_EDGE);
		GPIO_EnableInt(PB, 3, GPIO_INT_BOTH_EDGE);
		GPIO_EnableInt(PB, 6, GPIO_INT_BOTH_EDGE);
		GPIO_EnableInt(PB, 1, GPIO_INT_BOTH_EDGE);
		GPIO_EnableInt(PB, 0, GPIO_INT_BOTH_EDGE);
		NVIC_EnableIRQ(GPB_IRQn);
#else
		DrvGPIO_EnableInt(IO_RC_D2, E_IO_BOTH_EDGE, E_MODE_EDGE);
		DrvGPIO_EnableInt(IO_RC_D4, E_IO_BOTH_EDGE, E_MODE_EDGE);
		DrvGPIO_EnableInt(IO_RC_D5, E_IO_BOTH_EDGE, E_MODE_EDGE);
		DrvGPIO_EnableInt(IO_RC_D6, E_IO_BOTH_EDGE, E_MODE_EDGE);
		DrvGPIO_EnableInt(IO_RC_D7, E_IO_BOTH_EDGE, E_MODE_EDGE);
		DrvGPIO_EnableInt(IO_RC_D8, E_IO_BOTH_EDGE, E_MODE_EDGE);
#endif
	}
	else {
#ifdef M451
#else
		DrvGPIO_DisableInt(IO_RC_D2);
		DrvGPIO_DisableInt(IO_RC_D4);
		DrvGPIO_DisableInt(IO_RC_D5);
		DrvGPIO_DisableInt(IO_RC_D6);
		DrvGPIO_DisableInt(IO_RC_D7);
		DrvGPIO_DisableInt(IO_RC_D8);
#endif
	}
}
Пример #5
0
void GPIO_Init(void)
{
    /*set P2.0 as output*/
    P2->PMD = GPIO_PMD_PMD0_OUTPUT;

    /* Enable debunce function of P3.2 (EINT0) */
    P3->DBEN = GPIO_DBEN_ENABLE(2);
    /* Set debounce time. it is about 6.4 ms */
    GPIO->DBNCECON = GPIO_DBNCECON_DBCLKSRC_IRC10K | GPIO_DBNCECON_DBCLKSEL_64;
    /*Initialize external interrupt*/
    GPIO_EnableInt(P3, 2, GPIO_INT_FALLING);
    NVIC_EnableIRQ(EINT0_IRQn);
}
Пример #6
0
/**
  * @brief  Main routine. 
  * @param  None.
  * @return None.
  */
int32_t main(void)                 
{
    SYS_UnlockReg();
    SYS->P5_MFP = (SYS->P5_MFP & 0x00FFFCFC) | 0x03;  /* P5.1 -> XTAL2, P5.0 -> XTAL1 */
    CLK->PWRCON = CLK_PWRCON_XTL12M | 4 | 8 ;

    SYS_Init();
  
    /* SPI test */   
    LCD_Init();   
    LCD_EnableBackLight();
    LCD_ClearScreen();
    LCD_Print(0, "Welcome! Nuvoton");
    LCD_Print(1, "This is LB board");
    LCD_Print(2, "Mini51");
    LCD_Print(3, "TEST"); 
  
    // backlight control pin P5.4
    GPIO_SetMode(P5,1<<4,GPIO_PMD_OUTPUT);
  
    /* INT button triggers P3.2 */
    GPIO_SetMode(P3,(1<<2),GPIO_PMD_OPEN_DRAIN);  
    GPIO_EnableInt(P3, 2, GPIO_INT_FALLING);
    NVIC_EnableIRQ(EINT0_IRQn);
  
    /* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
    GPIO_SET_DEBOUNCE_TIME(GPIO_DBNCECON_DBCLKSRC_HCLK,GPIO_DBNCECON_DBCLKSEL_16);  
    GPIO_ENABLE_DEBOUNCE(P3,1<<2);  

    /* Reset and stop TIMER0, TIMER1 counting first */
    TIMER1->TCSR = TIMER_TCSR_CRST_Msk;
  
    /* Enable TIMER0, TIMER1, NVIC */
    NVIC_EnableIRQ(TMR1_IRQn);
    
    /* To Configure TCMPR values based on Timer clock source and pre-scale value */
    TIMER_SET_PRESCALE_VALUE(TIMER1,0);
  
    
    /* Start TIMER1 counting and setting*/
    TIMER_Open(TIMER1,TIMER_PERIODIC_MODE,SystemCoreClock/1000); 
    
    TIMER_EnableInt(TIMER1);

    while(1) ;    // loop forever
    
}
Пример #7
0
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Init System, peripheral clock and multi-function I/O */
    SYS_Init();

    /* Lock protected registers */
    SYS_LockReg();

    /* Init UART0 for printf */
    UART0_Init();

    printf("\n\nCPU @ %d Hz\n", SystemCoreClock);
    printf("+-------------------------------------------------------+\n");
    printf("|    GPIO Power-Down and Wake-up by PB.3 Sample Code    |\n");
    printf("+-------------------------------------------------------+\n\n");

    /* Configure PB.3 as Input mode and enable interrupt by rising edge trigger */
    GPIO_SetMode(PB, BIT3, GPIO_MODE_INPUT);
    GPIO_EnableInt(PB, 3, GPIO_INT_RISING);
    NVIC_EnableIRQ(GPB_IRQn);

    /* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 clocks of LIRC clock */
    GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_1024);
    GPIO_ENABLE_DEBOUNCE(PB, BIT3);

    /* Unlock protected registers before entering Power-down mode */
    SYS_UnlockReg();

    /* Waiting for PB.3 rising-edge interrupt event */
    while(1)
    {
        printf("Enter to Power-Down ......\n");

        /* Enter to Power-down mode */
        PowerDownFunction();

        printf("System waken-up done.\n\n");
    }

}
Пример #8
0
void Sys_Sleep() {
	uint8_t i;
	const Sys_WakeupGPIO_t *gpio;

	SYS_UnlockReg();

	// In power down mode the only active clocks are LIRC and LXT.
	// All our pheriperials are clocked from HXT or PLL, so we
	// don't have to worry about stopping them.
	// Button debounce is clocked from LIRC so it will work.

	// Disable unwanted interrupts
	for(i = 0; i < 4; i++) {
		gpio = &Sys_wakeupGPIO[i];
		if(!(Sys_wakeupSource & gpio->wakeupMask)) {
			GPIO_DisableInt(gpio->port, gpio->pin);
		}
	}

	// Enable wakeup interrupt
	CLK->PWRCTL |= CLK_PWRCTL_PDWKIEN_Msk;
	NVIC_EnableIRQ(PWRWU_IRQn);
	// Sleep
	CLK_PowerDown();
	// Disable wakeup interrupt
	CLK->PWRCTL &= ~CLK_PWRCTL_PDWKIEN_Msk;
	NVIC_DisableIRQ(PWRWU_IRQn);

	// Re-enable previously disabled interrupts
	// All those interrupts are always enabled anyway,
	// so we just enable them all.
	for(i = 0; i < 4; i++) {
		gpio = &Sys_wakeupGPIO[i];
		GPIO_EnableInt(gpio->port, gpio->pin, GPIO_INT_BOTH_EDGE);
	}

	SYS_LockReg();
}
Пример #9
0
//=========================================================================
//----- (00005D24) --------------------------------------------------------
__myevic__ void DevicesOnOff( int off )
{
	if ( off )
	{
		TIMER_DisableInt( TIMER0 );
		TIMER_DisableInt( TIMER1 );
		TIMER_DisableInt( TIMER2 );

		if ( !gFlags.light_sleep )
		{
			TIMER_DisableInt( TIMER3 );
		}

		EADC_Close( EADC );
		SetADCState( 1, 0 );
		SetADCState( 2, 0 );
		SetADCState( 14, 0 );

		if ( ISVTCDUAL || ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
		{
			SetADCState( 3, 0 );
			SetADCState( 13, 0 );

			if ( ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
			{
				SetADCState( 15, 0 );
			}

			PD7 = 0;
			BBC_Configure( BBC_PWMCH_CHARGER, 0 );
			PD7 = 0;

			if ( ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 )
			{
				PF2 = 0;
			}
		}

		PC1 = 0;
		PC0 = 0;
		BBC_Configure( BBC_PWMCH_BUCK, 0 );
		if ( !ISVTCDUAL ) PC3 = 0;
		PC2 = 0;
		BBC_Configure( BBC_PWMCH_BOOST, 0 );

		if ( ISCUBO200 || ISRX200S || ISRX23 )
		{
			PF1 = 0;
		}
		else if ( ISRX300 )
		{
			PD1 = 0;
		}
		else
		{
			PB7 = 0;
		}

		GPIO_DisableInt( PD, 0 );
		PD0 = 0;
		GPIO_SetMode( PD, GPIO_PIN_PIN0_Msk, GPIO_MODE_OUTPUT );

		if ( ISRX300 )
		{
			PF5 = 0;
			PF6 = 0;
			PA3 = 0;
			PA2 = 0;
		}

		if ( ISVTCDUAL )
		{
			GPIO_DisableInt( PD, 1 );
			PD1 = 0;
			GPIO_SetMode( PD, GPIO_PIN_PIN1_Msk, GPIO_MODE_OUTPUT );
		}
		else if ( !ISCUBOID && !ISCUBO200 && !ISRX200S && !ISRX23 && !ISRX300 )
		{
			GPIO_DisableInt( PD, 7 );
			PD7 = 0;
			GPIO_SetMode( PD, GPIO_PIN_PIN7_Msk, GPIO_MODE_OUTPUT );
		}

		SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE11MFP_Msk|SYS_GPE_MFPH_PE12MFP_Msk|SYS_GPE_MFPH_PE13MFP_Msk);
		SYS->GPE_MFPH |= (SYS_GPE_MFPH_PE11MFP_GPIO|SYS_GPE_MFPH_PE12MFP_GPIO|SYS_GPE_MFPH_PE13MFP_GPIO);
		PE11 = 0;
		GPIO_SetMode( PE, GPIO_PIN_PIN11_Msk, GPIO_MODE_OUTPUT );
		PE12 = 0;
		GPIO_SetMode( PE, GPIO_PIN_PIN12_Msk, GPIO_MODE_OUTPUT );
		PE13 = 0;
		GPIO_SetMode( PE, GPIO_PIN_PIN13_Msk, GPIO_MODE_OUTPUT );
		PE10 = 0;

		GPIO_EnableInt( PE, 0, GPIO_INT_BOTH_EDGE );
		GPIO_EnableInt( PD, 2, GPIO_INT_BOTH_EDGE );
		GPIO_EnableInt( PD, 3, GPIO_INT_BOTH_EDGE );

		if ( ISVTCDUAL )
		{
			PA3 = 0;
			PC3 = 0;
			PF2 = 0;
			PA2 = 0;
		}
		else if ( ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
		{
			PF0 = 0;
		}

		SYS_UnlockReg();
		SYS->USBPHY &= ~SYS_USBPHY_LDO33EN_Msk;
		SYS->IVSCTL &= ~(SYS_IVSCTL_VBATUGEN_Msk|SYS_IVSCTL_VTEMPEN_Msk);
		SYS_DisableBOD();
		SYS->VREFCTL = 0;
		SYS_LockReg();

		USBD_CLR_INT_FLAG( USBD_INTSTS_WAKEUP|USBD_INTSTS_FLDET|USBD_INTSTS_BUS|USBD_INTSTS_USB );
		USBD_ENABLE_INT( USBD_INT_WAKEUP );
	}
	else
	{
		USBD_CLR_INT_FLAG( USBD_INTSTS_WAKEUP );

		SYS_UnlockReg();
		SYS->USBPHY |= SYS_USBPHY_LDO33EN_Msk;
		SYS->IVSCTL |= SYS_IVSCTL_VBATUGEN_Msk;
		if ( ISRX300 )
		{
			SYS->IVSCTL |= SYS_IVSCTL_VTEMPEN_Msk;
		}
		SYS->VREFCTL = SYS_VREFCTL_VREF_2_56V;
		SYS_EnableBOD( SYS_BODCTL_BOD_RST_EN, SYS_BODCTL_BODVL_2_2V );
		SYS_LockReg();

		GPIO_DisableInt( PE, 0 );
		GPIO_DisableInt( PD, 2 );
		GPIO_DisableInt( PD, 3 );

		if ( ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 )
		{
			PF2 = 1;
		}

		SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE11MFP_Msk|SYS_GPE_MFPH_PE12MFP_Msk|SYS_GPE_MFPH_PE13MFP_Msk);
		SYS->GPE_MFPH |= (SYS_GPE_MFPH_PE11MFP_SPI0_MOSI0|SYS_GPE_MFPH_PE12MFP_SPI0_SS|SYS_GPE_MFPH_PE13MFP_SPI0_CLK);

		GPIO_SetMode( PD, GPIO_PIN_PIN0_Msk, GPIO_MODE_INPUT );
		GPIO_EnableInt( PD, 0, GPIO_INT_FALLING );

		if ( ISVTCDUAL )
		{
			GPIO_SetMode( PD, GPIO_PIN_PIN1_Msk, GPIO_MODE_INPUT );
			GPIO_EnableInt( PD, 1, GPIO_INT_RISING );
			GPIO_ENABLE_DEBOUNCE( PD, GPIO_PIN_PIN1_Msk );
		}
		else if ( !ISCUBOID && !ISCUBO200 && !ISRX200S && !ISRX23 && !ISRX300 )
		{
			GPIO_SetMode( PD, GPIO_PIN_PIN7_Msk, GPIO_MODE_INPUT );
			GPIO_EnableInt( PD, 7, GPIO_INT_RISING );
			GPIO_ENABLE_DEBOUNCE( PD, GPIO_PIN_PIN7_Msk );
		}

		if ( ISCUBO200 || ISRX200S || ISRX23 )
		{
			PF1 = 1;
		}
		else if ( ISRX300 )
		{
			PD1 = 1;
		}
		else
		{
			PB7 = 1;
		}

		SetADCState( 1, 1 );
		SetADCState( 2, 1 );
		SetADCState( 14, 1 );

		if ( ISVTCDUAL || ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
		{
			SetADCState( 3, 1 );
			SetADCState( 13, 1 );

			if ( ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
			{
				SetADCState( 15, 1 );
			}
		}

		TIMER_EnableInt( TIMER0 );
		TIMER_EnableInt( TIMER1 );
		TIMER_EnableInt( TIMER2 );
		TIMER_EnableInt( TIMER3 );
	}
}
Пример #10
0
void key_init()
{

	KeyDev.DevDesc.DevDesc_leng = 26;						//Report descriptor
	KeyDev.DevDesc.RptDesc_leng = 22;						//Report descriptor
	KeyDev.DevDesc.InRptLeng = 3;								//Input report
	KeyDev.DevDesc.OutRptLeng = 0;							//Output report
	KeyDev.DevDesc.GetFeatLeng = 4;							//Get feature
	KeyDev.DevDesc.SetFeatLeng = 4;							//Set feature
	KeyDev.DevDesc.CID = 0;											//manufacturers ID
	KeyDev.DevDesc.DID = 0;											//Product ID
	KeyDev.DevDesc.PID = 0;											//Device firmware revision
	KeyDev.DevDesc.UID = 0;											//Device Class type
	KeyDev.DevDesc.UCID = 0;											//reserve
	/* Feature */
	KeyDev.Feature.data1.minimum = 0;						//Sleep period
	KeyDev.Feature.data1.maximum = 1024;
	KeyDev.Feature.data1.value = 100;
	KeyDev.Feature.arg[0] = 1;
	KeyDev.Feature.datalen[0] = 2;
	KeyDev.Feature.dataNum = 1;
	/* Input */
	KeyDev.Input.data1.minimum = 0;							//sensored disance
	KeyDev.Input.data1.maximum = 127;
	KeyDev.Input.data1.value = 0;
	KeyDev.Input.arg[0] = 1;
	KeyDev.Input.datalen[0] = 2;
	KeyDev.Input.dataNum = 1;
	/* Output */
	KeyDev.Output.dataNum = 0;
	
    /* Configure PC.0 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC0MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC0MFP_GPIO;
    GPIO_SetMode(PC, BIT0, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 0, GPIO_INT_BOTH_EDGE);
	
    /* Configure PC.1 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC1MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC1MFP_GPIO;
    GPIO_SetMode(PC, BIT1, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 1, GPIO_INT_BOTH_EDGE);

    /* Configure PC.2 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC2MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC2MFP_GPIO;
    GPIO_SetMode(PC, BIT2, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 2, GPIO_INT_BOTH_EDGE);
	
    /* Configure PC.3 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC3MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC3MFP_GPIO;
    GPIO_SetMode(PC, BIT3, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 3, GPIO_INT_BOTH_EDGE);

    /* Configure PC.4 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC4MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC4MFP_GPIO;
    GPIO_SetMode(PC, BIT4, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 4, GPIO_INT_BOTH_EDGE);

    /* Configure PC.5 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC5MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC5MFP_GPIO;
    GPIO_SetMode(PC, BIT5, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 5, GPIO_INT_BOTH_EDGE);
	
    /* Configure PC.6 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC6MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC6MFP_GPIO;
    GPIO_SetMode(PC, BIT6, GPIO_MODE_QUASI);
    GPIO_EnableInt(PC, 6, GPIO_INT_BOTH_EDGE);
    NVIC_EnableIRQ(GPC_IRQn);

    /* Configure PE.0 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
    /* Configure PC.3 as Input mode and enable interrupt by rising edge trigger */
	SYS->GPE_MFPL &= ~SYS_GPE_MFPL_PE0MFP_Msk;
	SYS->GPE_MFPL |= SYS_GPE_MFPL_PE0MFP_GPIO;
    GPIO_SetMode(PE, BIT0, GPIO_MODE_QUASI);
    GPIO_EnableInt(PE, 0, GPIO_INT_BOTH_EDGE);
    NVIC_EnableIRQ(GPE_IRQn);
	
	//LED
	SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA2MFP_Msk);
	SYS->GPA_MFPL |= SYS_GPA_MFPL_PA2MFP_GPIO;
	GPIO_SetMode(PA,BIT2,GPIO_MODE_OUTPUT);
	PA2 = 1;

    /* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 clocks of LIRC clock */
    GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_1024);
    GPIO_ENABLE_DEBOUNCE(PC, BIT0);	
    GPIO_ENABLE_DEBOUNCE(PC, BIT1);	
    GPIO_ENABLE_DEBOUNCE(PC, BIT2);	
    GPIO_ENABLE_DEBOUNCE(PC, BIT3);	
    GPIO_ENABLE_DEBOUNCE(PC, BIT4);	
    GPIO_ENABLE_DEBOUNCE(PC, BIT5);	
    GPIO_ENABLE_DEBOUNCE(PE, BIT0);
	
	keyState = 0;
	
}
Пример #11
0
int main(void)
{
    int32_t i32Err;

    sysDisableCache();
    sysFlushCache(I_D_CACHE);
    sysEnableCache(CACHE_WRITE_BACK);
    sysInitializeUART();

    sysprintf("+-------------------------------------------------+\n");
    sysprintf("|                 GPIO Sample Code                |\n");
    sysprintf("+-------------------------------------------------+\n\n");

    /* Configure Port C to input mode and pull-up */
    GPIO_Open(GPIOC, DIR_INPUT, PULL_UP);
   
    /* Set Port C output data to 0xFFF */
    GPIO_Set(GPIOC, 0xFFF);

    /* Set Port C output data to 0x000 */
    GPIO_Clr(GPIOC, 0xFFF);

    /* Configure Port C to default value */
    GPIO_Close(GPIOC);

    i32Err = 0;
    sysprintf("GPIO PD.3(output mode) connect to PD.4(input mode) ......");

    /* Configure PD3 to output mode */
    GPIO_OpenBit(GPIOD, BIT3, DIR_OUTPUT, NO_PULL_UP);

    /* Configure PD4 to output mode */
    GPIO_OpenBit(GPIOD, BIT4, DIR_INPUT, NO_PULL_UP);

    /* Use Pin Data Input/Output Control to pull specified I/O or get I/O pin status */
    /* Pull PD.3 to High and check PD.4 status */
    GPIO_SetBit(GPIOD, BIT3);

    if(GPIO_ReadBit(GPIOD,BIT4)==0)  
      i32Err = 1;

    /* Pull PD.3 to Low and check PD.4 status */
    GPIO_ClrBit(GPIOD, BIT3);

    if(GPIO_ReadBit(GPIOD,BIT4)==1)  
      i32Err = 1;

    if(i32Err)
    {
        sysprintf("  [FAIL].\n");
    }
    else
    {
        sysprintf("  [OK].\n");
    }

    /* Configure PD3 to default value */
    GPIO_CloseBit(GPIOD, BIT3);

    /* Configure PD4 to default value */
    GPIO_CloseBit(GPIOD, BIT3);

    /* Set MFP_GPF11 to EINT0 */
    outpw(REG_SYS_GPF_MFPH,(inpw(REG_SYS_GPF_MFPH) & ~(0xF<<12)) | (0xF<<12));

    /* Configure PF11 to input mode and pull-up */
    GPIO_OpenBit(GPIOF, BIT11, DIR_INPUT, PULL_UP);

    /* Confingure PF11 to rising-edge trigger */
    GPIO_EnableTriggerType(GPIOF, BIT11,RISING);

    /* Enable external 0 interrupt */
    GPIO_EnableEINT(NIRQ0, (GPIO_CALLBACK)EINT0Callback, 0);

    /* waiting for external 0 interrupt */
    sysprintf("waiting for PF11 rsing-edge trigger...");
    while(!eint_complete);

    /* Disable PF11 trigger type */
    GPIO_DisableTriggerType(GPIOF, BIT11);

    /* Enable external 0 interrupt */
    GPIO_DisableEINT(NIRQ0);

    sysprintf("  [OK].\n");

    /* Configure PF11 to default value */
    GPIO_CloseBit(GPIOF, BIT11);


    /* Configure PE3 to output mode */
    GPIO_OpenBit(GPIOE, BIT3, DIR_INPUT, NO_PULL_UP);

    /* Confingure PE3 to falling-edge trigger */
    GPIO_EnableTriggerType(GPIOE, BIT3,FALLING);

    /* Enable GPIOE interrupt */
    GPIO_EnableInt(GPIOE, (GPIO_CALLBACK)GPIOECallback, 0);

    /* waiting for external 0 interrupt */
    sysprintf("waiting for PE3 falling-edge trigger...");
    while(!gpio_complete);

    /* Disable PE3 to trigger type */
    GPIO_DisableTriggerType(GPIOE, BIT3);

    /* Disable GPIOE interrupt */
    GPIO_DisableInt(GPIOE);

    /* Configure PE0 to default value */
    GPIO_CloseBit(GPIOE, BIT3);

    sysprintf("  [OK].\n");

    while(1);
}
Пример #12
0
//=========================================================================
//----- (00002384) --------------------------------------------------------
__myevic__ void InitGPIO()
{
	if ( ISVTCDUAL )
	{
		PA3 = 0;
		GPIO_SetMode( PA, GPIO_PIN_PIN3_Msk, GPIO_MODE_OUTPUT );
	}

	if ( ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
	{
		SYS->GPF_MFPL &= ~SYS_GPF_MFPL_PF0MFP_Msk;
		SYS->GPF_MFPL |= SYS_GPF_MFPL_PF0MFP_GPIO;
		PF0 = 0;
		GPIO_SetMode( PF, GPIO_PIN_PIN0_Msk, GPIO_MODE_OUTPUT );
	}

	// PD1 = Data transmitter output pin for UART0
	#if (ENABLE_UART)
	SYS->GPD_MFPL |= SYS_GPD_MFPL_PD1MFP_UART0_TXD;
	#endif

	if ( ISRX300 )
	{
		SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk|SYS_GPD_MFPL_PD1MFP_Msk);
		SYS->GPD_MFPL |= SYS_GPD_MFPL_PD0MFP_GPIO|SYS_GPD_MFPL_PD1MFP_GPIO;
	}

	// PC0 = PWM0 CH0
	BBC_Configure( BBC_PWMCH_BUCK, 1 );
	// PC2 = PWM0 CH2
	BBC_Configure( BBC_PWMCH_BOOST, 1 );

	if ( ISVTCDUAL || ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 || ISRX300 )
	{
		PD7 = 0;
		BBC_Configure( BBC_PWMCH_CHARGER, 0 );
		PD7 = 0;
	}

	// BUTTONS
	GPIO_SetMode( PE, GPIO_PIN_PIN0_Msk, GPIO_MODE_INPUT );
	GPIO_SetMode( PD, GPIO_PIN_PIN2_Msk, GPIO_MODE_INPUT );
	GPIO_SetMode( PD, GPIO_PIN_PIN3_Msk, GPIO_MODE_INPUT );

	if ( ISCUBOID || ISCUBO200 || ISRX200S || ISRX23 )
	{
		PF2 = 1;
		GPIO_SetMode( PF, GPIO_PIN_PIN2_Msk, GPIO_MODE_OUTPUT );
	}
	else if ( ISRX300 )
	{
		SYS->GPF_MFPL &= ~(SYS_GPF_MFPL_PF5MFP_Msk|SYS_GPF_MFPL_PF6MFP_Msk);
		SYS->GPF_MFPL |= SYS_GPF_MFPL_PF5MFP_GPIO|SYS_GPF_MFPL_PF6MFP_GPIO;
		PF5 = 0;
		GPIO_SetMode( PF, GPIO_PIN_PIN5_Msk, GPIO_MODE_OUTPUT );
		PF6 = 0;
		GPIO_SetMode( PF, GPIO_PIN_PIN6_Msk, GPIO_MODE_OUTPUT );
		PA3 = 0;
		GPIO_SetMode( PA, GPIO_PIN_PIN3_Msk, GPIO_MODE_OUTPUT );
		PA2 = 0;
		GPIO_SetMode( PA, GPIO_PIN_PIN2_Msk, GPIO_MODE_OUTPUT );
	}

	// BUCK/BOOST CONVERTER CONTROL LINES
	PC1 = 0;
	GPIO_SetMode( PC, GPIO_PIN_PIN1_Msk, GPIO_MODE_OUTPUT );
	PC3 = 0;
	GPIO_SetMode( PC, GPIO_PIN_PIN3_Msk, GPIO_MODE_OUTPUT );

	// SSD RESET/VDD/VCC
	PA0 = 0;
	GPIO_SetMode( PA, GPIO_PIN_PIN0_Msk, GPIO_MODE_OUTPUT );
	PA1 = 0;
	GPIO_SetMode( PA, GPIO_PIN_PIN1_Msk, GPIO_MODE_OUTPUT );
	PC4 = 0;
	GPIO_SetMode( PC, GPIO_PIN_PIN4_Msk, GPIO_MODE_OUTPUT );

	// BATTERY
	GPIO_SetMode( PD, GPIO_PIN_PIN0_Msk, GPIO_MODE_INPUT );
	GPIO_EnableInt( PD, 0, GPIO_INT_FALLING );
	if ( ISVTCDUAL )
	{
		PA2 = 0;
		GPIO_SetMode( PA, GPIO_PIN_PIN2_Msk, GPIO_MODE_OUTPUT );
		PF2 = 0;
		GPIO_SetMode( PF, GPIO_PIN_PIN2_Msk, GPIO_MODE_OUTPUT );

		GPIO_SetMode( PD, GPIO_PIN_PIN1_Msk, GPIO_MODE_INPUT );
		GPIO_EnableInt( PD, 1, GPIO_INT_RISING );
		GPIO_ENABLE_DEBOUNCE( PD, GPIO_PIN_PIN1_Msk );
	}
	else if ( !ISCUBOID && !ISCUBO200 && !ISRX200S && !ISRX23 && !ISRX300 )
	{
		GPIO_SetMode( PD, GPIO_PIN_PIN7_Msk, GPIO_MODE_INPUT );
		GPIO_EnableInt( PD, 7, GPIO_INT_RISING );
		GPIO_ENABLE_DEBOUNCE( PD, GPIO_PIN_PIN7_Msk );
	}

	// SPI0 (Display control)
	PE10 = 0;
	GPIO_SetMode( PE, GPIO_PIN_PIN10_Msk, GPIO_MODE_OUTPUT );
	PE12 = 0;
	GPIO_SetMode( PE, GPIO_PIN_PIN12_Msk, GPIO_MODE_OUTPUT );

	// LED Control
	if ( ISEGRIPII || ISEVICAIO )
	{
		PB3 = 0;	// Blue
		PB4 = 0;	// Red
		PB5 = 0;	// Green
		GPIO_SetMode( PB, GPIO_PIN_PIN3_Msk|GPIO_PIN_PIN4_Msk|GPIO_PIN_PIN5_Msk, GPIO_MODE_OUTPUT );
	}

	if ( ISCUBO200 || ISRX200S || ISRX23 )
	{
		SYS->GPF_MFPL &= ~SYS_GPF_MFPL_PF1MFP_Msk;
		SYS->GPF_MFPL |= SYS_GPF_MFPL_PF1MFP_GPIO;
		PF1 = 1;
		GPIO_SetMode( PF, GPIO_PIN_PIN1_Msk, GPIO_MODE_OUTPUT );
	}
	else if ( ISRX300 )
	{
		SYS->GPD_MFPL &= ~SYS_GPD_MFPL_PD1MFP_Msk;
		SYS->GPD_MFPL |= SYS_GPD_MFPL_PD1MFP_GPIO;
		PD1 = 1;
		GPIO_SetMode( PD, GPIO_PIN_PIN1_Msk, GPIO_MODE_OUTPUT );
	}
	else
	{
		// ? (What is PB.7?)
		PB7 = 1;
		GPIO_SetMode( PB, GPIO_PIN_PIN7_Msk, GPIO_MODE_OUTPUT );
	}

	NVIC_EnableIRQ( GPD_IRQn );
	NVIC_EnableIRQ( GPE_IRQn );
	NVIC_EnableIRQ( GPF_IRQn );

	// Debounce time = 100ms
	GPIO_SET_DEBOUNCE_TIME( GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_1024 );
}