Quelltext /~heha/mb-iwp/Antriebe/Schrittmotorsteuerung/Firmware.zip/Bootloader/serial.c

/*****************************************************************************
* 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;
}
Vorgefundene Kodierung: UTF-80