主题中讨论的其他器件:HALCOGEN
您好、E2E 团队、
我正在阅读许多论坛、这些论坛与我在使用 DMA 的应用中启用高速缓存时遇到的问题有关。
我使用的是 GCC 编译器/链接器、FreeRTOS 和 Halcogen v04.07.00。
我使用专用的 MPU 存储器区域 R8进行 CPU <> DMA 访问。 该区域设置如下:
该区域与区域3重叠、该区域覆盖整个 RAM 存储器、但区域3不可在 Halcogen 中编辑、因此我无法更改区域3的类型和权限:
因此,我想我可以尝试编辑 Halcogen 配置文件(*.DIL),更改以下参数:
driver.system.var.core_mpu_region_3_type.value=normal_OINC_shared
driver.system.var.core_mpu_region_3_type_value.value=0x000C
driver.system.var.core_mpu_region_3_permission.value=PRIV_rw_user_rw_EXEC
driver.system.var.core_mpu_region_3_permission_value=0x0300
这样、当我加载 Halcogen 项目时、现在我可以看到该区域是可共享的(和不可高速缓冲的):
但是、如果我在 Halcogen 设置中启用高速缓存、SPI DMA 只以零的形式发送数据、而如果在 Halcogen 中禁用高速缓存、我可以看到 DMA 的运行正常。
这些是链接器文件的片段、用于将"sharedRAM"段放在"RAM"段的顶部。
/*入口点*/
条目(_c_int00)
/*栈的最高地址*/
_estack = 0x8040000;/* 256K RAM 的末尾*
/*如果堆和堆栈不适合 RAM、则生成链接错误*/
_min_Heap_size = 0x400;//所需的堆数量*/
/*完全可访问且不可高速缓存的共享 RAM */
SHAREDRAM_SIZE = 0x1000;
/*指定内存区域*/
存储器
{
Vectors (Rx):origin = 0x00000000,length = 0x00000020
内核(Rx):origin = 0x00000020,length = 0x00008000
闪存(Rx):origin = 0x00008020、length =(0x001F7FE0 + 0x00200000)
CPU_STACK (RW):origin = 0x08000000,length = 0x0000f000 //堆栈在 sys_core.asm 中配置
Kram (xrw):origin = 0x0800f000,length = 0x00000800
RAM (xrw):origin =(0x0800f000 + 0x00000800),length =(0x00071000 - 0x00000800 - SHAREDRAM_SIZE)
MEMORY_B1 (Rx):origin = 0x60000000,length = 0K
SHAREDRAM (RW):origin = 0x0807F000,length = SHAREDRAM_SIZE
}
/*位于 RAM 中的 DMA 共享数据*/
.sharedRAM:
{
。 =对齐(4);
__sharedRAM_START__=.;//在 sharedRAM start 处创建全局符号*/
*(.sharedRAM)
。 =对齐(4);
}> SHAREDRAM
为了正确 使用启用缓存的 DMA、我缺少任何其他步骤?
感谢您的支持、
此致、
JOR SAS





