diff options
author | Nick Brassel <nick@tzarc.org> | 2020-04-29 14:01:20 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-29 14:01:20 +1000 |
commit | b17482c3fdca11788c0863465ed4a7e56a13d0f5 (patch) | |
tree | 83a36cc8f2a755dcbc2821fceea4d11e84501f28 /drivers/chibios/spi_master.h | |
parent | 5b4870c046fa81b5574904cd21e2d13da41cf2e4 (diff) | |
download | qmk_firmware-b17482c3fdca11788c0863465ed4a7e56a13d0f5.tar.gz |
Add SPI master for ChibiOS/ARM. (#8779)
Diffstat (limited to 'drivers/chibios/spi_master.h')
-rw-r--r-- | drivers/chibios/spi_master.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/drivers/chibios/spi_master.h b/drivers/chibios/spi_master.h new file mode 100644 index 000000000..0c18587c9 --- /dev/null +++ b/drivers/chibios/spi_master.h @@ -0,0 +1,78 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * 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 3 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 <https://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <ch.h> +#include <hal.h> +#include <quantum.h> + +#ifndef SPI_DRIVER +# define SPI_DRIVER SPID2 +#endif + +#ifndef SPI_SCK_PIN +# define SPI_SCK_PIN B13 +#endif + +#ifndef SPI_SCK_PAL_MODE +# define SPI_SCK_PAL_MODE 5 +#endif + +#ifndef SPI_MOSI_PIN +# define SPI_MOSI_PIN B15 +#endif + +#ifndef SPI_MOSI_PAL_MODE +# define SPI_MOSI_PAL_MODE 5 +#endif + +#ifndef SPI_MISO_PIN +# define SPI_MISO_PIN B14 +#endif + +#ifndef SPI_MISO_PAL_MODE +# define SPI_MISO_PAL_MODE 5 +#endif + +typedef int16_t spi_status_t; + +#define SPI_STATUS_SUCCESS (0) +#define SPI_STATUS_ERROR (-1) +#define SPI_STATUS_TIMEOUT (-2) + +#define SPI_TIMEOUT_IMMEDIATE (0) +#define SPI_TIMEOUT_INFINITE (0xFFFF) + +#ifdef __cplusplus +extern "C" { +#endif +void spi_init(void); + +bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor); + +spi_status_t spi_write(uint8_t data); + +spi_status_t spi_read(void); + +spi_status_t spi_transmit(const uint8_t *data, uint16_t length); + +spi_status_t spi_receive(uint8_t *data, uint16_t length); + +void spi_stop(void); +#ifdef __cplusplus +} +#endif |