#ifndef __AVR_EEPROM_H__
#define __AVR_EEPROM_H__
-#include "simavr.h"
+#include "sim_avr.h"
typedef struct avr_eeprom_t {
avr_io_t io;
avr_regbit_t eere; // eeprom read enable
avr_int_vector_t ready; // EERIE vector
-
- uint32_t eempe_clear_timer;
- uint32_t ready_raise_timer;
} avr_eeprom_t;
void avr_eeprom_init(avr_t * avr, avr_eeprom_t * port);
},\
}
+/*
+ * no EEPM registers in atmega128
+ */
+#define AVR_EEPROM_DECLARE_NOEEPM(_vector) \
+ .eeprom = {\
+ .size = E2END+1,\
+ .r_eearh = EEARH,\
+ .r_eearl = EEARL,\
+ .r_eedr = EEDR,\
+ .r_eecr = EECR,\
+ .eepm = { }, \
+ .eempe = AVR_IO_REGBIT(EECR, EEMWE),\
+ .eepe = AVR_IO_REGBIT(EECR, EEWE),\
+ .eere = AVR_IO_REGBIT(EECR, EERE),\
+ .ready = {\
+ .enable = AVR_IO_REGBIT(EECR, EERIE),\
+ .vector = _vector,\
+ },\
+ }
+
+
+/*
+ * macro definition without a high address bit register,
+ * which is not implemented in some tiny AVRs.
+ */
+
+#define AVR_EEPROM_DECLARE_8BIT(_vector) \
+ .eeprom = {\
+ .size = E2END+1,\
+ .r_eearl = EEARL,\
+ .r_eedr = EEDR,\
+ .r_eecr = EECR,\
+ .eepm = { AVR_IO_REGBIT(EECR, EEPM0), AVR_IO_REGBIT(EECR, EEPM1) },\
+ .eempe = AVR_IO_REGBIT(EECR, EEMPE),\
+ .eepe = AVR_IO_REGBIT(EECR, EEPE),\
+ .eere = AVR_IO_REGBIT(EECR, EERE),\
+ .ready = {\
+ .enable = AVR_IO_REGBIT(EECR, EERIE),\
+ .vector = _vector,\
+ },\
+ }
+
#endif /* __AVR_EEPROM_H__ */