'AVR ATMEGA328 is Resetting when (TIMER1_CAP_VECT)Interrupt Occurs and sometime with the UART interrupt

I configure the ICP1 to get the pulses but when it happens, the avr is resetting, sometimes when the uart iterrput occurs it also reset. I don't know where I'm missing, I think it could be the fact that I'm using a Makefile not the AVR-STUDIO, but I use Linux.

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include <string.h>
#include "display.h"
#include "memoria.h"
#include "pcf8574.h"
#include "lcdpcf8574.h"
#include "uart_hal.h"

#define ON 1
#define OFF 0
#define BOMBA DDD7
#define LDVD DDD6
#define LDVM DDD5
#define TRIGGER DDD2

#define BAUDRATE 9600

void rotina_da_bomba();
void bomba_state(bool state);
void led_verde_state(bool state);
void led_vermelho_state(bool state);
void monta_mensagem(char *mensagem);
void monta_resposta();

caixa_dagua caixa;

bool encher = false;
long dist;

int main(void)
{
    char mensagem_lcd[33] = " ";
    /* configure timer1 in normal mode */
    TCCR1A = 0;
    /* configure icr on rising edge with noise filter */
    TCCR1B = _BV(ICES1) | _BV(ICNC1) | _BV(CS10);
    TIMSK1 = _BV(ICIE1);
    // LED VERMELHO // LED VERDE   // BOMBA
    DDRD = _BV(BOMBA) | _BV(LDVD) | _BV(LDVM) | _BV(TRIGGER); // Configura Saida do LED e da Bomba
    lcd_init(LCD_DISP_ON);
    lcd_puts("   Iniciando      Equipamento");
    _delay_ms(500); // busy wait, 500ms
    lcd_clrscr();

    lcd_puts("  Lab:Sistemas    Embarcados");
    _delay_ms(500); // busy wait, 500ms
    lcd_clrscr();

    ler_informacoes_salvas(&caixa);

    uart_init(BAUDRATE, OFF); // inicia a comunicação bluetooth com um ponteiro de flag para saber se chegou dado
    sei();
    uart_send_string("Iniciando Bluetooth\n");
    caixa.altura_atual = 200;

    while (1)
    {
        char mensagem_bluetooth[50] = ""; // Estou sempre zerando essa variavel
        char resposta[50] = "";

        PORTD |= _BV(PORTD2);
        _delay_ms(10);
        PORTD &= ~_BV(PORTD2);

        uart_send_string("Teste Bluetooth");
        rotina_da_bomba();

        if (uart_read_count()) // Chegou mensagem Bluetooth
        {
            uart_get_string(&mensagem_bluetooth);
            uart_send_string(mensagem_bluetooth);
        }

        monta_mensagem(&mensagem_lcd); // Montando  que será exibida no LCD
        lcd_clrscr();
        lcd_puts(mensagem_lcd);

        _delay_ms(250); // busy wait, 500ms
    }
    return 1;
}

ISR(TIMER1_CAP_VET)
{
    static long temp = 0;
    if (TCCR1B & _BV(ICES1))
        temp = ICR1;
    else
        dist = ((ICR1 - temp) * 1e6) / F_CPU / 5.8;
    TCCR1B ^= _BV(ICES1);
}

Here is my Makefile

FILENAME   = app/main
FILENAME2  = app/display
FILENAME3  = app/uart_hal
FILENAME5  = app/memoria
FILENAME6  = app/twimaster
FILENAME7  = app/pcf8574
FILENAME8  = app/lcdpcf8574
PORT       = /dev/ttyACM*
DEVICE     = atmega328p
PROGRAMMER = arduino
BAUD       = 115200
COMPILE    = avr-gcc -Wall -Os -mmcu=$(DEVICE)


all: compile upload clean

compile:
    $(COMPILE) -c $(FILENAME).c -o $(FILENAME).o
    $(COMPILE) -c $(FILENAME2).c -o $(FILENAME2).o
    $(COMPILE) -c $(FILENAME3).c -o $(FILENAME3).o
    $(COMPILE) -c $(FILENAME5).c -o $(FILENAME5).o
    $(COMPILE) -c $(FILENAME6).c -o $(FILENAME6).o
    $(COMPILE) -c $(FILENAME7).c -o $(FILENAME7).o
    $(COMPILE) -c $(FILENAME8).c -o $(FILENAME8).o
    $(COMPILE) -o $(FILENAME).elf $(FILENAME).o $(FILENAME2).o $(FILENAME3).o  $(FILENAME5).o $(FILENAME6).o $(FILENAME7).o $(FILENAME8).o
    avr-objcopy -j .text -j .data -O ihex $(FILENAME).elf $(FILENAME).hex 
    avr-size --format=avr --mcu=$(DEVICE) $(FILENAME).elf

upload:
    avrdude -v -p $(DEVICE) -c $(PROGRAMMER) -P $(PORT) -b $(BAUD) -U flash:w:$(FILENAME).hex:i 
    
    
clean:
    rm $(FILENAME).o
    rm $(FILENAME2).o
    rm $(FILENAME3).o
    rm $(FILENAME5).o
    rm $(FILENAME6).o
    rm $(FILENAME7).o
    rm $(FILENAME8).o
    rm $(FILENAME).elf
    rm $(FILENAME).hex

I also have this warning on compilation


warning: ‘TIMER1_CAP_VET’ appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr]
 ISR(TIMER1_CAP_VET)

I Change to

ISR(TIMER1_CAP_vect)

But still resetting



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source