actividad1 expractico

6
#include <asf.h> #include "conf_gpio_peripheral_bus_example.h" #include "delay.h" #include "pm.h" #include "delay.h" #include "intc.h" void display(volatile int32_t numero); void inicializa_PM(void); volatile uint32_t vel=1; int32_t numero1 = 0; volatile int tecla_up=0; volatile int tecla_down=0; volatile int tecla_right=0; volatile int tecla_left=0; /** \brief Main function to alter the state of the pin \c GPIO_PIN_EXAMPLE. */ void inicializa_PM(void) { // Activa el oscilador Osc0 pm_switch_to_osc0(&AVR32_PM,12000000,6); //___________________________________________________________________________ ____ //Establece la frecuencia del VCO //Si DIV>1 Fvco=((MUL+1)/DIV)*Fosc //Si DIV=0 Fvco=2*(MUL+1)*Fosc pm_pll_setup(&AVR32_PM,0,vel,0,0,16); // lockcount in main clock for the PLL wait lock //___________________________________________________________________________ ____ // Establece la frecuencia de salida del PLL pm_pll_set_option(&AVR32_PM,0,1,1,0);//1 Start-up faster, Start-up normal //___________________________________________________________________________ ____ //Habilita el PLL 0 pm_pll_enable(&AVR32_PM,0); //___________________________________________________________________________ ____

Transcript of actividad1 expractico

Page 1: actividad1 expractico

#include <asf.h>#include "conf_gpio_peripheral_bus_example.h"#include "delay.h"#include "pm.h"#include "delay.h"#include "intc.h"

void display(volatile int32_t numero);void inicializa_PM(void);volatile uint32_t vel=1;int32_t numero1 = 0;volatile int tecla_up=0;volatile int tecla_down=0;volatile int tecla_right=0;volatile int tecla_left=0;

/** \brief Main function to alter the state of the pin \c GPIO_PIN_EXAMPLE. */

void inicializa_PM(void){

// Activa el oscilador Osc0pm_switch_to_osc0(&AVR32_PM,12000000,6);

//_______________________________________________________________________________

//Establece la frecuencia del VCO//Si DIV>1 Fvco=((MUL+1)/DIV)*Fosc//Si DIV=0 Fvco=2*(MUL+1)*Fosc

pm_pll_setup(&AVR32_PM,0,vel,0,0,16); // lockcount in main clock for the PLL wait lock

//_______________________________________________________________________________

// Establece la frecuencia de salida del PLLpm_pll_set_option(&AVR32_PM,0,1,1,0);//1 Start-up faster, Start-up

normal

//_______________________________________________________________________________

//Habilita el PLL 0pm_pll_enable(&AVR32_PM,0);

//_______________________________________________________________________________

//Espera a que se establesca el PLLpm_wait_for_pll0_locked(&AVR32_PM) ;

//_______________________________________________________________________________

// Set one wait-state (WS) for flash controllerflashc_set_wait_state(1);

//habilita la salida del PLL0 con 2 y el OSC0 con 1

Page 2: actividad1 expractico

pm_switch_to_clock(&AVR32_PM, 2);}

//La rutina de display lo que hace es un and con el número que tiene con un 1,2,4 y 8 así si por ejemplo tenemos un 7 de número que en binario es= 0111 primero hace and con 0111 & 0001 luego 0111 & 0010 , 0111 & 0100 y 0111 & 1000 para asi saber cuáles leds prender

void display(volatile int32_t numero){//muestra numero en los ledsint8_t numerox = (int8_t)numero;if (numerox & (1 << 0)) //checa el bit0//if (numerox & 1){

gpio_clr_gpio_pin(LED3_GPIO);}else{gpio_set_gpio_pin(LED3_GPIO);

}if (numerox & (1 << 1)) //checa el bit1//if (numerox & 2){

gpio_clr_gpio_pin(LED2_GPIO);}else{gpio_set_gpio_pin(LED2_GPIO);

}if (numerox & (1<<2)) //checa el bit2//if (numerox & 4){

gpio_clr_gpio_pin(LED1_GPIO);}else{gpio_set_gpio_pin(LED1_GPIO);

}if (numerox & (1<<3)) //checa el bit3//if (numerox & 8){

gpio_clr_gpio_pin(LED0_GPIO);}else{gpio_set_gpio_pin(LED0_GPIO);

}

}

