This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Cannot trigger GPIO 15

Hi, My name is Ryan.

I have a question about triggering gpio 15.

I got a reference code from this forum and It works, definitely with gpio 0 the code i attached below.

But, I just want to trigger the gpio 15. it doesn't work now.

How to change this code for triggering gpio 15?

For example, do I have to change the event id or vectid so on... ? where do I have to check such as which data sheets?

Please check it out for me.

Thanks a lot.

-----------------------------------------------------------------------------------------------------------------

#include "ti/csl/csl_chip.h"
#include "ti/csl/csl_chipAux.h"
#include "ti/csl/src/intc/csl_intc.h"
#include "ti/csl/csl_gpio.h"
#include "ti/csl/csl_gpioAux.h"

#include <stdio.h>

CSL_IntcContext intcContext;
CSL_IntcEventHandlerRecord EventHandler[30];
CSL_IntcObj intcObj;
CSL_IntcHandle hTest;
CSL_IntcGlobalEnableState state;
CSL_IntcEventHandlerRecord EventRecord;
CSL_IntcParam vectId;

CSL_GpioHandle hGpio;


volatile int a = 0;

interrupt void intIsr()
{
a = 1;

return ;
}

void main(void)
{
//GpioInit(); //GPIO Initialization
int pinNum;
int bankNum;

/************************************************
*************** INTC Configuration *************
************************************************/

printf ("Debug: GEM-INTC Configuration...\n");

/* INTC module initialization */
intcContext.eventhandlerRecord = EventHandler;
intcContext.numEvtEntries = 10;
if (CSL_intcInit(&intcContext) != CSL_SOK)
{
printf("Error: GEM-INTC initialization failed\n");
return;
}

/* Enable NMIs */
if (CSL_intcGlobalNmiEnable() != CSL_SOK)
{
printf("Error: GEM-INTC global NMI enable failed\n");
return;
}

/* Enable global interrupts */
if (CSL_intcGlobalEnable(&state) != CSL_SOK)
{
printf ("Error: GEM-INTC global enable failed\n");
return;
}

/* Open the INTC Module for Vector ID: 4 and Event ID: 90 (GPIO_n in C6678)*/
vectId = CSL_INTC_VECTID_4;   // <=== do I have to change this for testing gpio 15 instead of gpio 0?
hTest = CSL_intcOpen (&intcObj, 90, &vectId , NULL); //  <=== do I have to change this event id(90) for testing gpio 15 instead of gpio 0?
if (hTest == NULL)
{
printf("Error: GEM-INTC Open failed\n");
return;
}

/* Register an call-back handler which is invoked when the event occurs. */
EventRecord.handler = &intIsr;
EventRecord.arg = 0;
if (CSL_intcPlugEventHandler(hTest,&EventRecord) != CSL_SOK)
{
printf("Error: GEM-INTC Plug event handler failed\n");
return;
}

/* Enabling the events. */
if (CSL_intcHwControl(hTest,CSL_INTC_CMD_EVTENABLE, NULL) != CSL_SOK)
{
printf("Error: GEM-INTC CSL_INTC_CMD_EVTENABLE command failed\n");
return;
}

printf ("Debug: GEM-INTC Configuration Completed\n");

// 1. Init Flag
a = 0;
printf("a = %d\n",a);

// 2. Trigger GPIO_0 in Core0
pinNum = 0;
bankNum = 0;

// Open the CSL GPIO Module 0
hGpio = CSL_GPIO_open (0);

// Set GPIO pin number 0 as an output pin
CSL_GPIO_setPinDirOutput (hGpio, pinNum);

// Set interrupt detection on GPIO pin 0 to rising edge
CSL_GPIO_setRisingEdgeDetect (hGpio, pinNum);

// Enable GPIO per bank interrupt for bank zero
CSL_GPIO_bankInterruptEnable (hGpio, bankNum);

// Toggle GPIO_0 pin to trigger GPIO interrupt
CSL_GPIO_clearOutputData (hGpio, pinNum); //GPIO_0=0
CSL_GPIO_setOutputData (hGpio, pinNum); //GPIO_0=1


// 3. Wait for entering into ISR
while(a!=1){}


printf("a = %d\n",a);
printf("GPIO interrupt occurs\n");

return 0;