Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

GPIO Interrupción

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 2

// Interrupcin por flanco de bajada en PJ0 = SW1

// La Rutina de Servicio de Interrupcin incrementa a un contador.

#include <stdint.h>

#define SYSCTL_RCGCGPIO_R (*((volatile uint32_t *)0x400FE608))


#define SYSCTL_PRGPIO_R (*((volatile unsigned long *)0x400FEA08))
#define GPIO_PORTJ_DIR_R (*((volatile uint32_t *)0x40060400)) //Registro de Direccin PJ
#define GPIO_PORTJ_DEN_R (*((volatile uint32_t *)0x4006051C)) //Registro de habilitacin PJ
#define GPIO_PORTJ_PUR_R (*((volatile uint32_t *)0x40060510)) //Registro de pull-up PJ
#define GPIO_PORTJ_DATA_R (*((volatile uint32_t *)0x40060004)) //Registro de Datos J
#define GPIO_PORTJ_IS_R (*((volatile uint32_t *)0x40060404)) //Registro de configuracin de
deteccin de nivel o flanco
#define GPIO_PORTJ_IBE_R (*((volatile uint32_t *)0x40060408)) //Registro de configuracin de
interrupcin por ambos flancos
#define GPIO_PORTJ_IEV_R (*((volatile uint32_t *)0x4006040C)) //Registro de configuracin de
interrupcin por un flanco
#define GPIO_PORTJ_ICR_R (*((volatile uint32_t *)0x4006041C)) //Registro de limpieza de interrupcion
de flanco en PJ
#define GPIO_PORTJ_IM_R (*((volatile uint32_t *)0x40060410)) //Registro de mascara de interrupcion
PJ
#define NVIC_EN1_R (*((volatile uint32_t *)0xE000E104)) // Registro de habilitacin de
interrupcin PJ
#define NVIC_PRI12_R (*((volatile uint32_t *)0xE000E430))//Registro de prioridad de
interrupcin

// Incrementa la variable una vez cada que se presiona SW1


volatile uint32_t Flancosdebajada = 0;
void EdgeCounter_Init(void){
SYSCTL_RCGCGPIO_R |= 0x00000100; // (a) activa el reloj para el puerto J
Flancosdebajada = 0; // (b) inicializa el contador
GPIO_PORTJ_DIR_R &= ~0x01; // (c) PJ0 direccin entrada - boton SW1
GPIO_PORTJ_DEN_R |= 0x01; // PJ0 se habilita
GPIO_PORTJ_PUR_R |= 0x01; // habilita weak pull-up on PJ1
GPIO_PORTJ_IS_R &= ~0x01; // (d) PJ1 es sensible por flanco
GPIO_PORTJ_IBE_R &= ~0x01; // PJ1 no es sensible a dos flancos
GPIO_PORTJ_IEV_R &= ~0x01; // PJ1 detecta eventos de flanco de bajada
GPIO_PORTJ_ICR_R = 0x01; // (e) limpia la bandera 0
GPIO_PORTJ_IM_R |= 0x01; // (f) Se desenmascara la interrupcion PJ0 y se envia al controlador de
interrupciones
NVIC_PRI12_R = (NVIC_PRI12_R&0x00FFFFFF)|0x00000000; // (g) prioridad 5
NVIC_EN1_R= 1<<(51-32); //(h) habilita la interrupcin 51 en NVIC

}
void GPIOPortJ_Handler(void)
{
GPIO_PORTJ_ICR_R = 0x01; // bandera0 de confirmacin
Flancosdebajada = Flancosdebajada + 1;
}

//Programa principal
int main(void){
EdgeCounter_Init(); // inicializa la interrupcin en el puerto GPIO J
while(1);
}

También podría gustarte