We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
hello i am trying to make a simple program . i want to make edge interrupt with pin PF4 in the tive-c launchpad (cortex m4) and when i press that button the led blinks . thats all but i am facing problems i dont know whats wrong but the program is not working as expected
#include "C:\Keil\ARM\INC\TI\TM4C123\TM4C123GH6PM.h" void delayMs(int n); int main(void) { SYSCTL->RCGCGPIO |= 0x20; /* enable clock to PORTF */ /* PORTF0 has special function, need to unlock to modify */ GPIOF->LOCK = 0x4C4F434B; /* unlock commit register */ GPIOF->LOCK = 0; /* lock commit register */ /* configure PORTF for switch input and LED output */ GPIOF->DIR &= ~0x11; /* make PORTF4 input for switch */ GPIOF->DIR |= 0x0E; /* make PORTF3, 2, 1 output for LEDs */ GPIOF->DEN |= 0x1F; /* make PORTF4-0 digital pins */ GPIOF->PUR |= 0x11; /* enable pull up for PORTF4, 0 */ /* configure PORTF4, 0 for falling edge trigger interrupt */ GPIOF->IS &= ~0x11; /* make bit 4, 0 edge sensitive */ GPIOF->IBE &= ~0x11; /* trigger is controlled by IEV */ GPIOF->IEV &= ~0x11; /* falling edge trigger */ GPIOF->ICR |= 0x11; /* clear any prior interrupt */ GPIOF->IM |= 0x11; /* unmask interrupt */ /* enable interrupt in NVIC and set priority to 3 */ NVIC->IP[30] = 3 << 5; /* set interrupt priority to 3 */ NVIC->ISER[0] |= 0x40000000; /* enable IRQ30 (D30 of ISER[0]) */ __enable_irq(); /* global enable IRQs */ /* toggle the red LED (PF1) continuously */ while(1) { GPIOF->DATA |= 0x02; delayMs(500); GPIOF->DATA &= ~0x02; delayMs(500); } } /* SW1 is connected to PF4 pin, SW2 is connected to PF0. */ /* Both of them trigger PORTF interrupt */ void GPIOF_Handler(void) { int i; volatile int readback; /* toggle green LED (PF3) three times */ for (i = 0; i < 3; i++) { GPIOF->DATA |= 0x08; //delayMs(500); GPIOF->DATA &= ~0x08; //delayMs(500); } GPIOF->ICR |= 0x11; /* clear the interrupt flag before return */ readback = GPIOF->ICR; /* a read to force clearing of interrupt flag */ } /* delay n milliseconds (16 MHz CPU clock) */ void delayMs(int n) { int i, j; for(i = 0 ; i < n; i++) for(j = 0; j < 3180; j++) {} /* do nothing for 1 ms */ } /* This function is called by the startup assembly code to perform system specific initialization tasks. */ void SystemInit(void) { __disable_irq(); /* disable all IRQs */ /* Grant coprocessor access */ /* This is required since TM4C123G has a floating point coprocessor */ SCB->CPACR |= 0x00F00000; }
thanks in advance
>> NVIC->IP[30] = 3 << 5; /* set interrupt priority to 3 */ >. NVIC->ISER[0] |= 0x40000000; /* enable IRQ30 (D30 of ISER[0]) */
Change to:
NVIC->IP[7] = 3 << 21; /* set interrupt priority to 3 */ NVIC->ISER[0] |= 1 << 30; /* enable IRQ30 (D30 of ISER[0]) */
California State University of Los Angeles EE-3450