Quelltext /~heha/basteln/PC/Programmiergeräte/Wild GIF12/mtp3.zip/main.cpp

/* Firmware für den ATmega32U4 eines Arduino Pro Micro
   Henrik Haftmann
 190512	erstellt
 190601	gestrafft, Code in C++-Dateien (nicht in H-Datei zwecks Übersichtlichkeit)
 190708	Schreiben und Lesen einer einzelnen Datei (mtp3)
Funktion:
Der EEPROM-Inhalt wird als Datei schreib-lesbar dargestellt.

Interrupts werden hier nicht verwendet.
*/

#include <avr/io.h>
#include <avr/sleep.h>
#include "usb.h"
#include "MTP.h"
#include <avr/eeprom.h>

/***********************************************
 * Generelle Initialisierung und Hauptprogramm *
 ***********************************************/

static void setupHardware(void) {
 MCUCR = 0x80;	// JTAG deaktivieren (sonst gehen PF4..PF7 = ADC4..ADC7 nicht)
 MCUSR = 0;	// WDRF löschen, damit das nachfolgende Deaktivieren des Watchdogs klappt
 WDTCSR|=0x18;	// Watchdog deaktivieren
 WDTCSR= 0;
 CLKPR = 0x80;
 CLKPR = 0x00;	// CLKDIV8-Fuse ist ab Werk gesetzt: Löschen!
 SMCR  = 0x01;	// Sleep aktivieren
 PRR0  = 0x84;	// I²C, SPI aus
 PRR1  = 0x09;	// Timer3, USART aus
 PORTB = 0x81;	// Pullups an Eingängen, Low an Ausgängen
 PORTC = 0xFF;
 PORTD = 0x7F;
 PORTF = 0xFF;
 DDRB |= 0x01;	// LED RX
 DDRD |= 0x20;	// LED TX
 ACSR  = 0x80;	// Analogvergleicher deaktivieren
}

static void idle() {
 usbPoll();
 MTP::pollUSB();
}

int main() {
 setupHardware();
 usbInit();
 int i=1024; do{	// Letztes von 0xFF verschiedenes EEPROM-Byte finden
  if (eeprom_read_byte((byte*)--i)!=0xFF) break;
 }while(i>=0);
 eefill=i+1;
 for(;;) idle();
}
Vorgefundene Kodierung: UTF-80