mt2523 对于DMA user来讲使用的memory类型有什么限制?如何获取non-cacheable mem...
时间:10-02
整理:3721RD
点击:
对于DMA user来讲使用的memory类型有什么限制?如何获取non-cacheable memorybuffer?
答: 1) 对于DMA user 来讲,使用的memory 必须满足两个条件:
1.1) memory 是 non-cacheable memory
1.2) memory address 是 4 bytes alignment 对齐
2) user 可以通过以下两种方式获取non-cacheable memory
2.1) 定义一个global data array ,并且添加memory
attribute:ATTR_ZIDATA_IN_NONCACHED_RAM_4BYTE_ALIGN
orATTR_RWDATA_IN_NONCACHED_RAM_4BYTE_ALIGN,如果定义的array 没有赋初始值,就用前者attribute,如果定义有赋初始值,就用后者attribute;
ex:ATTR_ZIDATA_IN_NONCACHED_RAM_4BYTE_ALIGN static uint8_t source_data[64];
2.2)通过API void* PvPortMallocNC(size_t xWantedSize)来获取动态memory(在SDK_V4.0.0之前请使用API void* PvPortMalloc(size_t xWantedSize)来获取,因为void*
PvPortMallocNC(size_t xWantedSize)在V4.0.0才提供):
ex: char *p_source_data=PvPortMallocNC(64);
3) 如果user 使用UART/SPI/I2C的 DMA mode,获取buffer 的方法可以选择2.1)或者2.2)
答: 1) 对于DMA user 来讲,使用的memory 必须满足两个条件:
1.1) memory 是 non-cacheable memory
1.2) memory address 是 4 bytes alignment 对齐
2) user 可以通过以下两种方式获取non-cacheable memory
2.1) 定义一个global data array ,并且添加memory
attribute:ATTR_ZIDATA_IN_NONCACHED_RAM_4BYTE_ALIGN
orATTR_RWDATA_IN_NONCACHED_RAM_4BYTE_ALIGN,如果定义的array 没有赋初始值,就用前者attribute,如果定义有赋初始值,就用后者attribute;
ex:ATTR_ZIDATA_IN_NONCACHED_RAM_4BYTE_ALIGN static uint8_t source_data[64];
2.2)通过API void* PvPortMallocNC(size_t xWantedSize)来获取动态memory(在SDK_V4.0.0之前请使用API void* PvPortMalloc(size_t xWantedSize)来获取,因为void*
PvPortMallocNC(size_t xWantedSize)在V4.0.0才提供):
ex: char *p_source_data=PvPortMallocNC(64);
3) 如果user 使用UART/SPI/I2C的 DMA mode,获取buffer 的方法可以选择2.1)或者2.2)
谢谢分享!