/*****************************************************************************
* File : serial.c
* Compiler : AVR-GCC/avr-libc(>= 1.2.5)
* Target platform : All AVRs with bootloader support
* AppNote : AVR109 - Self-programming
* Description : UART communication routines
****************************************************************************/
#include "defines.h"
typedef unsigned char uchar;
void initbootuart(void) {
uchar i;
// Ports initialisieren
PORTB=0b01100101;
PORTC=0b00111001;
PORTD=0b11111100;
DDRB =0b10101111; // alles Ausgänge, außer MISO
DDRC =0b00000111; // LEDs sowie Kunstmasse als Ausgang
DDRD =0b01000010; // TxD = Ausgang
// SPI initialisieren
SPCR =0b01010000; // MSB zuerst, SPI-Master, Mode 0
SPSR|=0b00000001; // mit 4 MHz schieben
// 5 FF-Bytes in die Schieberegister ausgeben
for (i=0; i<5; i++) {
SPDR=0xFF;
while (!(SPSR&0x80)); // warten bis Interrupt
}
// Parallele (gleichzeitige) Übernahme nach außen
PORTB|= 0b00000010; // RCK↑
asm volatile("nop");
PORTB&=~0b00000010; // RCK↓
// Ausgabetreiber aktivieren
PORTB&=~0b00000100; // ¬OE auf LOW
MCUCR=0x80; // Sleep aktivieren
UBRRL = BRREG_VALUE;
UCSRB = 0x18;
}
void sendchar(unsigned char c) {
while (!(UCSRA&0x20)) /*sleep_cpu()*/;
UDR=c;
}
unsigned char recchar(void) {
while(!(UCSRA&0x80)) /*sleep_cpu()*/; // wait for data
return UDR;
}
Detected encoding: UTF-8 | 0
|