//Aquí vienen las interrupciones, aquí entran las interrupciones de todas las teclas por lo que para saber que botón fue el q pidió interrupción se hace con la función gpio_get_pin_interrupt_flag y prendo una bandera que en mi caso se llaman tecla_up, tecla_down, tecla_left, tecla_right para después con esa bandera ocuparlas en el main

__attribute__ ((__interrupt__)) void teclas_touch(void){//teclas touch up down right left center

if (gpio_get_pin_interrupt_flag(QT1081_TOUCH_SENSOR_UP)){

gpio_clear_pin_interrupt_flag(QT1081_TOUCH_SENSOR_UP);

Page 3: actividad1 expractico

tecla_left=0;tecla_right=0;tecla_up=1;

}

if (gpio_get_pin_interrupt_flag(QT1081_TOUCH_SENSOR_DOWN)){

gpio_clear_pin_interrupt_flag(QT1081_TOUCH_SENSOR_DOWN);tecla_left=0;tecla_right=0;tecla_down=1;

}

if (gpio_get_pin_interrupt_flag(QT1081_TOUCH_SENSOR_ENTER)){

gpio_clear_pin_interrupt_flag(QT1081_TOUCH_SENSOR_ENTER);tecla_left=0;tecla_right=0;numero1=0;display(numero1);

}

if (gpio_get_pin_interrupt_flag(QT1081_TOUCH_SENSOR_RIGHT)){

gpio_clear_pin_interrupt_flag(QT1081_TOUCH_SENSOR_RIGHT);tecla_left=0;tecla_right=1;

}if (gpio_get_pin_interrupt_flag(QT1081_TOUCH_SENSOR_LEFT)){

gpio_clear_pin_interrupt_flag(QT1081_TOUCH_SENSOR_LEFT);tecla_right=0;tecla_left=1;

}

}

int main(void){

inicializa_PM();//Interrupciones

Disable_global_interrupt();

INTC_init_interrupts();

INTC_register_interrupt(&teclas_touch, 71, 0); //right left centerINTC_register_interrupt(&teclas_touch, 70,0);//up and downgpio_enable_pin_interrupt(QT1081_TOUCH_SENSOR_LEFT,GPIO_RISING_EDGE);gpio_enable_pin_interrupt(QT1081_TOUCH_SENSOR_RIGHT,GPIO_RISING_EDGE);

Page 4: actividad1 expractico

gpio_enable_pin_interrupt(QT1081_TOUCH_SENSOR_ENTER,GPIO_RISING_EDGE);gpio_enable_pin_interrupt(QT1081_TOUCH_SENSOR_UP,GPIO_RISING_EDGE);gpio_enable_pin_interrupt(QT1081_TOUCH_SENSOR_DOWN,GPIO_RISING_EDGE);

Enable_global_interrupt();

while (1) {

if (tecla_up){

tecla_up=0;numero1++;

if (numero1>=15){numero1=15;}display(numero1);

}

if (tecla_down){

tecla_down=0;numero1--;if (numero1<=0){numero1=0;}display(numero1);

}

if (tecla_right){pm_switch_to_clock(&AVR32_PM,0); //cambia al RC

for(vel=1;vel<=7;vel++){inicializa_PM();gpio_clr_gpio_pin(LED0_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED0_GPIO);gpio_clr_gpio_pin(LED1_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED1_GPIO);gpio_clr_gpio_pin(LED2_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED2_GPIO);gpio_clr_gpio_pin(LED3_GPIO);delay_ms(40000);

Page 5: actividad1 expractico

inicializa_PM();gpio_set_gpio_pin(LED2_GPIO);gpio_set_gpio_pin(LED3_GPIO);delay_ms(40000);}

}

if (tecla_left){

pm_switch_to_clock(&AVR32_PM,0); //cambia al RC

for(vel=1;vel<=7;vel++){inicializa_PM();gpio_clr_gpio_pin(LED3_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED3_GPIO);gpio_clr_gpio_pin(LED2_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED2_GPIO);gpio_clr_gpio_pin(LED1_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED1_GPIO);gpio_clr_gpio_pin(LED0_GPIO);delay_ms(40000);inicializa_PM();gpio_set_gpio_pin(LED0_GPIO);gpio_set_gpio_pin(LED1_GPIO);delay_ms(40000);

}}

}}