libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
ch32_spi_def.hpp
1#pragma once
2
3#include "libxr.hpp"
4#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
5
6typedef enum
7{
8#if defined(SPI1)
9 CH32_SPI1,
10#endif
11#if defined(SPI2)
12 CH32_SPI2,
13#endif
14#if defined(SPI3)
15 CH32_SPI3,
16#endif
17 CH32_SPI_NUMBER,
18 CH32_SPI_ID_ERROR
19} ch32_spi_id_t;
20
21static constexpr uint8_t CH32_SPI_APB_MAP[] = {
22#if defined(SPI1)
23 2,
24#endif
25#if defined(SPI2)
26 1,
27#endif
28#if defined(SPI3)
29 1,
30#endif
31};
32
33static constexpr uint32_t CH32_SPI_RCC_PERIPH_MAP[] = {
34#if defined(SPI1)
35 RCC_APB2Periph_SPI1,
36#endif
37#if defined(SPI2)
38 RCC_APB1Periph_SPI2,
39#endif
40#if defined(SPI3)
41 RCC_APB1Periph_SPI3,
42#endif
43};
44
45static constexpr uint32_t CH32_SPI_RCC_PERIPH_MAP_DMA[] = {
46#if defined(SPI1)
47 RCC_AHBPeriph_DMA1,
48#endif
49#if defined(SPI2)
50 RCC_AHBPeriph_DMA1,
51#endif
52#if defined(SPI3)
53 RCC_AHBPeriph_DMA2,
54#endif
55};
56
57static constexpr uint32_t CH32_SPI_TX_DMA_IT_MAP[] = {
58#if defined(SPI1)
59 DMA1_IT_TC3,
60#endif
61#if defined(SPI2)
62 DMA1_IT_TC5,
63#endif
64#if defined(SPI3)
65 DMA2_IT_TC2,
66#endif
67};
68
69static constexpr uint32_t CH32_SPI_RX_DMA_IT_MAP[] = {
70#if defined(SPI1)
71 DMA1_IT_TC2,
72#endif
73#if defined(SPI2)
74 DMA1_IT_TC4,
75#endif
76#if defined(SPI3)
77 DMA2_IT_TC1,
78#endif
79};
80
81static DMA_Channel_TypeDef *const CH32_SPI_TX_DMA_CHANNEL_MAP[] = {
82#if defined(SPI1)
83 DMA1_Channel3,
84#endif
85#if defined(SPI2)
86 DMA1_Channel5,
87#endif
88#if defined(SPI3)
89 DMA2_Channel2,
90#endif
91};
92
93static DMA_Channel_TypeDef *const CH32_SPI_RX_DMA_CHANNEL_MAP[] = {
94#if defined(SPI1)
95 DMA1_Channel2,
96#endif
97#if defined(SPI2)
98 DMA1_Channel4,
99#endif
100#if defined(SPI3)
101 DMA2_Channel1,
102#endif
103};
104
105static constexpr IRQn_Type CH32_SPI_IRQ_MAP[] = {
106#if defined(SPI1)
107 SPI1_IRQn,
108#endif
109#if defined(SPI2)
110 SPI2_IRQn,
111#endif
112#if defined(SPI3)
113 SPI3_IRQn,
114#endif
115};
116
117ch32_spi_id_t CH32_SPI_GetID(SPI_TypeDef *addr);
118SPI_TypeDef *CH32_SPI_GetInstanceID(ch32_spi_id_t);