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.

CCS/TMS320VC5502: Any sample source code for External interrupt

Part Number: TMS320VC5502

Tool/software: Code Composer Studio

Hi,

I need to scan pulse via external interrupt(INT0,INT1,INT2).I undersatand IRQ concept.But I dont Know how to write for external interrupt.

Anybody help me

I already wrote Timer0 & timer1 and its working fine(below the following)

#include <stdio.h>
#include <csl.h>
#include <csl_pll.h>
#include <csl_chip.h>
#include <csl_irq.h>
#include <csl_gpt.h>
#include <csl_gpio5502.h>
#include <csl_gpio5502dat.h>
#include <csl_gpio5502hal.h>
#include <csl_uart.h>

#define STR_LEN 5

char myBuf[STR_LEN] = {" on "};
char myBuf1[STR_LEN] = {" oFF "};
char end[2] = {0x0a,0x0d};
int receive[1];
interrupt void Timer0Isr(void);
interrupt void Timer1Isr(void);
void GPT_start(GPT_Handle hGpt);
extern void VECSTART(void);
GPT_Handle hGpt;
GPT_Handle hGpt1;
GPIO_Handle hGpio;
Uint16 EventId0,EventId1;
long int Counter;
Uint16 i=0;
unsigned char x,status,status1;

void GPT_start(GPT_Handle hGpt);
void GPT_stop(GPT_Handle hGpt);
UART_Setup mySetup = {
30, /* input clock freq */
133, /* baud rate */
UART_WORD8, /* word length */
UART_STOP1, /* stop bits */
UART_DISABLE_PARITY, /* parity */
UART_FIFO_DISABLE, /*DISABLE */
UART_NO_LOOPBACK, /* Loop Back enable */
};
GPT_Config MyGptConfig = {
0, //Emulation management register
0, //GPIO interrupt control register
0, //GPIO enable register
0, //GPIO direction register
0, //GPIO data register
0x4A81, //Timer period register 1
0x055D, //Timer period register 2
0, //Timer period register 3
0, //Timer period register 4
GPT_GPTCTL1_RMK( //Timer control register 1
GPT_GPTCTL1_TIEN_NOT_GATED,
GPT_GPTCTL1_CLKSRC_VBUS,
GPT_GPTCTL1_ENAMODE_CONTINUOUS,
GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,
GPT_GPTCTL1_CP_CLOCK_MODE,
GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,
GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT
),
GPT_GPTCTL2_RMK( //Timer control register 2
GPT_GPTCTL2_TIEN_NOT_GATED,
GPT_GPTCTL2_CLKSRC_VBUS,
GPT_GPTCTL2_ENAMODE_CONTINUOUS,
GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,
GPT_GPTCTL2_CP_CLOCK_MODE,
GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,
GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT
),
GPT_GPTGCTL1_RMK( //Global timer control register
GPT_GPTGCTL11_TDDR34_DEFAULT,
GPT_GPTGCTL1_PSC34_DEFAULT,
GPT_GPTGCTL1_TIMMODE_DEFAULT,
GPT_GPTGCTL1_TIM34RS_IN_RESET,
GPT_GPTGCTL1_TIM12RS_IN_RESET
)
};
GPT_Config MyGptConfig1 = {
0, //Emulation management register
0, //GPIO interrupt control register
0, //GPIO enable register
0, //GPIO direction register
0, //GPIO data register
0xA541, //Timer period register 1
0x02AE, //Timer period register 2
0, //Timer period register 3
0, //Timer period register 4
GPT_GPTCTL1_RMK( //Timer control register 1
GPT_GPTCTL1_TIEN_NOT_GATED,
GPT_GPTCTL1_CLKSRC_VBUS,
GPT_GPTCTL1_ENAMODE_CONTINUOUS,
GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,
GPT_GPTCTL1_CP_CLOCK_MODE,
GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,
GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT
),
GPT_GPTCTL2_RMK( //Timer control register 2
GPT_GPTCTL2_TIEN_NOT_GATED,
GPT_GPTCTL2_CLKSRC_VBUS,
GPT_GPTCTL2_ENAMODE_CONTINUOUS,
GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,
GPT_GPTCTL2_CP_CLOCK_MODE,
GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,
GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT
),
GPT_GPTGCTL1_RMK( //Global timer control register
GPT_GPTGCTL11_TDDR34_DEFAULT,
GPT_GPTGCTL1_PSC34_DEFAULT,
GPT_GPTGCTL1_TIMMODE_DEFAULT,
GPT_GPTGCTL1_TIM34RS_IN_RESET,
GPT_GPTGCTL1_TIM12RS_IN_RESET
)
};
void Config_Timer(void)
{
IRQ_setVecs((Uint32)(&VECSTART));
IRQ_globalDisable();
hGpt = GPT_open(GPT_DEV0, GPT_OPEN_RESET);
EventId0 = GPT_getEventId(hGpt);
IRQ_clear(EventId0);
IRQ_plug(EventId0,&Timer0Isr);
GPT_config(hGpt, &MyGptConfig);
IRQ_enable(EventId0);
IRQ_globalEnable();
}

