bsp.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "bsp/bsp.h"
  2. #include "bsp/bsp_driver.h"
  3. #include "libs/logger.h"
  4. #include "os/os_types.h"
  5. #include "version.h"
  6. extern void system_clock_config(void);
  7. static void wdog_enable(void);
  8. void bsp_init(void){
  9. system_clock_config();
  10. wdog_enable();
  11. debug_periph_mode_set(DEBUG_TMR1_PAUSE, TRUE);
  12. nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  13. systick_open();
  14. task_ticks_enable();
  15. gpio_pin_init();
  16. shark_uart_init(SHARK_UART0);
  17. }
  18. void system_reboot(void){
  19. NVIC_SystemReset();
  20. }
  21. void systick_close(void)
  22. {
  23. SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  24. }
  25. void systick_open(void)
  26. {
  27. systick_clock_source_config(SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV);
  28. SysTick_Config(system_core_clock / 1000);
  29. NVIC_SetPriority(SysTick_IRQn, 0x00U);
  30. }
  31. u8 mcu_chip_id(u8 *buff)
  32. {
  33. u32 values[] = { REG32(0x1FFFF7E0), REG32(0x1FFFF7E8), REG32(0x1FFFF7EC), REG32(0x1FFFF7F0) };
  34. memcpy(buff, values, sizeof(values));
  35. return sizeof(values);
  36. }
  37. u32 get_mcu_reset_source(void)
  38. {
  39. uint32_t reset_source = CRM->ctrlsts;
  40. CRM->ctrlsts_bit.rstfc = TRUE;
  41. return reset_source;
  42. }
  43. void wdog_reload(void){
  44. #if CONFIG_DEBUG == 0
  45. wdt_counter_reload();
  46. #endif
  47. }
  48. static void wdog_enable(void)
  49. {
  50. #if CONFIG_DEBUG == 0
  51. /* disable register write protection */
  52. wdt_register_write_enable(TRUE);
  53. /* set the wdt divider value */
  54. wdt_divider_set(WDT_CLK_DIV_64);
  55. /* set reload value
  56. timeout = reload_value * (divider / lick_freq ) (s)
  57. lick_freq = 40000 Hz
  58. divider = 4
  59. reload_value = 30000
  60. timeout = 3000 * (64 / 40000 ) = 4.8s = 4800ms
  61. */
  62. wdt_reload_value_set(3000 - 1);
  63. /* reload wdt counter */
  64. wdt_counter_reload();
  65. /* enable wdt */
  66. wdt_enable();
  67. #endif
  68. }
  69. int wdog_set_timeout(int wdog_time)
  70. {
  71. return 0;
  72. }