AS 7.0.1931
The following program only prints: Hel
#define F_CPU 20000000ul #define PRESCALE 1 #define F_PER (F_CPU / PRESCALE) #define BAUD_RATE0 38400ul #define USART0_BAUD_RATE (F_PER * 4 / BAUD_RATE0) #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include <stdlib.h> #include <util/delay.h> #include <string.h> static int uart_putchar(char c, FILE *stream); volatile uint32_t knt; static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); int main(void) { //set peripheral prescale to 1 CPU_CCP = 0XD8; CLKCTRL.MCLKCTRLB = 0; //1 knt=0; while ((CLKCTRL.MCLKSTATUS & 1)){}; //wait for clk change stdout = &mystdout; //SET PB2 FOR OUTPUT FOR TXD PORTB.PIN3CTRL &= ~PORT_PULLUPEN_bm; //PB3 = RXD no pullup VPORTB.OUT |= (1 << 2); //PB2 out = 1; VPORTB.DIR |= (1 << 2); //PB2 out VPORTB.OUT &= ~(1 << 2); //PB2 out = 0; //setup USART0 USART0.BAUD = USART0_BAUD_RATE; USART0.CTRLB = 0b11000000; //enable rx & tx; knt++; sei(); knt++; printf("Hello, world!\r\n"); while (1) { } } static int uart_putchar(char c, FILE *stream) { knt++; while (USART0.STATUS & 0x00100000); USART0.TXDATAL = c; return 0; }