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