System Details:
-
OS - Microsoft Windows 7 Professional Version 6.1.7601 Service Pack 1 Build 7601
-
Processor - Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz, 3401 Mhz, 4 Core(s), 8 Logical Processor(s)
-
BIOS Version/Date - Dell Inc. A13, 3/27/2013
CCS Details:
- Version: 6.1.1.00022
- TivaWare_C_Series-2.1.0.12573
- Launchpad: EK-TM4C1294XL
Hello all,
I am attempting to generate individual interrupts on PortP using the discrete interrupt characteristics of the PortP pins. However, I am struggling to get them to work. Here is the code I have for the peripheral initializations.
Note* ALL_BUTTONS is defined as (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)
#define GPIO_PORTP_INT_ALL (INT_GPIOP0 | INT_GPIOP1 | INT_GPIOP2 | INT_GPIOP3 | INT_GPIOP4 | INT_GPIOP5) void periph_init(void) { // should we enable all, or only the ones used? SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ); SysCtlDelay(10); // delay for peripheral to enable SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOQ); SysCtlDelay(10); // GPIODirModeSet(GPIO_PORTQ_BASE, GPIO_PIN_2, GPIO_DIR_MODE_OUT); // SysCtlDelay(10); // GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_2, GPIO_PIN_2); // GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); /********************************************** * Init GPIO inputs *RESET_WAKE = PP5 *START_PAUSE = PP4 *WHT_UP = PP0 *WHT_DN = PP1 *RED_UP = PP3 *RED_DN = PP2 * Configure inputs with weak pull-up resistors (changed within GPIOPinTypeGPIOInput() ) *********************************************/ GPIOPinTypeGPIOInput(GPIO_PORTP_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)); SysCtlDelay(10); // delay for peripheral to enable // // Initialize the debounced button state with the current state read from // the GPIO bank. // //g_ui8ButtonStates = GPIOPinRead(BUTTONS_GPIO_BASE, ALL_BUTTONS); // // Set up to interrupt on low level for all PortP buttons // //IntPrioritySet(GPIO_PORTP_INT_ALL, 0xE0); //Set to lowest priority GPIOIntTypeSet(GPIO_PORTP_BASE, ALL_BUTTONS , (GPIO_LOW_LEVEL | GPIO_DISCRETE_INT)); // Trigger on LOW level GPIOIntEnable(GPIO_PORTP_BASE, ALL_BUTTONS); // Enable the ints //IntEnable(GPIO_PORTP_INT_ALL);
And this the vector table
#pragma DATA_SECTION(g_pfnVectors, ".intvecs") void (* const g_pfnVectors[])(void) = { (void (*)(void))((uint32_t)&__STACK_TOP), // The initial stack pointer ResetISR, // The reset handler NmiSR, // The NMI handler FaultISR, // The hard fault handler IntDefaultHandler, // The MPU fault handler IntDefaultHandler, // The bus fault handler IntDefaultHandler, // The usage fault handler 0, // Reserved 0, // Reserved 0, // Reserved 0, // Reserved IntDefaultHandler, // SVCall handler IntDefaultHandler, // Debug monitor handler 0, // Reserved IntDefaultHandler, // The PendSV handler SysTickIntHandler, // The SysTick handler IntDefaultHandler, // GPIO Port A IntDefaultHandler, // GPIO Port B IntDefaultHandler, // GPIO Port C IntDefaultHandler, // GPIO Port D IntDefaultHandler, // GPIO Port E UARTintHandler, // UART0 Rx and Tx IntDefaultHandler, // UART1 Rx and Tx IntDefaultHandler, // SSI0 Rx and Tx IntDefaultHandler, // I2C0 Master and Slave IntDefaultHandler, // PWM Fault IntDefaultHandler, // PWM Generator 0 IntDefaultHandler, // PWM Generator 1 IntDefaultHandler, // PWM Generator 2 IntDefaultHandler, // Quadrature Encoder 0 IntDefaultHandler, // ADC Sequence 0 IntDefaultHandler, // ADC Sequence 1 IntDefaultHandler, // ADC Sequence 2 IntDefaultHandler, // ADC Sequence 3 WatchdogIntHandler, // Watchdog timer IntDefaultHandler, // Timer 0 subtimer A IntDefaultHandler, // Timer 0 subtimer B Timer1IntHandler, // Timer 1 subtimer A IntDefaultHandler, // Timer 1 subtimer B Timer2IntHandler, // Timer 2 subtimer A IntDefaultHandler, // Timer 2 subtimer B IntDefaultHandler, // Analog Comparator 0 IntDefaultHandler, // Analog Comparator 1 IntDefaultHandler, // Analog Comparator 2 IntDefaultHandler, // System Control (PLL, OSC, BO) IntDefaultHandler, // FLASH Control IntDefaultHandler, // GPIO Port F IntDefaultHandler, // GPIO Port G IntDefaultHandler, // GPIO Port H IntDefaultHandler, // UART2 Rx and Tx IntDefaultHandler, // SSI1 Rx and Tx IntDefaultHandler, // Timer 3 subtimer A IntDefaultHandler, // Timer 3 subtimer B IntDefaultHandler, // I2C1 Master and Slave IntDefaultHandler, // CAN0 IntDefaultHandler, // CAN1 lwIPEthernetIntHandler, // Ethernet IntDefaultHandler, // Hibernate IntDefaultHandler, // USB0 IntDefaultHandler, // PWM Generator 3 IntDefaultHandler, // uDMA Software Transfer IntDefaultHandler, // uDMA Error IntDefaultHandler, // ADC1 Sequence 0 IntDefaultHandler, // ADC1 Sequence 1 IntDefaultHandler, // ADC1 Sequence 2 IntDefaultHandler, // ADC1 Sequence 3 IntDefaultHandler, // External Bus Interface 0 IntDefaultHandler, // GPIO Port J IntDefaultHandler, // GPIO Port K IntDefaultHandler, // GPIO Port L IntDefaultHandler, // SSI2 Rx and Tx IntDefaultHandler, // SSI3 Rx and Tx IntDefaultHandler, // UART3 Rx and Tx IntDefaultHandler, // UART4 Rx and Tx IntDefaultHandler, // UART5 Rx and Tx IntDefaultHandler, // UART6 Rx and Tx IntDefaultHandler, // UART7 Rx and Tx IntDefaultHandler, // I2C2 Master and Slave IntDefaultHandler, // I2C3 Master and Slave IntDefaultHandler, // Timer 4 subtimer A IntDefaultHandler, // Timer 4 subtimer B IntDefaultHandler, // Timer 5 subtimer A IntDefaultHandler, // Timer 5 subtimer B IntDefaultHandler, // FPU 0, // Reserved 0, // Reserved IntDefaultHandler, // I2C4 Master and Slave IntDefaultHandler, // I2C5 Master and Slave IntDefaultHandler, // GPIO Port M IntDefaultHandler, // GPIO Port N 0, // Reserved IntDefaultHandler, // Tamper Int_P0_Handler, // GPIO Port P (Summary or P0) Int_P1_Handler, // GPIO Port P1 Int_P2_Handler, // GPIO Port P2 Int_P3_Handler, // GPIO Port P3 Int_P4_Handler, // GPIO Port P4 Int_P5_Handler, // GPIO Port P5 IntDefaultHandler, // GPIO Port P6 IntDefaultHandler, // GPIO Port P7 IntDefaultHandler, // GPIO Port Q (Summary or Q0) IntDefaultHandler, // GPIO Port Q1 IntDefaultHandler, // GPIO Port Q2 IntDefaultHandler, // GPIO Port Q3 IntDefaultHandler, // GPIO Port Q4 IntDefaultHandler, // GPIO Port Q5 IntDefaultHandler, // GPIO Port Q6 IntDefaultHandler, // GPIO Port Q7 IntDefaultHandler, // GPIO Port R IntDefaultHandler, // GPIO Port S IntDefaultHandler, // SHA/MD5 0 IntDefaultHandler, // AES 0 IntDefaultHandler, // DES3DES 0 IntDefaultHandler, // LCD Controller 0 IntDefaultHandler, // Timer 6 subtimer A IntDefaultHandler, // Timer 6 subtimer B IntDefaultHandler, // Timer 7 subtimer A IntDefaultHandler, // Timer 7 subtimer B IntDefaultHandler, // I2C6 Master and Slave IntDefaultHandler, // I2C7 Master and Slave IntDefaultHandler, // HIM Scan Matrix Keyboard 0 IntDefaultHandler, // One Wire 0 IntDefaultHandler, // HIM PS/2 0 IntDefaultHandler, // HIM LED Sequencer 0 IntDefaultHandler, // HIM Consumer IR 0 IntDefaultHandler, // I2C8 Master and Slave IntDefaultHandler, // I2C9 Master and Slave IntDefaultHandler, // GPIO Port T IntDefaultHandler, // Fan 1 0, // Reserved };
And here is the actual function for handling the interrupts:
//***************************************************************************** // // The following functions are simple interrupt handlers for each individual // button. They each then call the proces_buttons() function with the // appropriate argument. // //***************************************************************************** void Int_P0_Handler(void) { GPIOIntClear(GPIO_PORTP_BASE, INT_GPIOP0); // Seconf argument might be GPIO_INT_PIN_0 // White_up button pressed process_button(B_WHT_UP); } void Int_P1_Handler(void) { // White_down button pressed process_button(B_WHT_DN); } void Int_P2_Handler(void) { // Red_down button pressed process_button(B_RED_UP); } void Int_P3_Handler(void) { // Red_up button pressed process_button(B_RED_DN); } void Int_P4_Handler(void) { // Start/Pause button pressed process_button(B_START_PAUSE); } void Int_P5_Handler(void) { // Wake/Reset button pressed process_button(B_RESET_WAKE); }
I have the hardware connected correctly. I just cant seem to get the interrupt handler function to enter. Any help is greatly appreciated!!
Thank you