main.c 5.1 KB

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