Hi All!
I want to get GPIO interrupt by external triger.
I configure McASP clk output for 12.8kHz on the pin, and it is works well. I routed by the wire McAsp clk pin to GP2[15].
Falling edge on GP2[15] should generate interrupt. In the interrupt routine should toggle GP2[12]. So finally I should see periodic signal on the GP2[12]. I read manual and investigated example projects.
On the GP2[15] I see 12.8kHz signal by the scope, but on the GP2[12] I see nothing.
Please look to my code of initialization bellow:
static void ConfigureIntGPIO(void)
{
// Configure GPIO interrupts for ARM or DSP
// Register the ISR in the Interrupt Vector Table
IntRegister(C674X_MASK_INT4, GPIOIsr);
// Map the system interrupt to the DSP maskable interrupt
IntEventMap(C674X_MASK_INT4, SYS_INT_GPIO_B2INT);
// Enable DSP maskable interrupt
IntEnable(C674X_MASK_INT4);
}
static void GPIOIsr(void)
{
/* Disable the interrupts for pins of bank 2 in GPIO.*/
GPIOBankIntDisable(SOC_GPIO_0_REGS, 2);
unsigned int res;
res = GPIOPinRead(SOC_GPIO_0_REGS, 45);
if(res == GPIO_PIN_LOW)
GPIOPinWrite(SOC_GPIO_0_REGS, 45, GPIO_PIN_HIGH);
else
GPIOPinWrite(SOC_GPIO_0_REGS, 45, GPIO_PIN_LOW);
// Clear the system interrupt status in the DSPINTC
IntEventClear(SYS_INT_GPIO_B2INT);
/* Clears the Interrupt Status of GP2[15] in GPIO.*/
GPIOPinIntClear(SOC_GPIO_0_REGS, 48);
//GPIOBankIntEnable(SOC_GPIO_0_REGS, 2);
}
static void SetUpInt(void)
{
// Setup the ARM or DSP interrupt controller
// Initialize DSP interrupt controller
IntDSPINTCInit();
// Enable DSP interrupts globally
IntGlobalEnable();
}
void hardware_init(void)
{
/* The Local PSC number for GPIO is 3. GPIO belongs to PSC1 module.*/
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON,
PSC_MDCTL_NEXT_ENABLE);
/* Power up the McASP module */
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_MCASP0, PSC_POWERDOMAIN_ALWAYS_ON,
PSC_MDCTL_NEXT_ENABLE);
/* Pin Multiplexing of pin (GP2-10) 10 of GPIO Bank 2.*/
GPIOBank2Pin15PinMuxSetup();
GPIOBank2Pin12PinMuxSetup();
McASPPinMuxSetup();
McASPclk_start();
/* Sets the pin 48(GP2[15]) as input for receive interrupt from external ADC.*/
GPIODirModeSet(SOC_GPIO_0_REGS, 48, GPIO_DIR_INPUT);
/* Sets the pin 45(GP2[12]) as output for CLK of external ADC.*/
GPIODirModeSet(SOC_GPIO_0_REGS, 45, GPIO_DIR_OUTPUT);
GPIOPinWrite(SOC_GPIO_0_REGS, 45, GPIO_PIN_LOW);
/*
** Configure falling edge and falling edge triggers on pin 48 to generate
** an interrupt
*/
GPIOIntTypeSet(SOC_GPIO_0_REGS, 48, GPIO_INT_TYPE_FALLEDGE);
/* Enable interrupts for Bank 2.*/
GPIOBankIntEnable(SOC_GPIO_0_REGS, 2);
/* Configuring the AINTC to handle interrupts.*/
SetUpInt();
/* Configure GPIO interrupts */
ConfigureIntGPIO();
// spiInit();
// edmaInit();
}
hardware_init() called in the main.c