您需要设置 MMU 以向硬件通知组件的功能。您还需要确保整个互连支持突发并且不进行任何转换(如果在生成互连时组件的功能存在任何模糊性,则可能会发生这种情况)。
要设置 MMU,您可以执行如下调用:
/* shareable device: S=b0 TEX=b000 AP=b11, C=b0, B=b1 = 0xC06*/
Xil_SetTlbAttributes(COMPONENT_BASE_ADDRESS, 0xC06);
Run Code Online (Sandbox Code Playgroud)
属性定义如下(来自Zynq 技术参考手册):
Encoding Bits Cache Attribute
C B
0 0 Non-cacheable
0 1 Write-back, write-allocate
1 0 Write-through, no write-allocate
1 1 Write-back, no write-allocate
Run Code Online (Sandbox Code Playgroud)
因此,上面的行会将区域设置为回写、写入分配,这可能会为您提供写入时的突发访问。
另请参阅Xilinx AR#47406和此论坛帖子。