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?