board.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. * Copyright (c) 2006-2019, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-09-05 qinweizhong add support for tae32
  9. */
  10. #include "board.h"
  11. #define _SCB_BASE (0xE000E010UL)
  12. #define _SYSTICK_CTRL (*(rt_uint32_t *)(_SCB_BASE + 0x0))
  13. #define _SYSTICK_LOAD (*(rt_uint32_t *)(_SCB_BASE + 0x4))
  14. #define _SYSTICK_VAL (*(rt_uint32_t *)(_SCB_BASE + 0x8))
  15. #define _SYSTICK_CALIB (*(rt_uint32_t *)(_SCB_BASE + 0xC))
  16. #define _SYSTICK_PRI (*(rt_uint8_t *)(0xE000ED23UL))
  17. static uint32_t _SysTick_Config(rt_uint32_t ticks)
  18. {
  19. if ((ticks - 1) > 0xFFFFFF)
  20. {
  21. return 1;
  22. }
  23. _SYSTICK_LOAD = ticks - 1;
  24. _SYSTICK_PRI = 0x01;
  25. _SYSTICK_VAL = 0;
  26. _SYSTICK_CTRL = 0x07;
  27. return 0;
  28. }
  29. #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
  30. #define RT_HEAP_SIZE 2048
  31. static uint32_t rt_heap[RT_HEAP_SIZE];/* heap default size: 4K(1024 * 4)*/
  32. rt_weak void *rt_heap_begin_get(void)
  33. {
  34. return rt_heap;
  35. }
  36. rt_weak void *rt_heap_end_get(void)
  37. {
  38. return rt_heap + RT_HEAP_SIZE;
  39. }
  40. #endif
  41. /**
  42. * This function will initial your board.
  43. */
  44. void rt_hw_board_init()
  45. {
  46. /* System Clock Update */
  47. SystemClock_Config();
  48. /* System Tick Configuration */
  49. LL_Init();
  50. _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
  51. /* Call components board initial (use INIT_BOARD_EXPORT()) */
  52. #ifdef RT_USING_COMPONENTS_INIT
  53. rt_components_board_init();
  54. #endif
  55. #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
  56. rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
  57. #endif
  58. #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
  59. rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  60. #endif
  61. }
  62. void SysTick_Handler(void)
  63. {
  64. /* enter interrupt */
  65. rt_interrupt_enter();
  66. rt_tick_increase();
  67. /* leave interrupt */
  68. rt_interrupt_leave();
  69. }
  70. void rt_hw_console_output(const char *str)
  71. {
  72. rt_size_t i = 0, size = 0;
  73. char a = '\r';
  74. size = rt_strlen(str);
  75. for (i = 0; i < size; i++)
  76. {
  77. if (*(str + i) == '\n')
  78. {
  79. /*Wait TXFIFO to be no full*/
  80. while (!__LL_UART_IsTxFIFONotFull(UART0)) {};
  81. /*Send data to UART*/
  82. __LL_UART_TxBuf9bits_Write(UART0, (uint16_t)a);
  83. }
  84. while (!__LL_UART_IsTxFIFONotFull(UART0)) {};
  85. /*Send data to UART*/
  86. __LL_UART_TxBuf9bits_Write(UART0, (uint16_t)(*(str + i)));
  87. }
  88. }
  89. char rt_hw_console_getchar(void)
  90. {
  91. /* note: ch default value < 0 */
  92. int ch = -1;
  93. if (__LL_UART_IsDatReady(UART0))
  94. {
  95. /* receive data */
  96. ch = __LL_UART_RxBuf9bits_Read(UART0);
  97. }
  98. else
  99. {
  100. rt_thread_mdelay(10);
  101. }
  102. return ch;
  103. }
  104. void SystemClock_Config(void)
  105. {
  106. LL_StatusETypeDef ret;
  107. SYSCTRL_SysclkUserCfgTypeDef sysclk_cfg;
  108. /*FPLL0 Init*/
  109. LL_FPLL_Init(FPLL0);
  110. /*SYSCLK Clock Config*/
  111. sysclk_cfg.sysclk_src = SYSCLK_SRC_PLL0DivClk;
  112. sysclk_cfg.sysclk_freq = 90000000UL;
  113. sysclk_cfg.pll0clk_src = PLLCLK_SRC_XOSC;
  114. sysclk_cfg.pll0clk_src_freq = HSE_VALUE;
  115. sysclk_cfg.apb0_clk_div = SYSCTRL_CLK_DIV_1;
  116. sysclk_cfg.apb1_clk_div = SYSCTRL_CLK_DIV_1;
  117. ret = LL_SYSCTRL_SysclkInit(SYSCTRL, &sysclk_cfg);
  118. if (ret == LL_OK)
  119. {
  120. SystemCoreClockUpdate(sysclk_cfg.sysclk_freq);
  121. }
  122. /*eFlash Memory CLK Source and Div Config*/
  123. LL_SYSCTRL_EFLASH_ClkCfg(EFLASH_CLK_SRC_PLL0DivClk, SYSCTRL_CLK_DIV_9);
  124. }