Skip to content

Commit aa819ea

Browse files
committed
stm32f469 added ltdc instance
1 parent 9f61e1f commit aa819ea

1 file changed

Lines changed: 268 additions & 0 deletions

File tree

targets/chip/stm32f469/io/ltdc.hpp

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
#ifndef KLIB_STM32F469_LTDC_HPP
2+
#define KLIB_STM32F469_LTDC_HPP
3+
4+
#include <cstdint>
5+
6+
#include <targets/core/stm/stm32f4xx/ltdc.hpp>
7+
#include <klib/io/peripheral.hpp>
8+
9+
#include <io/pins.hpp>
10+
11+
namespace klib::stm32f469::io::periph::detail::ltdc {
12+
enum class mode {
13+
r0, r1, r2, r3, r4, r5, r6, r7,
14+
g0, g1, g2, g3, g4, g5, g6, g7,
15+
b0, b1, b2, b3, b4, b5, b6, b7,
16+
clk, hsync, vsync, de
17+
};
18+
19+
template <typename Pin, mode Type, typename Periph>
20+
struct ltdc {
21+
// pin of the peripheral
22+
using pin = Pin;
23+
24+
// type of the pin
25+
constexpr static mode type = Type;
26+
27+
// alternate function
28+
using periph = Periph;
29+
};
30+
}
31+
32+
// global peripherals, not affected by chip package
33+
namespace klib::stm32f469::io::periph {
34+
template <
35+
typename Clk = pins::package::tfbga216::ph3,
36+
typename Hsync = pins::package::tfbga216::pd5,
37+
typename Vsync = pins::package::tfbga216::pe4,
38+
typename De = pins::package::tfbga216::pc4,
39+
typename R0 = pins::package::tfbga216::pb3,
40+
typename R1 = pins::package::tfbga216::pj4,
41+
typename R2 = pins::package::tfbga216::pb14,
42+
typename R3 = pins::package::tfbga216::pn14,
43+
typename R4 = pins::package::tfbga216::pc15,
44+
typename R5 = pins::package::tfbga216::pb15,
45+
typename R6 = pins::package::tfbga216::pf15,
46+
typename R7 = pins::package::tfbga216::pj15,
47+
typename G0 = pins::package::tfbga216::pb1,
48+
typename G1 = pins::package::tfbga216::pb2,
49+
typename G2 = pins::package::tfbga216::pe12,
50+
typename G3 = pins::package::tfbga216::pb10,
51+
typename G4 = pins::package::tfbga216::pb9,
52+
typename G5 = pins::package::tfbga216::pe14,
53+
typename G6 = pins::package::tfbga216::pd14,
54+
typename G7 = pins::package::tfbga216::pa8,
55+
typename B0 = pins::package::tfbga216::pa1,
56+
typename B1 = pins::package::tfbga216::pb9,
57+
typename B2 = pins::package::tfbga216::pb11,
58+
typename B3 = pins::package::tfbga216::pb8,
59+
typename B4 = pins::package::tfbga216::pc3,
60+
typename B5 = pins::package::tfbga216::pd3,
61+
typename B6 = pins::package::tfbga216::pa7,
62+
typename B = pins::package::tfbga216::pb47
63+
>
64+
struct ltdc0 {
65+
// peripheral id (e.g ltdc0, ltdc1)
66+
constexpr static uint32_t id = 0;
67+
68+
// interrupt id (including the arm vector table)
69+
constexpr static uint32_t interrupt_id = 16 + 88;
70+
71+
// error interrupt id (including the arm vector table)
72+
constexpr static uint32_t error_interrupt_id = 16 + 89;
73+
74+
// port to the LTDC hardware
75+
static inline LTDC_Type *const port = LTDC;
76+
77+
using clk_pins = std::tuple<
78+
detail::ltdc::ltdc<pins::package::tfbga216::ph3, detail::ltdc::mode::clk, io::detail::alternate::>,
79+
detail::ltdc::ltdc<pins::package::tfbga216::pj14, detail::ltdc::mode::clk, io::detail::alternate::>,
80+
detail::ltdc::ltdc<pins::package::tfbga216::pp11, detail::ltdc::mode::clk, io::detail::alternate::>
81+
>;
82+
using hsync_pins = std::tuple<
83+
detail::ltdc::ltdc<pins::package::tfbga216::pd5, detail::ltdc::mode::hsync, io::detail::alternate::>,
84+
detail::ltdc::ltdc<pins::package::tfbga216::pe3, detail::ltdc::mode::hsync, io::detail::alternate::>,
85+
detail::ltdc::ltdc<pins::package::tfbga216::ph15, detail::ltdc::mode::hsync, io::detail::alternate::>
86+
>;
87+
using vsync_pins = std::tuple<
88+
detail::ltdc::ltdc<pins::package::tfbga216::pe4, detail::ltdc::mode::vsync, io::detail::alternate::>,
89+
detail::ltdc::ltdc<pins::package::tfbga216::pg3, detail::ltdc::mode::vsync, io::detail::alternate::>,
90+
detail::ltdc::ltdc<pins::package::tfbga216::pn4, detail::ltdc::mode::vsync, io::detail::alternate::>
91+
>;
92+
using de_pins = std::tuple<
93+
detail::ltdc::ltdc<pins::package::tfbga216::pc4, detail::ltdc::mode::de, io::detail::alternate::>,
94+
detail::ltdc::ltdc<pins::package::tfbga216::pl1, detail::ltdc::mode::de, io::detail::alternate::>,
95+
detail::ltdc::ltdc<pins::package::tfbga216::pr12, detail::ltdc::mode::de, io::detail::alternate::>
96+
>;
97+
98+
// red data lines
99+
using r0_pins = std::tuple<
100+
detail::ltdc::ltdc<pins::package::tfbga216::pb3, detail::ltdc::mode::r0, io::detail::alternate::>,
101+
detail::ltdc::ltdc<pins::package::tfbga216::pg4, detail::ltdc::mode::r0, io::detail::alternate::>,
102+
detail::ltdc::ltdc<pins::package::tfbga216::pk4, detail::ltdc::mode::r0, io::detail::alternate::>
103+
>;
104+
using r1_pins = std::tuple<
105+
detail::ltdc::ltdc<pins::package::tfbga216::pj4, detail::ltdc::mode::r1, io::detail::alternate::>,
106+
detail::ltdc::ltdc<pins::package::tfbga216::pp2, detail::ltdc::mode::r1, io::detail::alternate::>,
107+
detail::ltdc::ltdc<pins::package::tfbga216::pr6, detail::ltdc::mode::r1, io::detail::alternate::>
108+
>;
109+
using r2_pins = std::tuple<
110+
detail::ltdc::ltdc<pins::package::tfbga216::pb14, detail::ltdc::mode::r2, io::detail::alternate::>,
111+
detail::ltdc::ltdc<pins::package::tfbga216::pn2, detail::ltdc::mode::r2, io::detail::alternate::>,
112+
detail::ltdc::ltdc<pins::package::tfbga216::pp14, detail::ltdc::mode::r2, io::detail::alternate::>,
113+
detail::ltdc::ltdc<pins::package::tfbga216::pr7, detail::ltdc::mode::r2, io::detail::alternate::>
114+
>;
115+
using r3_pins = std::tuple<
116+
detail::ltdc::ltdc<pins::package::tfbga216::pn14, detail::ltdc::mode::r3, io::detail::alternate::>,
117+
detail::ltdc::ltdc<pins::package::tfbga216::pp7, detail::ltdc::mode::r3, io::detail::alternate::>,
118+
detail::ltdc::ltdc<pins::package::tfbga216::pr5, detail::ltdc::mode::r3, io::detail::alternate::>
119+
>;
120+
using r4_pins = std::tuple<
121+
detail::ltdc::ltdc<pins::package::tfbga216::pc15, detail::ltdc::mode::r4, io::detail::alternate::>,
122+
detail::ltdc::ltdc<pins::package::tfbga216::pn8, detail::ltdc::mode::r4, io::detail::alternate::>,
123+
detail::ltdc::ltdc<pins::package::tfbga216::pp4, detail::ltdc::mode::r4, io::detail::alternate::>,
124+
detail::ltdc::ltdc<pins::package::tfbga216::pp15, detail::ltdc::mode::r4, io::detail::alternate::>
125+
>;
126+
using r5_pins = std::tuple<
127+
detail::ltdc::ltdc<pins::package::tfbga216::pb15, detail::ltdc::mode::r5, io::detail::alternate::>,
128+
detail::ltdc::ltdc<pins::package::tfbga216::pm2, detail::ltdc::mode::r5, io::detail::alternate::>,
129+
detail::ltdc::ltdc<pins::package::tfbga216::pm9, detail::ltdc::mode::r5, io::detail::alternate::>,
130+
detail::ltdc::ltdc<pins::package::tfbga216::pn15, detail::ltdc::mode::r5, io::detail::alternate::>
131+
>;
132+
using r6_pins = std::tuple<
133+
detail::ltdc::ltdc<pins::package::tfbga216::pf15, detail::ltdc::mode::r6, io::detail::alternate::>,
134+
detail::ltdc::ltdc<pins::package::tfbga216::pm14, detail::ltdc::mode::r6, io::detail::alternate::>,
135+
detail::ltdc::ltdc<pins::package::tfbga216::pm15, detail::ltdc::mode::r6, io::detail::alternate::>,
136+
detail::ltdc::ltdc<pins::package::tfbga216::pr4, detail::ltdc::mode::r6, io::detail::alternate::>
137+
>;
138+
using r7_pins = std::tuple<
139+
detail::ltdc::ltdc<pins::package::tfbga216::pj15, detail::ltdc::mode::r7, io::detail::alternate::>,
140+
detail::ltdc::ltdc<pins::package::tfbga216::pr6, detail::ltdc::mode::r7, io::detail::alternate::>,
141+
detail::ltdc::ltdc<pins::package::tfbga216::pr11, detail::ltdc::mode::r7, io::detail::alternate::>
142+
>;
143+
144+
// green data lines
145+
using g0_pins = std::tuple<
146+
detail::ltdc::ltdc<pins::package::tfbga216::pb1, detail::ltdc::mode::g0, io::detail::alternate::>,
147+
detail::ltdc::ltdc<pins::package::tfbga216::pr4, detail::ltdc::mode::g0, io::detail::alternate::>
148+
>;
149+
using g1_pins = std::tuple<
150+
detail::ltdc::ltdc<pins::package::tfbga216::pb2, detail::ltdc::mode::g1, io::detail::alternate::>,
151+
detail::ltdc::ltdc<pins::package::tfbga216::pr5, detail::ltdc::mode::g1, io::detail::alternate::>
152+
>;
153+
using g2_pins = std::tuple<
154+
detail::ltdc::ltdc<pins::package::tfbga216::pe12, detail::ltdc::mode::g2, io::detail::alternate::>,
155+
detail::ltdc::ltdc<pins::package::tfbga216::pg4, detail::ltdc::mode::g2, io::detail::alternate::>,
156+
detail::ltdc::ltdc<pins::package::tfbga216::pp3, detail::ltdc::mode::g2, io::detail::alternate::>
157+
>;
158+
using g3_pins = std::tuple<
159+
detail::ltdc::ltdc<pins::package::tfbga216::pb10, detail::ltdc::mode::g3, io::detail::alternate::>,
160+
detail::ltdc::ltdc<pins::package::tfbga216::pc8, detail::ltdc::mode::g3, io::detail::alternate::>,
161+
detail::ltdc::ltdc<pins::package::tfbga216::pe13, detail::ltdc::mode::g3, io::detail::alternate::>,
162+
detail::ltdc::ltdc<pins::package::tfbga216::pp10, detail::ltdc::mode::g3, io::detail::alternate::>
163+
>;
164+
using g4_pins = std::tuple<
165+
detail::ltdc::ltdc<pins::package::tfbga216::pb9, detail::ltdc::mode::g4, io::detail::alternate::>,
166+
detail::ltdc::ltdc<pins::package::tfbga216::pd13, detail::ltdc::mode::g4, io::detail::alternate::>,
167+
detail::ltdc::ltdc<pins::package::tfbga216::ph4, detail::ltdc::mode::g4, io::detail::alternate::>,
168+
detail::ltdc::ltdc<pins::package::tfbga216::pp12, detail::ltdc::mode::g4, io::detail::alternate::>
169+
>;
170+
using g5_pins = std::tuple<
171+
detail::ltdc::ltdc<pins::package::tfbga216::pe14, detail::ltdc::mode::g5, io::detail::alternate::>,
172+
detail::ltdc::ltdc<pins::package::tfbga216::ph4, detail::ltdc::mode::g5, io::detail::alternate::>,
173+
detail::ltdc::ltdc<pins::package::tfbga216::pr13, detail::ltdc::mode::g5, io::detail::alternate::>
174+
>;
175+
using g6_pins = std::tuple<
176+
detail::ltdc::ltdc<pins::package::tfbga216::pd14, detail::ltdc::mode::g6, io::detail::alternate::>,
177+
detail::ltdc::ltdc<pins::package::tfbga216::pf3, detail::ltdc::mode::g6, io::detail::alternate::>,
178+
detail::ltdc::ltdc<pins::package::tfbga216::pg15, detail::ltdc::mode::g6, io::detail::alternate::>
179+
>;
180+
using g7_pins = std::tuple<
181+
detail::ltdc::ltdc<pins::package::tfbga216::pa8, detail::ltdc::mode::g7, io::detail::alternate::>,
182+
detail::ltdc::ltdc<pins::package::tfbga216::pc11, detail::ltdc::mode::g7, io::detail::alternate::>,
183+
detail::ltdc::ltdc<pins::package::tfbga216::pc14, detail::ltdc::mode::g7, io::detail::alternate::>,
184+
detail::ltdc::ltdc<pins::package::tfbga216::ph14, detail::ltdc::mode::g7, io::detail::alternate::>
185+
>;
186+
187+
// blue data lines
188+
using b0_pins = std::tuple<
189+
detail::ltdc::ltdc<pins::package::tfbga216::pa1, detail::ltdc::mode::b0, io::detail::alternate::>,
190+
detail::ltdc::ltdc<pins::package::tfbga216::pa4, detail::ltdc::mode::b0, io::detail::alternate::>,
191+
detail::ltdc::ltdc<pins::package::tfbga216::pb10, detail::ltdc::mode::b0, io::detail::alternate::>
192+
>;
193+
using b1_pins = std::tuple<
194+
detail::ltdc::ltdc<pins::package::tfbga216::pb9, detail::ltdc::mode::b1, io::detail::alternate::>,
195+
detail::ltdc::ltdc<pins::package::tfbga216::pc7, detail::ltdc::mode::b1, io::detail::alternate::>
196+
>;
197+
using b2_pins = std::tuple<
198+
detail::ltdc::ltdc<pins::package::tfbga216::pb11, detail::ltdc::mode::b2, io::detail::alternate::>,
199+
detail::ltdc::ltdc<pins::package::tfbga216::pc8, detail::ltdc::mode::b2, io::detail::alternate::>,
200+
detail::ltdc::ltdc<pins::package::tfbga216::pc9, detail::ltdc::mode::b2, io::detail::alternate::>,
201+
detail::ltdc::ltdc<pins::package::tfbga216::pr2, detail::ltdc::mode::b2, io::detail::alternate::>
202+
>;
203+
using b3_pins = std::tuple<
204+
detail::ltdc::ltdc<pins::package::tfbga216::pb8, detail::ltdc::mode::b3, io::detail::alternate::>,
205+
detail::ltdc::ltdc<pins::package::tfbga216::pd10, detail::ltdc::mode::b3, io::detail::alternate::>,
206+
detail::ltdc::ltdc<pins::package::tfbga216::pk15, detail::ltdc::mode::b3, io::detail::alternate::>
207+
>;
208+
using b4_pins = std::tuple<
209+
detail::ltdc::ltdc<pins::package::tfbga216::pc3, detail::ltdc::mode::b4, io::detail::alternate::>,
210+
detail::ltdc::ltdc<pins::package::tfbga216::pc7, detail::ltdc::mode::b4, io::detail::alternate::>,
211+
detail::ltdc::ltdc<pins::package::tfbga216::pd8, detail::ltdc::mode::b4, io::detail::alternate::>,
212+
detail::ltdc::ltdc<pins::package::tfbga216::pr10, detail::ltdc::mode::b4, io::detail::alternate::>
213+
>;
214+
using b5_pins = std::tuple<
215+
detail::ltdc::ltdc<pins::package::tfbga216::pd3, detail::ltdc::mode::b5, io::detail::alternate::>,
216+
detail::ltdc::ltdc<pins::package::tfbga216::pd7, detail::ltdc::mode::b5, io::detail::alternate::>,
217+
detail::ltdc::ltdc<pins::package::tfbga216::pr2, detail::ltdc::mode::b5, io::detail::alternate::>
218+
>;
219+
using b6_pins = std::tuple<
220+
detail::ltdc::ltdc<pins::package::tfbga216::pa7, detail::ltdc::mode::b6, io::detail::alternate::>,
221+
detail::ltdc::ltdc<pins::package::tfbga216::pc6, detail::ltdc::mode::b6, io::detail::alternate::>,
222+
detail::ltdc::ltdc<pins::package::tfbga216::pd6, detail::ltdc::mode::b6, io::detail::alternate::>
223+
>;
224+
using b7_pins = std::tuple<
225+
detail::ltdc::ltdc<pins::package::tfbga216::pb4, detail::ltdc::mode::b7, io::detail::alternate::>,
226+
detail::ltdc::ltdc<pins::package::tfbga216::pc5, detail::ltdc::mode::b7, io::detail::alternate::>,
227+
detail::ltdc::ltdc<pins::package::tfbga216::pd4, detail::ltdc::mode::b7, io::detail::alternate::>
228+
>;
229+
230+
// control signals
231+
using clk = std::tuple_element<klib::io::peripheral::get_index<Clk, clk_pins>(), clk_pins>::type;
232+
using hsync = std::tuple_element<klib::io::peripheral::get_index<Hsync, hsync_pins>(), hsync_pins>::type;
233+
using vsync = std::tuple_element<klib::io::peripheral::get_index<Vsync, vsync_pins>(), vsync_pins>::type;
234+
using de = std::tuple_element<klib::io::peripheral::get_index<De, de_pins>(), de_pins>::type;
235+
236+
// red data lines
237+
using r0 = std::tuple_element<klib::io::peripheral::get_index<R0, r0_pins>(), r0_pins>::type;
238+
using r1 = std::tuple_element<klib::io::peripheral::get_index<R1, r1_pins>(), r1_pins>::type;
239+
using r2 = std::tuple_element<klib::io::peripheral::get_index<R2, r2_pins>(), r2_pins>::type;
240+
using r3 = std::tuple_element<klib::io::peripheral::get_index<R3, r3_pins>(), r3_pins>::type;
241+
using r4 = std::tuple_element<klib::io::peripheral::get_index<R4, r4_pins>(), r4_pins>::type;
242+
using r5 = std::tuple_element<klib::io::peripheral::get_index<R5, r5_pins>(), r5_pins>::type;
243+
using r6 = std::tuple_element<klib::io::peripheral::get_index<R6, r6_pins>(), r6_pins>::type;
244+
using r7 = std::tuple_element<klib::io::peripheral::get_index<R7, r7_pins>(), r7_pins>::type;
245+
246+
// green data lines
247+
using g0 = std::tuple_element<klib::io::peripheral::get_index<G0, g0_pins>(), g0_pins>::type;
248+
using g1 = std::tuple_element<klib::io::peripheral::get_index<G1, g1_pins>(), g1_pins>::type;
249+
using g2 = std::tuple_element<klib::io::peripheral::get_index<G2, g2_pins>(), g2_pins>::type;
250+
using g3 = std::tuple_element<klib::io::peripheral::get_index<G3, g3_pins>(), g3_pins>::type;
251+
using g4 = std::tuple_element<klib::io::peripheral::get_index<G4, g4_pins>(), g4_pins>::type;
252+
using g5 = std::tuple_element<klib::io::peripheral::get_index<G5, g5_pins>(), g5_pins>::type;
253+
using g6 = std::tuple_element<klib::io::peripheral::get_index<G6, g6_pins>(), g6_pins>::type;
254+
using g7 = std::tuple_element<klib::io::peripheral::get_index<G7, g7_pins>(), g7_pins>::type;
255+
256+
// blue data lines
257+
using b0 = std::tuple_element<klib::io::peripheral::get_index<B0, b0_pins>(), b0_pins>::type;
258+
using b1 = std::tuple_element<klib::io::peripheral::get_index<B1, b1_pins>(), b1_pins>::type;
259+
using b2 = std::tuple_element<klib::io::peripheral::get_index<B2, b2_pins>(), b2_pins>::type;
260+
using b3 = std::tuple_element<klib::io::peripheral::get_index<B3, b3_pins>(), b3_pins>::type;
261+
using b4 = std::tuple_element<klib::io::peripheral::get_index<B4, b4_pins>(), b4_pins>::type;
262+
using b5 = std::tuple_element<klib::io::peripheral::get_index<B5, b5_pins>(), b5_pins>::type;
263+
using b6 = std::tuple_element<klib::io::peripheral::get_index<B6, b6_pins>(), b6_pins>::type;
264+
using b7 = std::tuple_element<klib::io::peripheral::get_index<B7, b7_pins>(), b7_pins>::type;
265+
};
266+
}
267+
268+
#endif

0 commit comments

Comments
 (0)