gossamer 0.0.0
a very lightweight app framework for SAMD and SAML chips
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1
5/*
6 Cribbed from the Castor & Pollux Gemini firmware:
7 https://github.com/wntrblm/Castor_and_Pollux/
8 Copyright (c) 2021 Alethea Katherine Flowers.
9 Published under the standard MIT License.
10 Full text available at: https://opensource.org/licenses/MIT
11*/
12
13#pragma once
14
15/* Routines for interacting with SPI devices. */
16
17#include <stdint.h>
18#include <stdbool.h>
19#include <stddef.h>
20
21typedef enum {
22 SPI_MODE_0 = 0,
23 SPI_MODE_1,
24 SPI_MODE_2,
25 SPI_MODE_3,
26} spi_mode_t;
27
28typedef enum {
29 SPI_DOPO_0_SCK_1 = 0,
30 SPI_DOPO_2_SCK_3,
31 SPI_DOPO_3_SCK_1,
32 SPI_DOPO_0_SCK_3,
33} spi_dopo_t;
34
35typedef enum {
36 SPI_DIPO_0 = 0,
37 SPI_DIPO_1,
38 SPI_DIPO_2,
39 SPI_DIPO_3,
40 SPI_DIPO_NONE = 0xff
41} spi_dipo_t;
42
43void spi_init(spi_mode_t mode, uint32_t baud);
44
45void spi_enable(void);
46
47uint8_t spi_transfer(uint8_t data);
48
49void spi_disable(void);
50
51void spi_init_instance(uint8_t sercom, spi_dopo_t dopo, spi_dipo_t dipo, spi_mode_t mode, uint32_t baud);
52
53void spi_enable_instance(uint8_t sercom);
54
55uint8_t spi_transfer_instance(uint8_t sercom, uint8_t data);
56
57void spi_disable_instance(uint8_t sercom);