#define _AVR_IO_H_
#define __ASSEMBLER__
-#include "avr/iom324.h"
+#include "avr/iom324p.h"
+
+/* borken avr-libc missing these declarations :/ */
+/* The one from 324a are also wrong, like, I'm embarassed for whomever
+ * put that in... */
+#ifndef LFUSE_DEFAULT
+#define LFUSE_DEFAULT 0 // (FUSE_CKDIV8 & FUSE_SUT1 & FUSE_SUT0 & FUSE_CKSEL3 & FUSE_CKSEL2 & FUSE_CKSEL0)
+#define HFUSE_DEFAULT 0 // (FUSE_JTAGEN & FUSE_SPIEN & FUSE_BOOTSZ1 & FUSE_BOOTSZ0)
+#define EFUSE_DEFAULT (0xFF)
+#endif
+
// instantiate the new core
#include "sim_megax4.h"
}
avr_kind_t mega324 = {
- .names = { "atmega324", "atmega324p", "atmega324pa" },
+ .names = { "atmega324", "atmega324p" },
.make = make
};
--- /dev/null
+/*
+ sim_mega324.c
+
+ Copyright 2008, 2009 Michel Pollet <buserror@gmail.com>
+
+ This file is part of simavr.
+
+ simavr 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 3 of the License, or
+ (at your option) any later version.
+
+ simavr 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 simavr. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "sim_avr.h"
+
+#define SIM_MMCU "atmega324a"
+#define SIM_CORENAME mcu_mega324a
+
+#define _AVR_IO_H_
+#define __ASSEMBLER__
+#include "avr/iom324pa.h"
+// instantiate the new core
+#include "sim_megax4.h"
+
+static avr_t * make()
+{
+ return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
+}
+
+avr_kind_t mega324a = {
+ .names = { "atmega324a", "atmega324pa" },
+ .make = make
+};
+
}
},
#endif
+#ifdef MSTR0 /* xx4a and xx4pa series */
+ AVR_SPIX_DECLARE(0, PRR0, PRSPI),
+#else
AVR_SPI_DECLARE(PRR0, PRSPI),
+#endif
.twi = {
.disabled = AVR_IO_REGBIT(PRR0,PRTWI),
void avr_spi_init(avr_t * avr, avr_spi_t * port);
+#define AVR_SPIX_DECLARE(_name, _prr, _prspi) \
+ .spi = { \
+ .name = '0' + _name,\
+ .disabled = AVR_IO_REGBIT(_prr, _prspi), \
+ \
+ .r_spdr = SPDR ## _name, \
+ .r_spcr = SPCR ## _name, \
+ .r_spsr = SPSR ## _name, \
+ \
+ .spe = AVR_IO_REGBIT(SPCR ## _name, SPE ## _name), \
+ .mstr = AVR_IO_REGBIT(SPCR ## _name, MSTR ## _name), \
+ \
+ .spr = { AVR_IO_REGBIT(SPCR ## _name, SPR0 ## _name), \
+ AVR_IO_REGBIT(SPCR ## _name, SPR1 ## _name), \
+ AVR_IO_REGBIT(SPSR ## _name, SPI2X ## _name) }, \
+ .spi = { \
+ .enable = AVR_IO_REGBIT(SPCR ## _name, SPIE ## _name), \
+ .raised = AVR_IO_REGBIT(SPSR ## _name, SPIF ## _name), \
+ .vector = SPI_STC_vect, \
+ }, \
+ }
+
+
#define AVR_SPI_DECLARE(_prr, _prspi) \
.spi = { \
.disabled = AVR_IO_REGBIT(_prr, _prspi), \