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);*/
}
}