snickerdoodle Platform Controller
firmware for STM32F0 platform controller
sd_spi_bridge.h
Go to the documentation of this file.
1 
46 #ifndef __SD_SPI_BRIDGE_H
47 #define __SD_SPI_BRIDGE_H
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
56 #define SD_SPBR_NDEV (3)
57 
58 #define SD_SPBR_I2C_STATUS ((uint8_t)(1 << 0))
59 #define SD_SPBR_LED_STATUS ((uint8_t)(1 << 1))
60 #define SD_SPBR_UART_STATUS ((uint8_t)(1 << 2))
61 
62 
63 #define SD_SPBR_DEV_MASK (0xF8)
64 
65 #define SD_SPBR_I2C_DEV (0x80)
66 
67 
68 #define SD_SPBR_CMD_MASK (0xE0)
69 
70 #define SD_SPBR_I2C_RW_CMD (0xA0)
71 
72 #define SD_SPBR_I2C_READ_TRANS ((uint8_t)(1 << 2))
73 #define SD_SPBR_I2C_ADDR_10BIT ((uint8_t)(1 << 3))
74 #define SD_SPBR_I2C_FREQ_400K ((uint8_t)(1 << 4))
75 
76 
77 
78 #define SD_SPBR_NULL_DEV { 0, NULL, NULL }
79 #define SD_SPBR_NULL_OP { 0, NULL, NULL }
80 
81 
82 
83 enum sd_spbr_state {
84  SD_SPBR_READ_DEVICE,
85  SD_SPBR_READ_CMD,
86  SD_SPBR_IN_PROCESS
87 };
88 
89 
94 struct sd_spbr_cmd {
95  uint8_t opcode;
96  void (*start)(uint8_t *data);
97  void (*run)(uint8_t *data);
98  void (*end)(uint8_t *data);
99 };
100 
101 
106 struct sd_spbr_dev {
107  uint8_t id;
109  struct sd_spbr_cmd *cmds;
110  void (*dev_start)(uint8_t *data);
111 };
112 
113 
118 struct sd_spbr {
119  SPI_HandleTypeDef *spi;
121  struct sd_spbr_dev *devs;
122  enum sd_spbr_state state;
123 };
124 
125 
126 extern struct sd_spbr spi2_spbr;
127 
128 void sd_spbr_init(struct sd_spbr *spbr, SPI_HandleTypeDef *spi);
129 void sd_spbr_irqhandler(struct sd_spbr *spbr);
130 
136 #ifdef __cplusplus
137 }
138 #endif
139 #else
140 #error "Multiple inclusion of sd_spi_bridge.h"
141 #endif /* __SD_SPI_BRIDGE_H */
142 
143 /*
144  * END OF FILE [sd_spi_bridge.h]
145  */
struct sd_spbr_dev * devs
Definition: sd_spi_bridge.h:120
enum sd_spbr_state state
Definition: sd_spi_bridge.h:121
void sd_spbr_irqhandler(struct sd_spbr *spbr)
SPI Bridge Interrupt Handler Handle interrupt events on the SPI peripheral.
Definition: sd_spi_bridge.c:162
SPI bridge structure.
Definition: sd_spi_bridge.h:117
SPI bridge device structure.
Definition: sd_spi_bridge.h:105
struct sd_spbr_cmd * cmds
Definition: sd_spi_bridge.h:108
SPI bridge device operation structure.
Definition: sd_spi_bridge.h:93
struct sd_spbr_dev * curr_dev
Definition: sd_spi_bridge.h:119
uint8_t id
Definition: sd_spi_bridge.h:106
void sd_spbr_init(struct sd_spbr *spbr, SPI_HandleTypeDef *spi)
SPI Bridge Initialize.
Definition: sd_spi_bridge.c:135
void(* dev_start)(uint8_t *data)
Definition: sd_spi_bridge.h:109
struct sd_spbr_cmd * curr_cmd
Definition: sd_spi_bridge.h:107