dsPIC33 Problema de interrupción externa simple

1

Esto será ridículamente fácil para alguien que ha trabajado con el compilador dsPIC33 y XC16, pero ya me ha costado un día. ¡Espero que alguien me pueda ahorrar más tiempo perdido!

¿Podría alguien decirme por favor lo que he hecho mal aquí? Todo lo que estoy tratando de hacer es apagar algunos LED's usando una interrupción externa.

/* Device header files */
#include <stdlib.h>
#include <xc.h>

int main(int argc, char** argv) {

// setup internal clock for 80MHz/40MIPS
// 7.37/2=3.685*43=158.455/2=79.2275
CLKDIVbits.PLLPRE=0;        // PLLPRE (N2) 0=/2
PLLFBD=41;                  // pll multiplier (M) = +2
CLKDIVbits.PLLPOST=0;       // PLLPOST (N1) 0=/2

ANSELE = 0x0000; //set all of port B as Digital
TRISE=0xF0;//configures part of port B as output
LATE=0x0F; // writes data to port B

RPINR0= 0x5400;//set pin 1 as interrupt 1
INTCON2 = 0x0000;   /*Setup INT0, INT1, INT2, interupt on falling edge*/
IFS1bits.INT1IF = 0;    /*Reset INT1 interrupt flag */
IEC1bits.INT1IE = 1;    /*Enable INT1 Interrupt Service Routine */
IPC5bits.INT1IP = 4;    /*set low priority*/

//Main Program
while (1);
return (EXIT_SUCCESS);
}

//_INT1Interrupt() is the INT1 interrupt service routine (ISR).
void __attribute__((__interrupt__)) _INT1Interrupt(void);
void __attribute__((__interrupt__, auto_psv)) _INT1Interrupt(void)
{
   LATE=0x00; // writes data to port B
   IFS1bits.INT1IF = 0;    //Clear the INT1 interrupt flag or else
   //the CPU will keep vectoring back to the ISR
}

Gracias de antemano!

    
pregunta user1003131

1 respuesta

1

Veo tres cosas que faltan.

¿Falta el número dspic33?

AD1PCFGL = 0xFF, o lo que sea que la hoja de datos le indique, apague el adc en esos pines, si es necesario. ANSEL es para elegir la entrada adc, no para convertirlas en digitales.

Pines de entrada TRISXbits.TRISX? = 1, para convertir tu pin en una entrada.

    
respondido por el Erik Friesen

Lea otras preguntas en las etiquetas