main.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "rf_phy_driver.h"
  2. #include "global_config.h"
  3. #include "jump_function.h"
  4. #include "ll_debug.h"
  5. #include "ll_hw_drv.h"
  6. #include "ll_sleep.h"
  7. //#include "touch_key.h"
  8. #include "uart.h"
  9. #include "gpio.h"
  10. #include "clock.h"
  11. #include "common.h"
  12. #include "log.h"
  13. #include "adc.h"
  14. #include "pwrmgr.h"
  15. #include "string.h"
  16. #include "phy_console.h"
  17. extern void ble_main(void);
  18. extern void hal_rom_code_ini(void);
  19. extern int app_main(void);
  20. extern void init_config(void);
  21. extern uint32_t pclk;
  22. #define LARGE_HEAP_SIZE 6*1024
  23. uint8 g_largeHeap[LARGE_HEAP_SIZE];
  24. volatile uint8 g_clk32K_config;
  25. static void rf_wakeup_handler(void){
  26. NVIC_SetPriority((IRQn_Type)BB_IRQ, IRQ_PRIO_REALTIME);
  27. NVIC_SetPriority((IRQn_Type)CP_TIMER_IRQ, IRQ_PRIO_HIGH);
  28. }
  29. void cons_callback(uint16_t cmd_id, uint8_t argc, char** argv)
  30. {
  31. LOG("cmd id is 0x%x, parameter num is %d\n", cmd_id, argc);
  32. for(uint8_t i = 0; i<argc; i++){
  33. LOG("param %d : %s\n", i, argv[i]);
  34. }
  35. }
  36. const cons_cmd_t s_cmd_list[] = {
  37. {0x0010, "cmd1"},
  38. {0x0011, "cmd2"},
  39. {0x0012, "cmd3"},
  40. {0x0013, "cmd4"},
  41. {0x0014, "cmd5"},
  42. {0x0015, "cmd6"},
  43. {0, NULL},
  44. };
  45. static void hal_init(void)
  46. {
  47. // 用于初始化系统。 它可能根据“g_system_clk”的值设置系统时钟,“g_system_clk”是提供给函数的参数。 系统时钟可配置为使用特定频率或源,例如 32MHz 的 DLL(延迟锁定环)或 16MHz 的外部晶体。
  48. hal_system_init(g_system_clk);//(SYS_CLK_DLL_32M);//SYS_CLK_XTAL_16M); //system init
  49. //hal_rtc_clock_config(CLK_32K_XTAL);//CLK_32K_RCOSC)CLK_32K_XTAL;
  50. // 配置实时时钟
  51. hal_rtc_clock_config(g_clk32K_config);
  52. // 用于配置各种 SRAM(静态随机存取存储器)块的保留。 这可能确保特定 SRAM 块在低功耗模式或睡眠状态期间保留其内容。
  53. hal_pwrmgr_RAM_retention(RET_SRAM0|RET_SRAM1|RET_SRAM2|RET_SRAM3|RET_SRAM4);
  54. //LOG_INIT();
  55. // 初始化gpio模块
  56. hal_gpio_init();
  57. // 初始化 ADC(模数转换器)模块
  58. hal_adc_init();
  59. // 初始化log模块
  60. console_init(s_cmd_list, cons_callback);
  61. LOG("all driver init OK!\n");
  62. }
  63. static void hal_rfphy_init(void)
  64. {
  65. //============config the txPower
  66. g_rfPhyTxPower = RF_PHY_TX_POWER_0DBM ;
  67. //============config BLE_PHY TYPE
  68. g_rfPhyPktFmt = PKT_FMT_BLE1M;
  69. //============config RF Frequency Offset
  70. g_rfPhyFreqOffSet =RF_PHY_FREQ_FOFF_00KHZ;
  71. hal_rom_code_ini();
  72. //Quick Boot setting and
  73. *(volatile uint32_t *) 0x4000f01c = 0x0000004; // 3'b1xx: 62.5us. control bits for main digital part reset wait time after power up charge pump.
  74. //========= low currernt setting IO init
  75. //========= pull all io to gnd by default
  76. *(volatile uint32_t *) 0x4000f008 = 0x36db6db6;//P00 - P09 pull down
  77. *(volatile uint32_t *) 0x4000f00c = 0x36db6db6;//P10 - P19 pull down
  78. *(volatile uint32_t *) 0x4000f010 = 0x36db6db6;//P20 - P29 pull down
  79. *(volatile uint32_t *) 0x4000f014 = 0xb0c3edb6;//P30 - P34 pull donw
  80. //========= UART RX Pull up
  81. hal_gpio_pull_set(P10,WEAK_PULL_UP);
  82. DCDC_CONFIG_SETTING(0x0d);
  83. NVIC_SetPriority((IRQn_Type)BB_IRQ, IRQ_PRIO_REALTIME);
  84. NVIC_SetPriority((IRQn_Type)CP_TIMER_IRQ, IRQ_PRIO_HIGH);
  85. hal_pwrmgr_register(MOD_USR0, NULL, rf_wakeup_handler);
  86. }
  87. int main(void)
  88. {
  89. g_system_clk = SYS_CLK_DLL_48M;
  90. g_clk32K_config = CLK_32K_XTAL;//CLK_32K_XTAL,CLK_32K_RCOSC
  91. osal_mem_set_heap((osalMemHdr_t *)g_largeHeap, LARGE_HEAP_SIZE);
  92. init_config();
  93. hal_pwrmgr_init();
  94. hal_rfphy_init();
  95. LOG("start hal_init!\n");
  96. hal_init();
  97. app_main();
  98. }