#include <avr/io.h>
#include <avr/interrupt.h>
//-------------- Definiciones de tipos de variables
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long int u32;
typedef unsigned long long int u64;
//-------------- Definiciones de tipos de variables
//-------------- Variables globales de interrupciones
volatile u8 flag_externa0=0;
//-------------- Variables globales de interrupciones
/* PUERTO SALIDA TTL */
#define PORT_SALIDA_TTL PORTA
#define DDR_PORT_SALIDA_TTL DDRA
#define PIN_PORT_SALIDA_TTL PINA
#define BIT_SALIDA_TTL PA4
/*----------------------------*/
extern void ttl_frec_var_alta(u8,u8);
#define DISPARO_EXT_NIVEL_BAJO 0
#define DISPARO_EXT_CAMBIO_LOGICO 1
#define DISPARO_EXT_FLANCO_DESC 2
#define DISPARO_EXT_FLANCO_ASC 3
void set_bits (volatile u8 *port, u8 mask)
{
*port |= mask;
}
void configura_int_externa_0(u8 tipo_de_disparo)
{
DDRD &= ~(1 << PD2); // PD2 como entrada
set_bits(&PORTD,(1<<PD2));
MCUCR&=0xfC;
MCUCR|=(0x03&tipo_de_disparo); // Defino el tipo de disparo
GIFR&=~(1<<INTF0); //limpio el flag de la interrupción externa
}
int main(void)
{
DDRA=(1<<BIT_SALIDA_TTL);
GICR&=0x3f; //Deshabilito las interrupciones externas
GICR|=(1<<INT0); //Habilito la interrupcion externa 0
SREG |=0x80; // Habilito las interrupciones
u8 t_on=5,t_off=5; // 400kHz
while(1)
{
//Fvariable=16MHz/{2*[8Clk + 3*(N-1)]} N esta compuesto por 2 bytes (alto y bajo)
ttl_frec_var_alta(t_on,t_off); // Solo sale cuando hay una interrupción externa 0!
}