瀏覽代碼

add: 支持psram,并作为lua内存使用. 另完善conf_bsp.h的说明注释

Wendal Chen 4 年之前
父節點
當前提交
1ed02718e5
共有 3 個文件被更改,包括 57 次插入45 次删除
  1. 9 25
      app/main.c
  2. 48 12
      app/port/luat_conf_bsp.h
  3. 0 8
      platform/arch/xt804/bsp/board_init.c

+ 9 - 25
app/main.c

@@ -16,6 +16,7 @@
 #include "tls_sys.h"
 #include "wm_ram_config.h"
 #include "wm_internal_flash.h"
+#include "wm_psram.h"
 
 #include "FreeRTOS.h"
 
@@ -36,10 +37,14 @@ static uint8_t __attribute__((aligned(4))) heap_ext[LUAT_HEAP_SIZE - 128*1024] =
 #endif
 
 static void luat_start(void *sdata){
+#ifdef LUAT_USE_PSRAM
+	bpool((void*)0x30000000, 4*1024*1024);
+#else
 	bpool((void*)0x20028000, 128*1024);
 	#if (LUAT_HEAP_SIZE > 128*1024)
 	bpool((void*)heap_ext, LUAT_HEAP_SIZE - 128*1024);
 	#endif
+#endif
 	luat_main();
 }
 
@@ -135,36 +140,15 @@ TLS_FLASH_END_ADDR             =		  (0x80FFFFFUL);
     tls_param_init(); /*add param to init sysparam_lock sem*/
 #endif
 
-#if 0
+// 如要使用psram,启用以下代码,并重新编译sdk
+#ifdef LUAT_USE_PSRAM
 	// 首先, 初始化psram相关引脚
-	printf("==============================\n");
-	printf("CALL wm_psram_config(1)\n");
 	wm_psram_config(1);
 	// 然后初始化psram的寄存器
-	printf("CALL psram_init()\n");
-	psram_init(PSRAM_QPI); // 如果失败, 再试试PSRAM_SPI
-	uint8_t* psram_ptr = (uint8_t*)(PSRAM_ADDR_START);
-	// memset + memcheck
-	memset(psram_ptr, 0x00, PSRAM_SIZE_BYTE);
-	for (size_t psram_pos = 0; psram_pos < PSRAM_SIZE_BYTE; psram_pos++)
-	{
-		if (psram_ptr[psram_pos] != 0x00) {
-			printf("PSRAM memcheck 0x00 fail at %08X %02X\n", PSRAM_ADDR_START + psram_pos, psram_ptr[psram_pos]);
-			break;
-		}
-	}
-	memset(psram_ptr, 0x3A, PSRAM_SIZE_BYTE);
-	for (size_t psram_pos = 0; psram_pos < PSRAM_SIZE_BYTE; psram_pos++)
-	{
-		if (psram_ptr[psram_pos] != 0x3A) {
-			printf("PSRAM memcheck 0x3A fail at %08X %02X\n", PSRAM_ADDR_START + psram_pos, psram_ptr[psram_pos]);
-			break;
-		}
-	}
-	printf("==============================\n");
+	psram_init(PSRAM_QPI);
+	//uint8_t* psram_ptr = (uint8_t*)(PSRAM_ADDR_START);
 #endif
 	
-	
 #ifdef USE_LUATOS
 #ifdef LUAT_USE_LVGL
 	lv_init();

+ 48 - 12
app/port/luat_conf_bsp.h

@@ -4,17 +4,24 @@
 
 #define LUAT_BSP_VERSION "V0004"
 
-#define AIR101
+// Air101 与 Air103 的Flash大小有差异,需要区分
+#define AIR103
 
+// 文件系统大小, 一般不需要修改
+// 若需要增加,必须等于 (112+64*N), 其中N为正整数.
 #define FLASH_FS_REGION_SIZE 112
 
+// 将少许核心方法放入内存, 对性能有少许影响
 #define LUAT_FAST_RAMRUN __attribute__((section (".ram_run")))
-// #define LV_ATTRIBUTE_FAST_MEM __attribute__((section (".ram_run")))
 
+//----------------------------------
+// 使用VFS(虚拟文件系统)和内置库文件, 必须启用
 #define LUAT_USE_FS_VFS 1
-
 #define LUAT_USE_VFS_INLINE_LIB 1
+//----------------------------------
 
+//----------------------------
+// 外设,按需启用, 最起码启用uart和wdt库
 #define LUAT_USE_UART 1
 #define LUAT_USE_GPIO 1
 #define LUAT_USE_I2C  1
