#define GPIO_LOCK_KEY 0x4C4F434B #define RED_LED GPIO_PIN_1 #define BLUE_LED GPIO_PIN_2 #define GREEN_LED GPIO_PIN_3 Static int i = 8; void Int_GPIO_F_Handler(void) { unsigned long status; status=GPIOIntStatus(GPIO_PORTF_BASE,true); GPIOIntClear(GPIO_PORTF_BASE, status); if((status&GPIO_PIN_4)) { SysCtlDelay(10*(SysCtlClockGet()/3000)); while (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4) == 0x00); SysCtlDelay(10*(SysCtlClockGet()/3000)); TimerEnable(TIMER0_BASE,TIMER_A); } } void Timer0IntHandler(void) { TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT); if(i==8) {i=2;} else {i=i*2;} } int main(void) { SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01; HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0; SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); TimerConfigure(TIMER0_BASE,TIMER_CFG_PERIODIC); TimerLoadSet(TIMER0_BASE,TIMER_A,100000000); IntEnable(INT_TIMER0A); TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0xff); GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_LOW_LEVEL); GPIOIntEnable(GPIO_PORTF_BASE, GPIO_PIN_4); IntEnable(INT_GPIOF); IntMasterEnable(); GPIOPinWrite(GPIO_PORTF_BASE,RED_LED|BLUE_LED|GREEN_LED, RED_LED); GPIOIntRegister(GPIO_PORTF_BASE,Int_GPIO_F_Handler); while(1){ GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, i); } }
|