2323 * THE SOFTWARE.
2424 */
2525
26- #include < cstddef>
27-
2826#if !defined(_TIME_STAMP_DAY_)
2927#define _TIME_STAMP_DAY_ 0
3028#endif
3937#error
4038#endif
4139
40+ #if (defined(GD32F4XX) || defined(GD32H7XX)) && !defined(MCU_HAVE_GPIO_TG)
41+ #error
42+ #endif
43+
44+ #include < cstddef>
4245#include < cstring>
4346#include < cstdio>
4447#include < cassert>
6568#include " board_statusled.h"
6669#include " panelled.h"
6770#include " logic_analyzer.h"
71+ #include " gd32_timers.h"
6872
69- #if defined(CONFIG_HAL_USE_SYSTICK)
70- void SystickConfig ();
71- #endif
72-
73- void UdelayInit ();
7473void Gd32AdcInit ();
7574
7675#if defined(GD32H7XX)
7776void CacheEnable ();
7877void MpuConfig ();
7978#endif
8079
81- void Timer5Config ();
82- void Timer6Config ();
83- #if !defined(CONFIG_NET_ENABLE_PTP)
84- #if defined(CONFIG_TIME_USE_TIMER)
85- #if defined(GD32H7XX)
86- void Timer16Config ();
87- #else
88- void Timer7Config ();
89- #endif
90- #endif
91- #endif
92-
9380#if !defined(DISABLE_RTC)
9481#include " hwclock.h"
9582static HwClock hw_clock;
@@ -116,7 +103,7 @@ void Init() {
116103 uart0::Init ();
117104#endif
118105 // From here we console output
119- #if defined (BOARD_DEBUG)
106+ #if defined(BOARD_DEBUG)
120107 putchar (' \n ' );
121108#endif
122109
@@ -128,7 +115,7 @@ void Init() {
128115 // Clear section .dmx
129116 const auto kSize = static_cast <size_t >(&_edmx - &_sdmx);
130117 memset (&_sdmx, 0 , kSize );
131- #if defined (BOARD_DEBUG)
118+ #if defined(BOARD_DEBUG)
132119 printf (" Cleared .dmx at %p, size %u\n " , &_sdmx, kSize );
133120#endif
134121 }
@@ -138,7 +125,7 @@ void Init() {
138125 // Clear section .lightset
139126 const auto kSize = static_cast <size_t >(&_elightset - &_slightset);
140127 memset (&_slightset, 0 , kSize );
141- #if defined (BOARD_DEBUG)
128+ #if defined(BOARD_DEBUG)
142129 printf (" Cleared .lightset at %p, size %u\n " , &_slightset, kSize );
143130#endif
144131 }
@@ -147,7 +134,7 @@ void Init() {
147134 // Clear section .network
148135 const auto kSize = static_cast <size_t >(&_enetwork - &_snetwork);
149136 memset (&_snetwork, 0 , kSize );
150- #if defined (BOARD_DEBUG)
137+ #if defined(BOARD_DEBUG)
151138 printf (" Cleared .network at %p, size %u\n " , &_snetwork, kSize );
152139#endif
153140 }
@@ -156,7 +143,7 @@ void Init() {
156143 // Clear section .pixel
157144 const auto kSize = static_cast <size_t >(&_epixel - &_spixel);
158145 memset (&_spixel, 0 , kSize );
159- #if defined (BOARD_DEBUG)
146+ #if defined(BOARD_DEBUG)
160147 printf (" Cleared .pixel at %p, size %u\n " , &_spixel, kSize );
161148#endif
162149 }
@@ -168,76 +155,35 @@ void Init() {
168155 // clear section .network
169156 const auto kSize = static_cast <size_t >(&_enetwork - &_snetwork);
170157 memset (&_snetwork, 0 , kSize );
171- #if defined (BOARD_DEBUG)
158+ #if defined(BOARD_DEBUG)
172159 printf (" Cleared .network at %p, size %u\n " , &_snetwork, kSize );
173160#endif
174161 }
175162#endif
176163#endif
177164
178- #if defined (BOARD_DEBUG)
165+ #if defined(BOARD_DEBUG)
179166 // Show the AHB and APBx busses frequency
180167 const auto kSys = rcu_clock_freq_get (CK_SYS );
181168 const auto kAhb = rcu_clock_freq_get (CK_AHB );
182169 const auto kApb1 = rcu_clock_freq_get (CK_APB1 );
183170 const auto kApb2 = rcu_clock_freq_get (CK_APB2 );
184- printf (" CK_SYS=%u\n CK_AHB=%u\n CK_APB1=%u\n CK_APB2=%u\n " , kSys , kAhb , kApb1 , kApb2 );
171+ printf (" CK_SYS=%u\n CK_AHB=%u\n CK_APB1=%u\n CK_APB2=%u\n " , static_cast < unsigned >( kSys ), static_cast < unsigned >( kAhb ), static_cast < unsigned >( kApb1 ), static_cast < unsigned >( kApb2 ) );
185172 assert (kSys == MCU_CLOCK_FREQ );
186173 assert (kAhb == AHB_CLOCK_FREQ );
187174 assert (kApb1 == APB1_CLOCK_FREQ );
188175 assert (kApb2 == APB2_CLOCK_FREQ );
189176#if defined(GD32H7XX)
190177 const auto kApb3 = rcu_clock_freq_get (CK_APB3 );
191178 const auto kApb4 = rcu_clock_freq_get (CK_APB4 );
192- printf (" nCK_APB3=%u\n CK_APB4=%u\n " , nAPB3, nAPB4);
179+ printf (" nCK_APB3=%u\n CK_APB4=%u\n " , static_cast < unsigned >( nAPB3), static_cast < unsigned >( nAPB4) );
193180 assert (kApb3 == APB3_CLOCK_FREQ );
194181 assert (kApb4 == APB4_CLOCK_FREQ );
195182#endif
196183#endif
197184
198- /*
199- * Setup the TIMERx
200- */
201-
202- #if defined(GD32H7XX)
203- #elif defined(GD32F4XX)
204- /*
205- * AHB = SYSCLK = 240 MHz (GD32F470), others = 200 MHz
206- * APB1 = AHB / 4 = 50 MHz => APB1PSC = 0b101
207- * APB2 = AHB / 2 = 100 MHz => APB2PSC = 0b100
208- */
209-
210- rcu_timer_clock_prescaler_config (RCU_TIMER_PSC_MUL4 );
211-
212- /*
213- * If APB1PSC/APB2PSC in RCU_CFG0 register is 0b0xx(CK_APBx = CK_AHB),
214- * 0b100(CK_APBx = CK_AHB/2), or 0b101(CK_APBx = CK_AHB/4), the TIMER
215- * clock is equal to CK_AHB(CK_TIMERx = CK_AHB).
216- */
217-
218- /*
219- * TIMER in APB1 domain: CK_TIMERx = AHB = 200 MHz => 240 MHz (GD32F470).
220- * TIMER in APB2 domain: CK_TIMERx = AHB = 200 MHz => 240 MHz (GD32F470).
221- */
222- #else
223- #endif
224-
225- Timer5Config ();
226- Timer6Config ();
227- #if defined(CONFIG_HAL_USE_SYSTICK)
228- SystickConfig ();
229- #endif
230- #if !defined(CONFIG_NET_ENABLE_PTP)
231- #if defined(CONFIG_TIME_USE_TIMER)
232- #if defined(GD32H7XX)
233- Timer16Config ();
234- #else
235- Timer7Config ();
236- #endif
237- #endif
238- #endif
185+ gd32::timers::Start ();
239186
240- UdelayInit ();
241187 Gd32AdcInit ();
242188 Gd32I2cBegin ();
243189#if defined(CONFIG_ENABLE_I2C1)
@@ -261,16 +207,7 @@ void Init() {
261207#endif
262208 bkp_data_write (BKP_DATA_1 , 0x0 );
263209
264- #if defined(CONFIG_HAVE_CRC32_HW)
265- rcu_periph_clock_enable (RCU_CRC );
266- crc_data_register_reset ();
267- #endif
268-
269- /*
270- * Initialize status led, 74hc595 and panel led
271- */
272-
273- #if !defined(CONFIG_LEDBLINK_USE_PANELLED)
210+ // Initialize status led
274211 rcu_periph_clock_enable (LED_BLINK_GPIO_CLK );
275212#if defined(GPIO_INIT)
276213 gpio_init (LED_BLINK_GPIO_PORT , GPIO_MODE_OUT_PP , GPIO_OSPEED_50MHZ , LED_BLINK_PIN );
@@ -279,7 +216,6 @@ void Init() {
279216 gpio_output_options_set (LED_BLINK_GPIO_PORT , GPIO_OTYPE_PP , GPIO_OSPEED , LED_BLINK_PIN );
280217#endif
281218 GPIO_BOP (LED_BLINK_GPIO_PORT ) = LED_BLINK_PIN ;
282- #endif
283219
284220#if defined(PANELLED_595_CS_GPIOx)
285221 rcu_periph_clock_enable (PANELLED_595_CS_RCU_GPIOx);
@@ -301,17 +237,19 @@ void Init() {
301237 logic_analyzer::Init ();
302238
303239#if !defined(CONFIG_NET_ENABLE_PTP)
240+ #if defined(CONFIG_TIME_USE_TIMER) || defined(CONFIG_TIME_USE_SYSTICK)
304241 struct tm tmbuf;
305242 memset (&tmbuf, 0 , sizeof (struct tm ));
306243 tmbuf.tm_mday = _TIME_STAMP_DAY_; // The day of the month, in the range 1 to 31.
307244 tmbuf.tm_mon = _TIME_STAMP_MONTH_ - 1 ; // The number of months since January, in the range 0 to 11.
308245 tmbuf.tm_year = _TIME_STAMP_YEAR_ - 1900 ; // The number of years since 1900.
309246
310247 const auto kSeconds = mktime (&tmbuf);
311- const struct timeval kTv = {kSeconds , 0 };
248+ const struct timeval kTv = {. tv_sec = kSeconds , . tv_usec = 0 };
312249
313250 settimeofday (&kTv , nullptr );
314251#endif
252+ #endif
315253
316254#if !defined(DISABLE_RTC)
317255 HwClock::Get ()->RtcProbe ();
0 commit comments