I have two incomming handshakes on Port Q pin 2 and 3.
These are currently still connected to pins on Port A by a couple of 0 ohm resistors. Before I remove them, I figured, I could use them to check my intterupt handler.
Unfortunately I get none of the interrupts through!
This is, what I have in my Setup():
void Setup(void)
{
uint32_t ui32User0, ui32User1;
uint8_t pui8MACArray[8];
struct ip_addr addr;
// SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000);
g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
MAP_SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ);
RecRunning=false;
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
//Enable using ports
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
//Output ports
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, 0xFF); //All Port A as output
GPIOPinTypeGPIOOutput(GPIO_PORTK_BASE, 0xFF); //All Port K as output
GPIOPinTypeGPIOOutput(GPIO_PORTM_BASE, 0xFF); //All Port M as output
......
//Input ports
GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, 0x3F); //Port E 0-5 as input
GPIOPinTypeGPIOInput(GPIO_PORTG_BASE, 0x03); //Port G 0-1 as input
GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, 0x0F); //Port H 0-3 as input (Actual bidir, but..)
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, 0x30); //Port N 4-5 as input
//Port Q, Handshake
//Set Pins 0 and 1 as output
GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_0); //CG DC
GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_1); //TR DC
//Set Pins 2 and 3 as input
GPIOPinTypeGPIOInput(GPIO_PORTQ_BASE, GPIO_PIN_2); //CG DF
GPIOPinTypeGPIOInput(GPIO_PORTQ_BASE, GPIO_PIN_3); //TR DF
GPIOIntRegisterPin(GPIO_PORTQ_BASE, GPIO_PIN_2, CGsetupISR);
GPIOIntTypeSet(GPIO_PORTQ_BASE, GPIO_PIN_2, GPIO_RISING_EDGE);
GPIOIntEnable(GPIO_PORTQ_BASE, GPIO_PIN_2);
GPIOIntRegisterPin(GPIO_PORTQ_BASE, GPIO_PIN_3, TRsetupISR);
GPIOIntTypeSet(GPIO_PORTQ_BASE, GPIO_PIN_3, GPIO_RISING_EDGE);
GPIOIntEnable(GPIO_PORTQ_BASE, GPIO_PIN_3);
//Timer 3A
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
TimerConfigure(TIMER3_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT);
TimerLoadSet(TIMER3_BASE, TIMER_A, 1200); //15 µs at 120 MHz
//Timer 4B
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER4);
TimerConfigure(TIMER4_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT);
TimerLoadSet(TIMER4_BASE, TIMER_A, 1200); //15 µs at 120 MHz
//Timer 5A
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER5);
TimerConfigure(TIMER5_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT);
TimerIntRegister(TIMER3_BASE, TIMER_A, Timer3AIntHandler);
TimerIntRegister(TIMER4_BASE, TIMER_A, Timer4AIntHandler);
TimerIntRegister(TIMER5_BASE, TIMER_A, Timer5AIntHandler);
IntMasterEnable();
TimerIntEnable(TIMER3_BASE, TIMER_TIMA_TIMEOUT);
IntEnable(INT_TIMER3A);
TimerIntEnable(TIMER4_BASE, TIMER_TIMA_TIMEOUT);
IntEnable(INT_TIMER4A);
TimerIntEnable(TIMER5_BASE, TIMER_TIMA_TIMEOUT);
IntEnable(INT_TIMER5A);
//LAN
Now, all three timers work, I do get interrups from them.
But so far nothing on the Q pins.
In my main loop I currently have a simple 1 sec. delay between outputting 0 and 0xFF to Port A, thus also toggling the state of Port Q pins 2 and 3.
I monitor pin 2 and show the state on one of the LEDS. Works fine. LED blinks at 0.5 Hz.
a=0;
while (1) {
GPIOPinWrite(GPIO_PORTA_BASE,0xFF,a);
a=a ^ 0xFF;
Indicator=GPIOPinRead(GPIO_PORTQ_BASE,GPIO_PIN_2);
if (Indicator==4)
GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_1, 2);
else
GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_1, 0);
ms_delay(1000);
}
(ms_delay is a timer based wait routine)
I know Port Q is a litle special in that the pins have individual interrupt vectors.
But what do I need to do? What am I missing?
