main.c 5.3 KB

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