bsp.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. static void wdog_enable(void);
  7. void bsp_init(void){
  8. wdog_enable();
  9. debug_periph_mode_set(DEBUG_TMR1_PAUSE, TRUE);
  10. systick_open();
  11. task_ticks_enable();
  12. gpio_pin_init();
  13. shark_uart_init(SHARK_UART0);
  14. }
  15. void system_reboot(void){
  16. NVIC_SystemReset();
  17. }
  18. void systick_close(void)
  19. {
  20. SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  21. }
  22. void systick_open(void)
  23. {
  24. SysTick_Config(SystemCoreClock / 1000);
  25. }
  26. u8 mcu_chip_id(u8 *buff)
  27. {
  28. u32 values[] = { REG32(0x1FFFF7E0), REG32(0x1FFFF7E8), REG32(0x1FFFF7EC), REG32(0x1FFFF7F0) };
  29. memcpy(buff, values, sizeof(values));
  30. return sizeof(values);
  31. }
  32. void wdog_reload(void){
  33. #if CONFIG_DEBUG == 0
  34. wdt_counter_reload();
  35. #endif
  36. }
  37. static void wdog_enable(void)
  38. {
  39. #if CONFIG_DEBUG == 0
  40. /* disable register write protection */
  41. wdt_register_write_enable(TRUE);
  42. /* set the wdt divider value */
  43. wdt_divider_set(WDT_CLK_DIV_4);
  44. /* set reload value
  45. timeout = reload_value * (divider / lick_freq ) (s)
  46. lick_freq = 40000 Hz
  47. divider = 4
  48. reload_value = 30000
  49. timeout = 30000 * (4 / 40000 ) = 3s = 3000ms
  50. */
  51. wdt_reload_value_set(30000 - 1);
  52. /* reload wdt counter */
  53. wdt_counter_reload();
  54. /* enable wdt */
  55. wdt_enable();
  56. #endif
  57. }
  58. int wdog_set_timeout(int wdog_time)
  59. {
  60. return 0;
  61. }