#ifndef AVR_SPI_H_
#define AVR_SPI_H_
-#include "simavr.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "sim_avr.h"
+
+enum {
+ SPI_IRQ_INPUT = 0,
+ SPI_IRQ_OUTPUT,
+ SPI_IRQ_COUNT
+};
+
+// add port number to get the real IRQ
+#define AVR_IOCTL_SPI_GETIRQ(_name) AVR_IOCTL_DEF('s','p','i',(_name))
typedef struct avr_spi_t {
avr_io_t io;
char name;
avr_regbit_t disabled; // bit in the PRR
- uint8_t r_spdr; // data register
- uint8_t r_spcr; // control register
+ avr_io_addr_t r_spdr; // data register
+ avr_io_addr_t r_spcr; // control register
+ avr_io_addr_t r_spsr; // status register
avr_regbit_t spe; // spi enable
- avr_regbit_t dord; // data order
avr_regbit_t mstr; // master/slave
- avr_regbit_t cpol; // clock polarity
- avr_regbit_t cpha; // phase
avr_regbit_t spr[4]; // clock divider
- avr_int_vector_t spi; // spi interupt
+ avr_int_vector_t spi; // spi interrupt
+
+ uint8_t input_data_register;
} avr_spi_t;
void avr_spi_init(avr_t * avr, avr_spi_t * port);
+#ifdef __cplusplus
+};
+#endif
+
#endif /* AVR_SPI_H_ */