void Config_Timer1(void)
{
IRQ_setVecs((Uint32)(&VECSTART));
IRQ_globalDisable();
hGpt1 = GPT_open(GPT_DEV1, GPT_OPEN_RESET);
EventId1 = GPT_getEventId(hGpt1);
IRQ_clear(EventId1);
IRQ_plug(EventId1,&Timer1Isr);
GPT_config(hGpt1, &MyGptConfig1);
IRQ_enable(EventId1);
IRQ_globalEnable();
}
interrupt void Timer0Isr(void)
{
if(status == 1)
{
PGPIODAT0= PGPIODAT0 | 1;
status=2;
}
else if(status == 2)
{
PGPIODAT0= PGPIODAT0 & (~1);
status = 1;
}
}
interrupt void Timer1Isr(void)
{
if(status1 == 1)
{
PGPIODAT0= PGPIODAT0 | 2;
//GPIO_pinWrite(hGpio,GPIO_PGPIO_PIN0,1);
status1=2;
}
else if(status1 == 2)
{
PGPIODAT0= PGPIODAT0 & (~2);
// GPIO_pinWrite(hGpio,GPIO_PGPIO_PIN0,0);
status1 = 1;
}
}
void main(void)
{
int val;
CSL_init();
status=1;status1=1;
PLL_setFreq( 1, // PLL mode
0xF, // Multiply factor, Valid values are (multiply by)10
0, // Sysclk 0 Divide Down
1, // Sysclk1 Divider 150MHz
3, // Sysclk2 Divider 75MHz
3, // Sysclk3 Divider
0); // CLKOUT3(DSP core clock) divider 300MHz

UART_setup(&mySetup);
PGPIOEN0=0xFFFF;
PGPIODIR0=0xFFFE;
PGPIODAT0=0X0000;
Config_Timer();
GPT_start(hGpt);
Config_Timer1();
GPT_start(hGpt1);
for(;;)
{
//val=GPIO_pinRead(hGpio,GPIO_PGPIO_PIN0);
//if(val == 0)
// UART_write(myBuf,3,0);
/*if( PGPIODAT0 & 1 == 1)
UART_write(myBuf,3,0);
else if( PGPIODAT0 & (~1) == 0)
UART_write(myBuf1,4,0);*/
}
}

  • Hi Muneeswaran,

    I can not suggest you a completed solution about scanning pulse via external interrupt(INT0,INT1,INT2) but I'll try to give you some guidance about interrupt initialization and handling.
    Please refer to TMS320C55x DSP/BIOS 5.x Application Programming Interface (API) Reference Guide at:
    www.ti.com/.../spru404q.pdf
    and take a look at Example 12−1. about Manual Interrupt Setting Outside DSP/BIOS HWIs in MS320C55x Chip Support Library API Reference Guide at:
    www.ti.com/.../spru433j.pdf

    Regards,
    Tsvetolin Shulev
  • Hi Thanks Interrupt 1 is working fine.

    #include <stdio.h>
    #include <csl.h>
    #include <csl_pll.h>
    #include <csl_chip.h>
    #include <csl_irq.h>
    #include <csl_irqhal.h>
    #include <csl_irqdat.h>
    #include <csl_gpt.h>
    #include <csl_gpio5502.h>
    #include <csl_gpio5502dat.h>
    #include <csl_gpio5502hal.h>

    int receive[1];
    interrupt void Timer0Isr(void);
    interrupt void Timer1Isr(void);
    interrupt void Ext0Isr(void);
    void GPT_start(GPT_Handle hGpt);
    extern void VECSTART(void);
    GPT_Handle hGpt;
    GPT_Handle hGpt1;
    GPIO_Handle hGpio;
    Uint16 EventId0,EventId1;
    long int Counter;
    Uint16 i=0;
    unsigned char x,status,status1;

    void GPT_start(GPT_Handle hGpt);
    void GPT_stop(GPT_Handle hGpt);

    GPT_Config MyGptConfig = {
    0, //Emulation management register
    0, //GPIO interrupt control register
    0, //GPIO enable register
    0, //GPIO direction register
    0, //GPIO data register
    0x4A81, //Timer period register 1
    0x055D, //Timer period register 2
    0, //Timer period register 3
    0, //Timer period register 4
    GPT_GPTCTL1_RMK( //Timer control register 1
    GPT_GPTCTL1_TIEN_NOT_GATED,
    GPT_GPTCTL1_CLKSRC_VBUS,
    GPT_GPTCTL1_ENAMODE_CONTINUOUS,
    GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,
    GPT_GPTCTL1_CP_CLOCK_MODE,
    GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,
    GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT
    ),
    GPT_GPTCTL2_RMK( //Timer control register 2
    GPT_GPTCTL2_TIEN_NOT_GATED,
    GPT_GPTCTL2_CLKSRC_VBUS,
    GPT_GPTCTL2_ENAMODE_CONTINUOUS,
    GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,
    GPT_GPTCTL2_CP_CLOCK_MODE,
    GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,
    GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT
    ),
    GPT_GPTGCTL1_RMK( //Global timer control register
    GPT_GPTGCTL11_TDDR34_DEFAULT,
    GPT_GPTGCTL1_PSC34_DEFAULT,
    GPT_GPTGCTL1_TIMMODE_DEFAULT,
    GPT_GPTGCTL1_TIM34RS_IN_RESET,
    GPT_GPTGCTL1_TIM12RS_IN_RESET
    )
    };
    GPT_Config MyGptConfig1 = {
    0, //Emulation management register
    0, //GPIO interrupt control register
    0, //GPIO enable register
    0, //GPIO direction register
    0, //GPIO data register
    0xA541, //Timer period register 1
    0x02AE, //Timer period register 2
    0, //Timer period register 3
    0, //Timer period register 4
    GPT_GPTCTL1_RMK( //Timer control register 1
    GPT_GPTCTL1_TIEN_NOT_GATED,
    GPT_GPTCTL1_CLKSRC_VBUS,
    GPT_GPTCTL1_ENAMODE_CONTINUOUS,
    GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,
    GPT_GPTCTL1_CP_CLOCK_MODE,
    GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,
    GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT
    ),
    GPT_GPTCTL2_RMK( //Timer control register 2
    GPT_GPTCTL2_TIEN_NOT_GATED,
    GPT_GPTCTL2_CLKSRC_VBUS,
    GPT_GPTCTL2_ENAMODE_CONTINUOUS,
    GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,
    GPT_GPTCTL2_CP_CLOCK_MODE,
    GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,
    GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT
    ),
    GPT_GPTGCTL1_RMK( //Global timer control register
    GPT_GPTGCTL11_TDDR34_DEFAULT,
    GPT_GPTGCTL1_PSC34_DEFAULT,
    GPT_GPTGCTL1_TIMMODE_DEFAULT,
    GPT_GPTGCTL1_TIM34RS_IN_RESET,
    GPT_GPTGCTL1_TIM12RS_IN_RESET
    )
    };
    void Config_Timer(void)
    {
    /*IRQ_setVecs((Uint32)(&VECSTART));
    IRQ_globalDisable();
    hGpt = GPT_open(GPT_DEV0, GPT_OPEN_RESET);
    EventId0 = GPT_getEventId(hGpt);
    IRQ_clear(EventId0);
    IRQ_plug(EventId0,&Timer0Isr);
    GPT_config(hGpt, &MyGptConfig);
    IRQ_enable(EventId0);
    IRQ_globalEnable();*/
    IRQ_setVecs((Uint32)(&VECSTART));
    IRQ_globalDisable();
    hGpt = GPT_open(GPT_DEV0, GPT_OPEN_RESET);
    //EventId0 = GPT_getEventId(hGpt);
    IRQ_clear(IRQ_EVT_TINT0);
    IRQ_plug(IRQ_EVT_TINT0,&Timer0Isr);
    GPT_config(hGpt, &MyGptConfig);
    IRQ_enable(IRQ_EVT_TINT0);
    IRQ_globalEnable();
    }
    void Config_Ext(void)
    {
    IRQ_setVecs((Uint32)(&VECSTART));
    IRQ_globalDisable();


    IRQ_clear(IRQ_EVT_INT1);
    IRQ_plug(IRQ_EVT_INT1,&Ext0Isr);

    IRQ_enable(IRQ_EVT_INT1);
    IRQ_globalEnable();
    }

    void Config_Timer1(void)
    {
    IRQ_setVecs((Uint32)(&VECSTART));
    IRQ_globalDisable();
    hGpt1 = GPT_open(GPT_DEV1, GPT_OPEN_RESET);
    EventId1 = GPT_getEventId(hGpt1);
    IRQ_clear(EventId1);
    IRQ_plug(EventId1,&Timer1Isr);
    GPT_config(hGpt1, &MyGptConfig1);
    IRQ_enable(EventId1);
    IRQ_globalEnable();
    }
    interrupt void Ext0Isr(void)
    {
    if(status1 == 1)
    {
    PGPIODAT0= PGPIODAT0 | 2;
    status1=2;
    }
    else if(status1 == 2)
    {
    PGPIODAT0= PGPIODAT0 & (~2);
    status1 = 1;
    }
    }
    interrupt void Timer0Isr(void)
    {
    if(status == 1)
    {
    PGPIODAT0= PGPIODAT0 | 1;
    status=2;
    }
    else if(status == 2)
    {
    PGPIODAT0= PGPIODAT0 & (~1);
    status = 1;
    }
    }
    interrupt void Timer1Isr(void)
    {

    }
    void delay()
    {
    for(i=0;i<10000;i++);
    }
    void main(void)
    {
    CSL_init();
    status=1;status1=1;
    PLL_setFreq( 1, // PLL mode
    0xF, // Multiply factor, Valid values are (multiply by)10
    0, // Sysclk 0 Divide Down
    3, // Sysclk1 Divider 150MHz
    1, // Sysclk2 Divider 75MHz
    3, // Sysclk3 Divider
    0); // CLKOUT3(DSP core clock) divider 300MHz
    PGPIOEN0=0xFFFF;
    PGPIODIR0=0xFFFF;
    PGPIODAT0=0X0000;
    Config_Ext();
    Config_Timer();
    GPT_start(hGpt);

    //Config_Timer1();
    // GPT_start(hGpt1);
    for(;;)
    {

    //delay();
    }
    }