Код
CODE
#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h>
static int usart_putchar (char data, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE);
void delay();
void initall();
void delay(uint32_t i)
{
while(i) i--;
}
int main(void)
{
cli();
initall();
sei();
stdout = &mystdout;
while(1)
{
printf('Hello world\n');
delay(0xFFFF);
}
}
void initall(void)
{
PORTD.DIR|=1<<7; //высокий уровень на TXD1, 7 нога
PORTD.OUT=0xA0; //TXD1 и XCK1 высокий логический уровни
USARTD0.CTRLC= USART_PMODE1_bm | USART_CHSIZE0_bm | USART_CHSIZE1_bm; //разрешен четный паритет, по 8 бит, стоп-бит 1
USARTD0.CTRLB= USART_TXEN_bm; //включен передатчик
USARTD0.BAUDCTRLA=0x91; // BSEL = 401
USARTD0.BAUDCTRLB=0xC1; // BSCALE = -4, Реальная скорость ~115200
}
int usart_putchar(char data, FILE *stream)
{
if (data=='\n') usart_putchar('\r', stream); //для терминала bray
else
{
while (!(USARTD0.STATUS & (USART_TXCIF_bm))) //пока флаг TXCIF не равен единице
USARTD0.DATA = data;
}
return 0;
}
#include <stdio.h>
#include <avr/interrupt.h>
static int usart_putchar (char data, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE);
void delay();
void initall();
void delay(uint32_t i)
{
while(i) i--;
}
int main(void)
{
cli();
initall();
sei();
stdout = &mystdout;
while(1)
{
printf('Hello world\n');
delay(0xFFFF);
}
}
void initall(void)
{
PORTD.DIR|=1<<7; //высокий уровень на TXD1, 7 нога
PORTD.OUT=0xA0; //TXD1 и XCK1 высокий логический уровни
USARTD0.CTRLC= USART_PMODE1_bm | USART_CHSIZE0_bm | USART_CHSIZE1_bm; //разрешен четный паритет, по 8 бит, стоп-бит 1
USARTD0.CTRLB= USART_TXEN_bm; //включен передатчик
USARTD0.BAUDCTRLA=0x91; // BSEL = 401
USARTD0.BAUDCTRLB=0xC1; // BSCALE = -4, Реальная скорость ~115200
}
int usart_putchar(char data, FILE *stream)
{
if (data=='\n') usart_putchar('\r', stream); //для терминала bray
else
{
while (!(USARTD0.STATUS & (USART_TXCIF_bm))) //пока флаг TXCIF не равен единице
USARTD0.DATA = data;
}
return 0;
}