PSRam 驅(qū)動(dòng)包括兩層:硬件訪(fǎng)問(wèn)層(HAL)和 RT-Thread 的適配層。
HAL 提供用于訪(fǎng)問(wèn) psram 外設(shè)寄存器的基本 API。 有關(guān)詳細(xì)信息,請(qǐng)參閱 psram HAL 的 API 文檔。
適配層提供硬件初始接口。 初始化后,用作sram存儲(chǔ)器。
驅(qū)動(dòng)配置
硬件驅(qū)動(dòng)僅使用一個(gè)實(shí)例,其基地址為 0x60000000,不可更改。 它可以使用 menuconfig 工具為每個(gè)項(xiàng)目啟用,通常保存在 C 頭文件中。 默認(rèn)情況下,配置保存為 rtconfig.h。
下面的例子顯示了在一個(gè)項(xiàng)目頭文件中定義的標(biāo)志,項(xiàng)目是啟用 PSRAM 控制器并設(shè)置它的內(nèi)存大?。ㄒ?MB 為單位)。 步驟選擇配置:
- 在項(xiàng)目下的命令中輸入“menuconfig”
- 選擇“RTOS —>”
- 選擇“On-chip Peripheral Driver—>”
- 選擇“Enable PSRAM —>” 使用 psram 驅(qū)動(dòng),定義宏BSP_USING_PSRAM
- 輸入“PSram full chip size(MB)” 以MB為單位設(shè)置psram內(nèi)存大小,定義宏P(guān)SRAM_FULL_SIZE
#define BSP_USING_PSRAM
#define PSRAM_FULL_SIZE 4
配置完成后,用戶(hù)需要在所有需要訪(fǎng)問(wèn)驅(qū)動(dòng)程序的源代碼中包含頭文件。
內(nèi)存地址和初始接口
使用 psram 內(nèi)存時(shí),其基地址定義在內(nèi)存映射中:
#define PSRAM_BASE (0x60000000)
初始接口,使用psram前調(diào)用一次。
使用 PSRAM
初始化后,PSRAM 內(nèi)存可以像普通的 sram 內(nèi)存一樣被 CPU 和 DMA 訪(fǎng)問(wèn),如下所示:
rt_psram_init();
#define PSRAM_BASE_ADDR PSRAM_BASE
int *buf = (int *)PSRAM_BASE_ADDR;
int i;
for(i=0; i<1000; i++)
buf[i] = i*6543;
int value = *buf;
int *src = (int *)PSRAM_BASE_ADDR;
int *dst = (int *)(PSRAM_BASE_ADDR + 0x100000);
memcpy(dst, src, 1000);
...