main.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #include "wm_include.h"
  2. #include "wm_gpio_afsel.h"
  3. #include "wm_psram.h"
  4. #include "wm_internal_flash.h"
  5. #ifdef USE_LUATOS
  6. #include "string.h"
  7. #include "luat_fs.h"
  8. #include "bget.h"
  9. #include "luat_base.h"
  10. #include "luat_msgbus.h"
  11. #include "luat_pm.h"
  12. #include <string.h>
  13. #include "wm_irq.h"
  14. #include "tls_sys.h"
  15. #include "wm_ram_config.h"
  16. #include "wm_internal_flash.h"
  17. #include "FreeRTOS.h"
  18. #define LUAT_LOG_TAG "main"
  19. #include "luat_log.h"
  20. #ifndef LUAT_HEAP_SIZE
  21. #define LUAT_HEAP_SIZE (128+48)*1024
  22. #endif
  23. #if (LUAT_HEAP_SIZE > 128*1024)
  24. static uint8_t __attribute__((aligned(4))) heap_ext[LUAT_HEAP_SIZE - 128*1024] = {0};
  25. #endif
  26. static void luat_start(void *sdata){
  27. bpool((void*)0x20028000, 128*1024);
  28. #if (LUAT_HEAP_SIZE > 128*1024)
  29. bpool((void*)heap_ext, LUAT_HEAP_SIZE - 128*1024);
  30. #endif
  31. luat_main();
  32. }
  33. #ifdef LUAT_USE_LVGL
  34. #include "lvgl.h"
  35. static void _lvgl_handler(void* args) {
  36. while (1) {
  37. lv_task_handler();
  38. vTaskDelay(10 / (1000 / configTICK_RATE_HZ));
  39. };
  40. }
  41. #define LVGL_TASK_SIZE 512
  42. static OS_STK __attribute__((aligned(4))) LVGLTaskStk[LVGL_TASK_SIZE] = {0};
  43. #endif
  44. #define TASK_START_STK_SIZE 2048
  45. static OS_STK __attribute__((aligned(4))) TaskStartStk[TASK_START_STK_SIZE] = {0};
  46. #endif
  47. int rst_sta = 0;
  48. #ifdef USE_LUATOS
  49. extern unsigned int TLS_FLASH_PARAM_DEFAULT ;
  50. extern unsigned int TLS_FLASH_PARAM1_ADDR ;
  51. extern unsigned int TLS_FLASH_PARAM2_ADDR ;
  52. extern unsigned int TLS_FLASH_PARAM_RESTORE_ADDR ;
  53. extern unsigned int TLS_FLASH_OTA_FLAG_ADDR ;
  54. extern unsigned int TLS_FLASH_END_ADDR ;
  55. #endif
  56. void UserMain(void){
  57. char unique_id [18] = {0};
  58. tls_uart_options_t opt;
  59. opt.baudrate = UART_BAUDRATE_B921600;
  60. opt.charlength = TLS_UART_CHSIZE_8BIT;
  61. opt.flow_ctrl = TLS_UART_FLOW_CTRL_NONE;
  62. opt.paritytype = TLS_UART_PMODE_DISABLED;
  63. opt.stopbits = TLS_UART_ONE_STOPBITS;
  64. tls_uart_port_init(0, &opt, 0);
  65. // 读取开机原因
  66. rst_sta = tls_reg_read32(HR_CLK_RST_STA);
  67. tls_reg_write32(HR_CLK_RST_STA, 0xFF);
  68. #ifdef LUAT_USE_SHELL
  69. luat_shell_poweron(0);
  70. #endif
  71. #ifdef USE_LUATOS
  72. tls_fls_read_unique_id(unique_id);
  73. if (unique_id[1] == 0x10){
  74. printf("I/main auth ok %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X %s\n",
  75. unique_id[0], unique_id[1], unique_id[2], unique_id[3], unique_id[4],
  76. unique_id[5], unique_id[6], unique_id[7], unique_id[8], unique_id[9],
  77. unique_id[10], unique_id[11], unique_id[12], unique_id[13], unique_id[14],unique_id[15],
  78. luat_os_bsp());
  79. }else{
  80. printf("I/main auth ok %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X %s\n",
  81. unique_id[0], unique_id[1], unique_id[2], unique_id[3], unique_id[4],
  82. unique_id[5], unique_id[6], unique_id[7], unique_id[8], unique_id[9],
  83. luat_os_bsp());
  84. }
  85. #endif
  86. #ifdef AIR103
  87. TLS_FLASH_PARAM_DEFAULT = (0x80FB000UL);
  88. TLS_FLASH_PARAM1_ADDR = (0x80FC000UL);
  89. TLS_FLASH_PARAM2_ADDR = (0x80FD000UL);
  90. TLS_FLASH_PARAM_RESTORE_ADDR = (0x80FE000UL);
  91. TLS_FLASH_OTA_FLAG_ADDR = (0x80FF000UL);
  92. TLS_FLASH_END_ADDR = (0x80FFFFFUL);
  93. #endif
  94. #ifdef LUAT_USE_NIMBLE
  95. // TODO 注意, 除了启用LUAT_USE_NIMBTE外
  96. // 1. 修改FreeRTOSConfig.h的configTICK_RATE_HZ为500, 并重新make lib
  97. // 2. 若修改libblehost.a相关代码,需要手工复制bin目录下的文件,拷贝到lib目录.
  98. tls_ft_param_init();
  99. tls_param_load_factory_default();
  100. tls_param_init(); /*add param to init sysparam_lock sem*/
  101. #endif
  102. #if 0
  103. // 首先, 初始化psram相关引脚
  104. printf("==============================\n");
  105. printf("CALL wm_psram_config(1)\n");
  106. wm_psram_config(1);
  107. // 然后初始化psram的寄存器
  108. printf("CALL psram_init()\n");
  109. psram_init(PSRAM_QPI); // 如果失败, 再试试PSRAM_SPI
  110. uint8_t* psram_ptr = (uint8_t*)(PSRAM_ADDR_START);
  111. // memset + memcheck
  112. memset(psram_ptr, 0x00, PSRAM_SIZE_BYTE);
  113. for (size_t psram_pos = 0; psram_pos < PSRAM_SIZE_BYTE; psram_pos++)
  114. {
  115. if (psram_ptr[psram_pos] != 0x00) {
  116. printf("PSRAM memcheck 0x00 fail at %08X %02X\n", PSRAM_ADDR_START + psram_pos, psram_ptr[psram_pos]);
  117. break;
  118. }
  119. }
  120. memset(psram_ptr, 0x3A, PSRAM_SIZE_BYTE);
  121. for (size_t psram_pos = 0; psram_pos < PSRAM_SIZE_BYTE; psram_pos++)
  122. {
  123. if (psram_ptr[psram_pos] != 0x3A) {
  124. printf("PSRAM memcheck 0x3A fail at %08X %02X\n", PSRAM_ADDR_START + psram_pos, psram_ptr[psram_pos]);
  125. break;
  126. }
  127. }
  128. printf("==============================\n");
  129. #endif
  130. #ifdef USE_LUATOS
  131. #ifdef LUAT_USE_LVGL
  132. lv_init();
  133. tls_os_task_create(NULL, NULL,
  134. _lvgl_handler,
  135. NULL,
  136. (void *)LVGLTaskStk, /* task's stack start address */
  137. LVGL_TASK_SIZE * sizeof(u32), /* task's stack size, unit:byte */
  138. 40,
  139. 0);
  140. #endif
  141. tls_os_task_create(NULL, NULL,
  142. luat_start,
  143. NULL,
  144. (void *)TaskStartStk, /* task's stack start address */
  145. TASK_START_STK_SIZE * sizeof(u32), /* task's stack size, unit:byte */
  146. 31,
  147. 0);
  148. #else
  149. printf("hello word\n");
  150. while (1);
  151. #endif
  152. }
  153. #ifndef USE_LUATOS
  154. void vApplicationTickHook( void ) {}
  155. void bpool(void *buffer, long len) {}
  156. #endif