Fuera de lazo main, en la parte donde declaramos variables debemos poner el puntero de
nuestras interrupciones.
TIMERS
Para configurar nuestro vector de interrupcin usaremos una de las siguientes lneas de
comando, esto depende de nuestra aplicacin. (Esto en el lazo main)
PieVectTable.TIMER0_INT = &cpu_timer0_isr;
PieVectTable.TIMER1_INT = &cpu_timer1_isr;
PieVectTable.TIMER2_INT = &cpu_timer2_isr;
Luego de escoger nuestro vector de interrupciones iniciaremos el cputimer para iniciar los
perifricos.
InitCpuTimers();
ConfigCpuTimer(&CpuTimer1,60,200);//f=5Khz
CpuTimer0Regs.TCR.all = 0x4001;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
Nota: Solo existen la configuracin de PIE desde el canal1 hasta el 12 (revisar manual pg.
88)
Ejemplo practico
#include "F28x_Project.h"
#include "math.h"
void main(void)
{
// PASO1:iniciar el control del sistema
InitSysCtrl();
// Fin de configuracion
while(1){
}
}
//vector de interrupcion
__interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
GPIO_WritePin(12,1);
GPIO_WritePin(13,0);
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
AD
Para configurar nuestro vector de interrupcin usaremos una de las siguientes lneas de
comando, esto depende de nuestra aplicacin. (Esto en el lazo main)
PieVectTable.ADCA1_INT = &adca1_isr
PieVectTable.ADCB1_INT = &adcb1_isr
PieVectTable.ADCC1_INT = &adcc1_isr
PieVectTable.ADCD1_INT = &adcd1_isr
EALLOW;
//Escribir configuraciones
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //poner ADCCLK divider to/4 revisar
pg. (1215)
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
EDIS;
Uint16 acqps;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //seleccin del canal
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //sample window is acqps + 1
SYSCLK cycles
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 0; //trigger modo software
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //end of SOC1 will set INT1 flag
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
EDIS;
3. Para finalizar configuraremos el puntero de interrupcin
Ejemplo
#include "F28x_Project.h"
void main(void) {
InitSysCtrl();
EALLOW;
InitGpio();
GPIO_SetupPinMux(12, GPIO_MUX_CPU1, 0);
GPIO_SetupPinMux(13, GPIO_MUX_CPU1, 0);
GPIO_SetupPinOptions(12, GPIO_OUTPUT, GPIO_PUSHPULL);
GPIO_SetupPinOptions(13, GPIO_OUTPUT, GPIO_PUSHPULL);
EDIS;
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCA1_INT = &adca1_isr; //funcion para ADCA interrupt
1
EDIS;
//Configurar el ADCs y encenderlo
ConfigureADC();
while (1)
{
GPIO_WritePin(12,0);
GPIO_WritePin(13,1);
Delay(AdcaResult0);
GPIO_WritePin(12,1);
GPIO_WritePin(13,0);
Delay(AdcaResult0);
void ConfigureADC(void)
{
//Escribir configuraciones
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //poner ADCCLK divider to/4 revisar
pg. (1215)
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
EDIS;
}
void SetupADCSoftware(void)
{
Uint16 acqps;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //seleccin del canal
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //sample window is acqps + 1
SYSCLK cycles
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 0; //trigger modo software
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //end of SOC1 will set INT1 flag
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
EDIS;
}
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcaResult0 = AdcaResultRegs.ADCRESULT0;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
AdcaRegs.ADCSOCFRC1.all = 0x0003;
}