/* 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();
}
Detected encoding: UTF-8 | 0
|