@@ -24,36 +31,51 @@
 #define LUAT_USE_WDT  1
 #define LUAT_USE_PM  1
 #define LUAT_USE_MCU  1
-#define LUAT_USE_HWTIMER  1
+// hwtimer库对lua代码没多少用处,通常禁用
+// #define LUAT_USE_HWTIMER  1
 #define LUAT_USE_RTC 1
+// SDIO 仅支持TF/SD卡的挂载
 // #define LUAT_USE_SDIO 1
-#define LUAT_USE_LCDSEG 1
+// 段码屏/段式屏, 按需启用
+// #define LUAT_USE_LCDSEG 1
 
+//----------------------------
+// 常用工具库, 按需启用, cjson和pack是强烈推荐启用的
 #define LUAT_USE_CRYPTO  1
 #define LUAT_USE_CJSON  1
 #define LUAT_USE_ZBUFF  1
 #define LUAT_USE_PACK  1
 // #define LUAT_USE_GNSS  1
-#define LUAT_USE_FS  1
-#define LUAT_USE_SENSOR  1
-#define LUAT_USE_SFUD  1
+// #define LUAT_USE_FS  1
+// #define LUAT_USE_SENSOR  1
+// #define LUAT_USE_SFUD  1
 // #define LUAT_USE_STATEM 1
 
-#define LUAT_USE_GTFONT 1
-#define LUAT_USE_GTFONT_UTF8
+//----------------------------
+// 高通字体, 需配合芯片使用
+// #define LUAT_USE_GTFONT 1
+// #define LUAT_USE_GTFONT_UTF8
 
+//----------------------------
+// 高级功能, 其中shell是推荐启用, 除非你打算uart0也读数据
 #define LUAT_USE_SHELL 1
+// NIMBLE 是蓝牙功能, 名为BLE, 但绝非低功耗.
 // #define LUAT_USE_NIMBLE 1
+// FDB 提供kv数据库, 与nvm库类似
 // #define LUAT_USE_FDB 1
+// 多虚拟机支持,实验性,一般不启用
 // #define LUAT_USE_VMX 1
 
 //---------------------
 // UI
+// LCD  是彩屏, 若使用LVGL就必须启用LCD
 #define LUAT_USE_LCD
-#define LUAT_USE_EINK
+// EINK 是墨水屏
+// #define LUAT_USE_EINK
 
 //---------------------
 // U8G2
+// 单色屏, 支持i2c/spi
 // #define LUAT_USE_DISP 
 // #define LUAT_USE_U8G2
 // #define U8G2_USE_SH1106
@@ -70,15 +92,29 @@
 // #define LV_FONT_OPPOSANS_M_8
 // #define LV_FONT_OPPOSANS_M_10
 
+// -------------------------------------
+// PSRAM
+// 需要外挂PSRAM芯片, 否则不要启用, 必死机
+// air101虽然支持psram,但与spi存在复用冲突
+// air103支持psram与spi同时使用,复用不冲突
+// #define LUAT_USE_PSRAM 1
+// LVGL推荐把部分方法放入内存, 按需采用
+// #define LV_ATTRIBUTE_FAST_MEM __attribute__((section (".ram_run")))
+// ROTABLE技术是节省内存的关键技术, 启用PSRAM后内存不缺, 禁用可提高性能
+// #define LUAT_CONF_DISABLE_ROTABLE 1
+//---------------------------------------
+
+
 //---------------------
 // LVGL
+// 主推的UI库, 功能强大但API繁琐
 #define LUAT_USE_LVGL
 #define LV_DISP_DEF_REFR_PERIOD 30
 #define LUAT_LV_DEBUG 0
 
 #define LV_MEM_CUSTOM 1
 
-#define LUAT_USE_LVGL_INDEV 1
+#define LUAT_USE_LVGL_INDEV 1 // 输入设备
 
 #define LUAT_USE_LVGL_ARC   //圆弧 无依赖
 #define LUAT_USE_LVGL_BAR   //进度条 无依赖

+ 0 - 8
platform/arch/xt804/bsp/board_init.c

@@ -104,12 +104,4 @@ void board_init(void)
 	uart1Init(115200);
 	set_printf_port(1);	
 #endif
-// 如要使用psram,启用以下代码,并重新编译sdk
-#if 0
-	// 首先, 初始化psram相关引脚
-	wm_psram_config(1);
-	// 然后初始化psram的寄存器
-	psram_init(PSRAM_QPI);
-	//uint8_t* psram_ptr = (uint8_t*)(PSRAM_ADDR_START);
-#endif
 }