summaryrefslogtreecommitdiffstats
path: root/drivers/avr
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/avr')
-rw-r--r--drivers/avr/analog.c138
-rw-r--r--drivers/avr/analog.h53
-rw-r--r--drivers/avr/glcdfont.c23
-rw-r--r--drivers/avr/hd44780.c536
-rw-r--r--drivers/avr/hd44780.h348
-rw-r--r--drivers/avr/i2c_master.c224
-rw-r--r--drivers/avr/i2c_master.h43
-rw-r--r--drivers/avr/i2c_slave.c86
-rw-r--r--drivers/avr/i2c_slave.h30
-rw-r--r--drivers/avr/serial.c563
-rw-r--r--drivers/avr/serial.h62
-rw-r--r--drivers/avr/spi_master.c180
-rw-r--r--drivers/avr/spi_master.h59
-rw-r--r--drivers/avr/ssd1306.c319
-rw-r--r--drivers/avr/ssd1306.h87
-rw-r--r--drivers/avr/uart.c170
-rw-r--r--drivers/avr/uart.h35
-rw-r--r--drivers/avr/ws2812.c176
-rw-r--r--drivers/avr/ws2812_i2c.c27
19 files changed, 0 insertions, 3159 deletions
diff --git a/drivers/avr/analog.c b/drivers/avr/analog.c
deleted file mode 100644
index 8d299ffdb9..0000000000
--- a/drivers/avr/analog.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright 2015 Jack Humbert
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <avr/io.h>
-#include <avr/pgmspace.h>
-#include <stdint.h>
-#include "analog.h"
-
-static uint8_t aref = ADC_REF_POWER;
-
-void analogReference(uint8_t mode) { aref = mode & (_BV(REFS1) | _BV(REFS0)); }
-
-// Arduino compatible pin input
-int16_t analogRead(uint8_t pin) {
-#if defined(__AVR_ATmega32U4__)
- // clang-format off
- static const uint8_t PROGMEM pin_to_mux[] = {
- //A0 A1 A2 A3 A4 A5
- //F7 F6 F5 F4 F1 F0
- 0x07, 0x06, 0x05, 0x04, 0x01, 0x00,
- //A6 A7 A8 A9 A10 A11
- //D4 D7 B4 B5 B6 D6
- 0x20, 0x22, 0x23, 0x24, 0x25, 0x21
- };
- // clang-format on
- if (pin >= 12) return 0;
- return adc_read(pgm_read_byte(pin_to_mux + pin));
-#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
- if (pin >= 8) return 0;
- return adc_read(pin);
-#else
- return 0;
-#endif
-}
-
-int16_t analogReadPin(pin_t pin) { return adc_read(pinToMux(pin)); }
-
-uint8_t pinToMux(pin_t pin) {
- switch (pin) {
- // clang-format off
-#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
- case F0: return 0; // ADC0
- case F1: return _BV(MUX0); // ADC1
- case F2: return _BV(MUX1); // ADC2
- case F3: return _BV(MUX1) | _BV(MUX0); // ADC3
- case F4: return _BV(MUX2); // ADC4
- case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
- case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
- case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
- default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
-#elif defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
- case F0: return 0; // ADC0
- case F1: return _BV(MUX0); // ADC1
- case F4: return _BV(MUX2); // ADC4
- case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
- case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
- case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
- case D4: return _BV(MUX5); // ADC8
- case D6: return _BV(MUX5) | _BV(MUX0); // ADC9
- case D7: return _BV(MUX5) | _BV(MUX1); // ADC10
- case B4: return _BV(MUX5) | _BV(MUX1) | _BV(MUX0); // ADC11
- case B5: return _BV(MUX5) | _BV(MUX2); // ADC12
- case B6: return _BV(MUX5) | _BV(MUX2) | _BV(MUX0); // ADC13
- default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
-#elif defined(__AVR_ATmega32A__)
- case A0: return 0; // ADC0
- case A1: return _BV(MUX0); // ADC1
- case A2: return _BV(MUX1); // ADC2
- case A3: return _BV(MUX1) | _BV(MUX0); // ADC3
- case A4: return _BV(MUX2); // ADC4
- case A5: return _BV(MUX2) | _BV(MUX0); // ADC5
- case A6: return _BV(MUX2) | _BV(MUX1); // ADC6
- case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
- default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
-#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
- case C0: return 0; // ADC0
- case C1: return _BV(MUX0); // ADC1
- case C2: return _BV(MUX1); // ADC2
- case C3: return _BV(MUX1) | _BV(MUX0); // ADC3
- case C4: return _BV(MUX2); // ADC4
- case C5: return _BV(MUX2) | _BV(MUX0); // ADC5
- // ADC7:6 not present in DIP package and not shared by GPIO pins
- default: return _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
-#endif
- // clang-format on
- }
- return 0;
-}
-
-int16_t adc_read(uint8_t mux) {
- uint16_t low;
-
- // Enable ADC and configure prescaler
- ADCSRA = _BV(ADEN) | ADC_PRESCALER;
-
-#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
- // High speed mode and ADC8-13
- ADCSRB = _BV(ADHSM) | (mux & _BV(MUX5));
-#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
- // High speed mode only
- ADCSRB = _BV(ADHSM);
-#endif
-
- // Configure mux input
-#if defined(MUX4)
- ADMUX = aref | (mux & (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
-#else
- ADMUX = aref | (mux & (_BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
-#endif
-
- // Start the conversion
- ADCSRA |= _BV(ADSC);
- // Wait for result
- while (ADCSRA & _BV(ADSC))
- ;
- // Must read LSB first
- low = ADCL;
- // Must read MSB only once!
- low |= (ADCH << 8);
-
- // turn off the ADC
- ADCSRA &= ~(1 << ADEN);
-
- return low;
-}
diff --git a/drivers/avr/analog.h b/drivers/avr/analog.h
deleted file mode 100644
index 058882450d..0000000000
--- a/drivers/avr/analog.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2015 Jack Humbert
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <stdint.h>
-#include "quantum.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-void analogReference(uint8_t mode);
-int16_t analogRead(uint8_t pin);
-
-int16_t analogReadPin(pin_t pin);
-uint8_t pinToMux(pin_t pin);
-
-int16_t adc_read(uint8_t mux);
-#ifdef __cplusplus
-}
-#endif
-
-#define ADC_REF_EXTERNAL 0 // AREF, Internal Vref turned off
-#define ADC_REF_POWER _BV(REFS0) // AVCC with external capacitor on AREF pin
-#define ADC_REF_INTERNAL (_BV(REFS1) | _BV(REFS0)) // Internal 2.56V Voltage Reference with external capacitor on AREF pin (1.1V for 328P)
-
-// These prescaler values are for high speed mode, ADHSM = 1
-#if F_CPU == 16000000L || F_CPU == 12000000L
-# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS1)) // /64
-#elif F_CPU == 8000000L
-# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS0)) // /32
-#elif F_CPU == 4000000L
-# define ADC_PRESCALER (_BV(ADPS2)) // /16
-#elif F_CPU == 2000000L
-# define ADC_PRESCALER (_BV(ADPS1) | _BV(ADPS0)) // /8
-#elif F_CPU == 1000000L
-# define ADC_PRESCALER _BV(ADPS1) // /4
-#else
-# define ADC_PRESCALER _BV(ADPS0) // /2
-#endif
diff --git a/drivers/avr/glcdfont.c b/drivers/avr/glcdfont.c
deleted file mode 100644
index 5e763b054f..0000000000
--- a/drivers/avr/glcdfont.c
+++ /dev/null
@@ -1,23 +0,0 @@
-// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
-// See gfxfont.h for newer custom bitmap font info.
-
-#include "progmem.h"
-
-// Standard ASCII 5x7 font
-
-static const unsigned char font[] PROGMEM = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24, 0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
- 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49, 0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41, 0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00,
- 0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x03, 0x04, 0x78, 0x04, 0x03,
- 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C,
- 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
- 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
- 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, 0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
- 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
- 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, 0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code
- 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
- 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
- 0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F,
- 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, 0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
- 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
-};
diff --git a/drivers/avr/hd44780.c b/drivers/avr/hd44780.c
deleted file mode 100644
index f71069dece..0000000000
--- a/drivers/avr/hd44780.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/****************************************************************************
- Title: HD44780U LCD library
- Author: Peter Fleury <pfleury@gmx.ch> http://tinyurl.com/peterfleury
- License: GNU General Public License Version 3
- File: $Id: lcd.c,v 1.15.2.2 2015/01/17 12:16:05 peter Exp $
- Software: AVR-GCC 3.3
- Target: any AVR device, memory mapped mode only for AT90S4414/8515/Mega
-
- DESCRIPTION
- Basic routines for interfacing a HD44780U-based text lcd display
-
- Originally based on Volker Oth's lcd library,
- changed lcd_init(), added additional constants for lcd_command(),
- added 4-bit I/O mode, improved and optimized code.
-
- Library can be operated in memory mapped mode (LCD_IO_MODE=0) or in
- 4-bit IO port mode (LCD_IO_MODE=1). 8-bit IO port mode not supported.
-
- Memory mapped mode compatible with Kanda STK200, but supports also
- generation of R/W signal through A8 address line.
-
- USAGE
- See the C include lcd.h file for a description of each function
-
-*****************************************************************************/
-#include <inttypes.h>
-#include <avr/io.h>
-#include <avr/pgmspace.h>
-#include <util/delay.h>
-#include "hd44780.h"
-
-/*
-** constants/macros
-*/
-#define DDR(x) (*(&x - 1)) /* address of data direction register of port x */
-#if defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
-/* on ATmega64/128 PINF is on port 0x00 and not 0x60 */
-# define PIN(x) (&PORTF == &(x) ? _SFR_IO8(0x00) : (*(&x - 2)))
-#else
-# define PIN(x) (*(&x - 2)) /* address of input register of port x */
-#endif
-
-#if LCD_IO_MODE
-# define lcd_e_delay() _delay_us(LCD_DELAY_ENABLE_PULSE)
-# define lcd_e_high() LCD_E_PORT |= _BV(LCD_E_PIN);
-# define lcd_e_low() LCD_E_PORT &= ~_BV(LCD_E_PIN);
-# define lcd_e_toggle() toggle_e()
-# define lcd_rw_high() LCD_RW_PORT |= _BV(LCD_RW_PIN)
-# define lcd_rw_low() LCD_RW_PORT &= ~_BV(LCD_RW_PIN)
-# define lcd_rs_high() LCD_RS_PORT |= _BV(LCD_RS_PIN)
-# define lcd_rs_low() LCD_RS_PORT &= ~_BV(LCD_RS_PIN)
-#endif
-
-#if LCD_IO_MODE
-# if LCD_LINES == 1
-# define LCD_FUNCTION_DEFAULT LCD_FUNCTION_4BIT_1LINE
-# else
-# define LCD_FUNCTION_DEFAULT LCD_FUNCTION_4BIT_2LINES
-# endif
-#else
-# if LCD_LINES == 1
-# define LCD_FUNCTION_DEFAULT LCD_FUNCTION_8BIT_1LINE
-# else
-# define LCD_FUNCTION_DEFAULT LCD_FUNCTION_8BIT_2LINES
-# endif
-#endif
-
-#if LCD_CONTROLLER_KS0073
-# if LCD_LINES == 4
-
-# define KS0073_EXTENDED_FUNCTION_REGISTER_ON 0x2C /* |0|010|1100 4-bit mode, extension-bit RE = 1 */
-# define KS0073_EXTENDED_FUNCTION_REGISTER_OFF 0x28 /* |0|010|1000 4-bit mode, extension-bit RE = 0 */
-# define KS0073_4LINES_MODE 0x09 /* |0|000|1001 4 lines mode */
-
-# endif
-#endif
-
-/*
-** function prototypes
-*/
-#if LCD_IO_MODE
-static void toggle_e(void);
-#endif
-
-/*
-** local functions
-*/
-
-/*************************************************************************
-delay for a minimum of <us> microseconds
-the number of loops is calculated at compile-time from MCU clock frequency
-*************************************************************************/
-#define delay(us) _delay_us(us)
-
-#if LCD_IO_MODE
-/* toggle Enable Pin to initiate write */
-static void toggle_e(void) {
- lcd_e_high();
- lcd_e_delay();
- lcd_e_low();
-}
-#endif
-
-/*************************************************************************
-Low-level function to write byte to LCD controller
-Input: data byte to write to LCD
- rs 1: write data
- 0: write instruction
-Returns: none
-*************************************************************************/
-#if LCD_IO_MODE
-static void lcd_write(uint8_t data, uint8_t rs) {
- unsigned char dataBits;
-
- if (rs) { /* write data (RS=1, RW=0) */
- lcd_rs_high();
- } else { /* write instruction (RS=0, RW=0) */
- lcd_rs_low();
- }
- lcd_rw_low(); /* RW=0 write mode */
-
- if ((&LCD_DATA0_PORT == &LCD_DATA1_PORT) && (&LCD_DATA1_PORT == &LCD_DATA2_PORT) && (&LCD_DATA2_PORT == &LCD_DATA3_PORT) && (LCD_DATA0_PIN == 0) && (LCD_DATA1_PIN == 1) && (LCD_DATA2_PIN == 2) && (LCD_DATA3_PIN == 3)) {
- /* configure data pins as output */
- DDR(LCD_DATA0_PORT) |= 0x0F;
-
- /* output high nibble first */
- dataBits = LCD_DATA0_PORT & 0xF0;
- LCD_DATA0_PORT = dataBits | ((data >> 4) & 0x0F);
- lcd_e_toggle();
-
- /* output low nibble */
- LCD_DATA0_PORT = dataBits | (data & 0x0F);
- lcd_e_toggle();
-
- /* all data pins high (inactive) */
- LCD_DATA0_PORT = dataBits | 0x0F;
- } else {
- /* configure data pins as output */
- DDR(LCD_DATA0_PORT) |= _BV(LCD_DATA0_PIN);
- DDR(LCD_DATA1_PORT) |= _BV(LCD_DATA1_PIN);
- DDR(LCD_DATA2_PORT) |= _BV(LCD_DATA2_PIN);
- DDR(LCD_DATA3_PORT) |= _BV(LCD_DATA3_PIN);
-
- /* output high nibble first */
- LCD_DATA3_PORT &= ~_BV(LCD_DATA3_PIN);
- LCD_DATA2_PORT &= ~_BV(LCD_DATA2_PIN);
- LCD_DATA1_PORT &= ~_BV(LCD_DATA1_PIN);
- LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN);
- if (data & 0x80) LCD_DATA3_PORT |= _BV(LCD_DATA3_PIN);
- if (data & 0x40) LCD_DATA2_PORT |= _BV(LCD_DATA2_PIN);
- if (data & 0x20) LCD_DATA1_PORT |= _BV(LCD_DATA1_PIN);
- if (data & 0x10) LCD_DATA0_PORT |= _BV(LCD_DATA0_PIN);
- lcd_e_toggle();
-
- /* output low nibble */
- LCD_DATA3_PORT &= ~_BV(LCD_DATA3_PIN);
- LCD_DATA2_PORT &= ~_BV(LCD_DATA2_PIN);
- LCD_DATA1_PORT &= ~_BV(LCD_DATA1_PIN);
- LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN);
- if (data & 0x08) LCD_DATA3_PORT |= _BV(LCD_DATA3_PIN);
- if (data & 0x04) LCD_DATA2_PORT |= _BV(LCD_DATA2_PIN);
- if (data & 0x02) LCD_DATA1_PORT |= _BV(LCD_DATA1_PIN);
- if (data & 0x01) LCD_DATA0_PORT |= _BV(LCD_DATA0_PIN);
- lcd_e_toggle();
-
- /* all data pins high (inactive) */
- LCD_DATA0_PORT |= _BV(LCD_DATA0_PIN);
- LCD_DATA1_PORT |= _BV(LCD_DATA1_PIN);
- LCD_DATA2_PORT |= _BV(LCD_DATA2_PIN);
- LCD_DATA3_PORT |= _BV(LCD_DATA3_PIN);
- }
-}
-#else
-# define lcd_write(d, rs) \
- if (rs) \
- *(volatile uint8_t *)(LCD_IO_DATA) = d; \
- else \
- *(volatile uint8_t *)(LCD_IO_FUNCTION) = d;
-/* rs==0 -> write instruction to LCD_IO_FUNCTION */
-/* rs==1 -> write data to LCD_IO_DATA */
-#endif
-
-/*************************************************************************
-Low-level function to read byte from LCD controller
-Input: rs 1: read data
- 0: read busy flag / address counter
-Returns: byte read from LCD controller
-*************************************************************************/
-#if LCD_IO_MODE
-static uint8_t lcd_read(uint8_t rs) {
- uint8_t data;
-
- if (rs)
- lcd_rs_high(); /* RS=1: read data */
- else
- lcd_rs_low(); /* RS=0: read busy flag */
- lcd_rw_high(); /* RW=1 read mode */
-
- if ((&LCD_DATA0_PORT == &LCD_DATA1_PORT) && (&LCD_DATA1_PORT == &LCD_DATA2_PORT) && (&LCD_DATA2_PORT == &LCD_DATA3_PORT) && (LCD_DATA0_PIN == 0) && (LCD_DATA1_PIN == 1) && (LCD_DATA2_PIN == 2) && (LCD_DATA3_PIN == 3)) {
- DDR(LCD_DATA0_PORT) &= 0xF0; /* configure data pins as input */
-
- lcd_e_high();
- lcd_e_delay();
- data = PIN(LCD_DATA0_PORT) << 4; /* read high nibble first */
- lcd_e_low();
-
- lcd_e_delay(); /* Enable 500ns low */
-
- lcd_e_high();
- lcd_e_delay();
- data |= PIN(LCD_DATA0_PORT) & 0x0F; /* read low nibble */
- lcd_e_low();
- } else {
- /* configure data pins as input */
- DDR(LCD_DATA0_PORT) &= ~_BV(LCD_DATA0_PIN);
- DDR(LCD_DATA1_PORT) &= ~_BV(LCD_DATA1_PIN);
- DDR(LCD_DATA2_PORT) &= ~_BV(LCD_DATA2_PIN);
- DDR(LCD_DATA3_PORT) &= ~_BV(LCD_DATA3_PIN);
-
- /* read high nibble first */
- lcd_e_high();
- lcd_e_delay();
- data = 0;
- if (PIN(LCD_DATA0_PORT) & _BV(LCD_DATA0_PIN)) data |= 0x10;
- if (PIN(LCD_DATA1_PORT) & _BV(LCD_DATA1_PIN)) data |= 0x20;
- if (PIN(LCD_DATA2_PORT) & _BV(LCD_DATA2_PIN)) data |= 0x40;
- if (PIN(LCD_DATA3_PORT) & _BV(LCD_DATA3_PIN)) data |= 0x80;
- lcd_e_low();
-
- lcd_e_delay(); /* Enable 500ns low */
-
- /* read low nibble */
- lcd_e_high();
- lcd_e_delay();
- if (PIN(LCD_DATA0_PORT) & _BV(LCD_DATA0_PIN)) data |= 0x01;
- if (PIN(LCD_DATA1_PORT) & _BV(LCD_DATA1_PIN)) data |= 0x02;
- if (PIN(LCD_DATA2_PORT) & _BV(LCD_DATA2_PIN)) data |= 0x04;
- if (PIN(LCD_DATA3_PORT) & _BV(LCD_DATA3_PIN)) data |= 0x08;
- lcd_e_low();
- }
- return data;
-}
-#else
-# define lcd_read(rs) (rs) ? *(volatile uint8_t *)(LCD_IO_DATA + LCD_IO_READ) : *(volatile uint8_t *)(LCD_IO_FUNCTION + LCD_IO_READ)
-/* rs==0 -> read instruction from LCD_IO_FUNCTION */
-/* rs==1 -> read data from LCD_IO_DATA */
-#endif
-
-/*************************************************************************
-loops while lcd is busy, returns address counter
-*************************************************************************/
-static uint8_t lcd_waitbusy(void)
-
-{
- register uint8_t c;
-
- /* wait until busy flag is cleared */
- while ((c = lcd_read(0)) & (1 << LCD_BUSY)) {
- }
-
- /* the address counter is updated 4us after the busy flag is cleared */
- delay(LCD_DELAY_BUSY_FLAG);
-
- /* now read the address counter */
- return (lcd_read(0)); // return address counter
-
-} /* lcd_waitbusy */
-
-/*************************************************************************
-Move cursor to the start of next line or to the first line if the cursor
-is already on the last line.
-*************************************************************************/
-static inline void lcd_newline(uint8_t pos) {
- register uint8_t addressCounter;
-
-#if LCD_LINES == 1
- addressCounter = 0;
-#endif
-#if LCD_LINES == 2
- if (pos < (LCD_START_LINE2))
- addressCounter = LCD_START_LINE2;
- else
- addressCounter = LCD_START_LINE1;
-#endif
-#if LCD_LINES == 4
-# if KS0073_4LINES_MODE
- if (pos < LCD_START_LINE2)
- addressCounter = LCD_START_LINE2;
- else if ((pos >= LCD_START_LINE2) && (pos < LCD_START_LINE3))
- addressCounter = LCD_START_LINE3;
- else if ((pos >= LCD_START_LINE3) && (pos < LCD_START_LINE4))
- addressCounter = LCD_START_LINE4;
- else
- addressCounter = LCD_START_LINE1;
-# else
- if (pos < LCD_START_LINE3)
- addressCounter = LCD_START_LINE2;
- else if ((pos >= LCD_START_LINE2) && (pos < LCD_START_LINE4))
- addressCounter = LCD_START_LINE3;
- else if ((pos >= LCD_START_LINE3) && (pos < LCD_START_LINE2))
- addressCounter = LCD_START_LINE4;
- else
- addressCounter = LCD_START_LINE1;
-# endif
-#endif
- lcd_command((1 << LCD_DDRAM) + addressCounter);
-
-} /* lcd_newline */
-
-/*
-** PUBLIC FUNCTIONS
-*/
-
-/*************************************************************************
-Send LCD controller instruction command
-Input: instruction to send to LCD controller, see HD44780 data sheet
-Returns: none
-*************************************************************************/
-void lcd_command(uint8_t cmd) {
- lcd_waitbusy();
- lcd_write(cmd, 0);
-}
-
-/*************************************************************************
-Send data byte to LCD controller
-Input: data to send to LCD controller, see HD44780 data sheet
-Returns: none
-*************************************************************************/
-void lcd_data(uint8_t data) {
- lcd_waitbusy();
- lcd_write(data, 1);
-}
-
-/*************************************************************************
-Set cursor to specified position
-Input: x horizontal position (0: left most position)
- y vertical position (0: first line)
-Returns: none
-*************************************************************************/
-void lcd_gotoxy(uint8_t x, uint8_t y) {
-#if LCD_LINES == 1
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE1 + x);
-#endif
-#if LCD_LINES == 2
- if (y == 0)
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE1 + x);
- else
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE2 + x);
-#endif
-#if LCD_LINES == 4
- if (y == 0)
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE1 + x);
- else if (y == 1)
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE2 + x);
- else if (y == 2)
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE3 + x);
- else /* y==3 */
- lcd_command((1 << LCD_DDRAM) + LCD_START_LINE4 + x);
-#endif
-
-} /* lcd_gotoxy */
-
-/*************************************************************************
-*************************************************************************/
-int lcd_getxy(void) { return lcd_waitbusy(); }
-
-/*************************************************************************
-Clear display and set cursor to home position
-*************************************************************************/
-void lcd_clrscr(void) { lcd_command(1 << LCD_CLR); }
-
-/*************************************************************************
-Set cursor to home position
-*************************************************************************/
-void lcd_home(void) { lcd_command(1 << LCD_HOME); }
-
-/*************************************************************************
-Display character at current cursor position
-Input: character to be displayed
-Returns: none
-*************************************************************************/
-void lcd_putc(char c) {
- uint8_t pos;
-
- pos = lcd_waitbusy(); // read busy-flag and address counter
- if (c == '\n') {
- lcd_newline(pos);
- } else {
-#if LCD_WRAP_LINES == 1
-# if LCD_LINES == 1
- if (pos == LCD_START_LINE1 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE1, 0);
- }
-# elif LCD_LINES == 2
- if (pos == LCD_START_LINE1 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE2, 0);
- } else if (pos == LCD_START_LINE2 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE1, 0);
- }
-# elif LCD_LINES == 4
- if (pos == LCD_START_LINE1 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE2, 0);
- } else if (pos == LCD_START_LINE2 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE3, 0);
- } else if (pos == LCD_START_LINE3 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE4, 0);
- } else if (pos == LCD_START_LINE4 + LCD_DISP_LENGTH) {
- lcd_write((1 << LCD_DDRAM) + LCD_START_LINE1, 0);
- }
-# endif
- lcd_waitbusy();
-#endif
- lcd_write(c, 1);
- }
-
-} /* lcd_putc */
-
-/*************************************************************************
-Display string without auto linefeed
-Input: string to be displayed
-Returns: none
-*************************************************************************/
-void lcd_puts(const char *s)
-/* print string on lcd (no auto linefeed) */
-{
- register char c;
-
- while ((c = *s++)) {
- lcd_putc(c);
- }
-
-} /* lcd_puts */
-
-/*************************************************************************
-Display string from program memory without auto linefeed
-Input: string from program memory be be displayed
-Returns: none
-*************************************************************************/
-void lcd_puts_p(const char *progmem_s)
-/* print string from program memory on lcd (no auto linefeed) */
-{
- register char c;
-
- while ((c = pgm_read_byte(progmem_s++))) {
- lcd_putc(c);
- }
-
-} /* lcd_puts_p */
-
-/*************************************************************************
-Initialize display and select type of cursor
-Input: dispAttr LCD_DISP_OFF