aboutsummaryrefslogtreecommitdiff
path: root/include/usi-spi.h
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2016-06-30 17:18:49 +0200
committerKarel Kočí <cynerd@email.cz>2016-06-30 17:18:49 +0200
commit4e1ce86af16307bf7d42657db07600867c7c4bbc (patch)
tree5d0dfddea221c91545a9bd57ac7face5842291d4 /include/usi-spi.h
parent147cb7f0e67d1f3c3274effa5476607e24664182 (diff)
downloadavr-ioe-4e1ce86af16307bf7d42657db07600867c7c4bbc.tar.gz
avr-ioe-4e1ce86af16307bf7d42657db07600867c7c4bbc.tar.bz2
avr-ioe-4e1ce86af16307bf7d42657db07600867c7c4bbc.zip
Add some more progress and split non-core functionality to separate repo
More progress to implementation and some changes in project it self. This library will implement only drivers for features on chip but nothing else. Everything connected externally is now in separate repository.
Diffstat (limited to 'include/usi-spi.h')
-rw-r--r--include/usi-spi.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/include/usi-spi.h b/include/usi-spi.h
new file mode 100644
index 0000000..18534ab
--- /dev/null
+++ b/include/usi-spi.h
@@ -0,0 +1,66 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <stdint.h>
+
+#include "mcu/mcu_def.h"
+
+#ifndef _IOE_USI_SPI_H_
+#define _IOE_USI_SPI_H_
+
+#ifndef MCUSUPPORT_USI
+#error "No USI interface is known on your mcu."
+#endif
+
+enum usiSpiMode {
+ // Device is initialized as master
+ USI_SPI_MODE_MASTER,
+ // Device is initialized as slave
+ USI_SPI_MODE_SLAVE,
+};
+
+/*
+ * Initialize SPI on USI device
+ *
+ * Parameters:
+ * mode - Specify mode of SPI interface
+ */
+void usi_spi_init(enum usiSpiMode mode);
+/*
+ * Returns NULL when device is not busy.
+ * When device is busy return values in non-zero.
+ */
+int8_t usi_spi_busy(void);
+/*
+ * Blocks processor until device is not busy.
+ */
+void usi_spi_join(void);
+/*
+ * Swap bytes with slave over SPI.
+ * This function blocks execution until device isn't busy.
+ * WARNING: Invoke this only when interface is initialized in MASTER mode.
+ */
+uint8_t usi_spi_send(uint8_t data);
+/*
+ * Swaps byte with slave over SPI.
+ * This function isn't checking if device is busy, but it's not blocking execution.
+ * WARNING: Invoke this only when interface is initialized in MASTER mode.
+ */
+uint8_t usi_spi_transfer(uint8_t data);
+/*
+ * Expose data for next master request.
+ * Please don't use this when device is busy.
+ * Best place to call this is usi_spi_retrieve().
+ * WARNING: Invoke this only when interface is initialized in SLAVE mode.
+ */
+void usi_spi_expose(uint8_t data);
+
+/*
+ * This function must be defined by user.
+ * This function is called every time transfer is finished.
+ * And until return from this function interrupts are disabled.
+ * WARNING: Please define this function in your code.
+ */
+void usi_spi_receive(uint8_t data);
+
+
+#endif /* _IOE_USI_SPI_H_ */