Antes estaba usando ATmega32A y ahora estoy migrando a ATmega324PA solo para mejorar la administración de energía. Ahora estoy probando el nuevo controlador en todos los aspectos. Este es un código simple para verificar el temporizador de vigilancia pero sigue reiniciando el controlador.
Código:
int main(void)
{
uart_init();
PORTA|=(1<<PORTA1);
_delay_ms(1500);
PORTA&=~(1<<PORTA1);
_delay_ms(2000);
uart_array("FFFFFFFFFFFFFFFFFF");
wdt_enable(WDTO_2S);
_delay_ms(5000);
}
void uart_init()
{
/*set PinA1 as output for LED*/
DDRA|=(1<<1);
/*set PinD3 as output for UART*/
DDRD|=(1<<3);
/*set pinD2 as input for UART*/
DDRD&=~(1<<2);
/*enabling TX and RX*/
UCSR1B |=(1<<TXEN1) | (1<<RXEN1);
/*asynchronous mode selection*/
UCSR1C&=~(1<<UMSEL11);
UCSR1C&=~(1<<UMSEL10);
/*setting data format to 8 bit*/
UCSR1B &=~(1<<UCSZ12);
UCSR1C|=(1<<UCSZ11)|(1<<UCSZ10);
/* setting one bit as stop bit*/
UCSR1C &=~(1<<USBS1);
/*Disabling parity*/
UCSR1C &= ~((1<<UPM11) | (1<<UPM10));
/* loading 8 LSB to UBRRL*/
UBRR1L = UBRRL_VALUE;
/* loading 4 MSB to UBRRH*/
UBRR1H = UBRRH_VALUE;
}
El código funciona bien por primera vez, pero después de eso, el LED sigue parpadeando.
Nota: el bit de fusible de watchdog (WDTON) está desactivado.