Thread 中讨论的其他器件:OMAPL138
工具/软件:Code Composer Studio
您好!
我已经与 EDMA 合作了一段时间、现在取得了一些成功。 使用高速缓存实现 EDMA 已成为一个重要问题、但在 EDMA 的 RX 缓冲器上尤其如此。
目前、我一直在使用 CSLR 高速缓存库、该库在通过 EDMA 接收数据时能够显著加快许多例程的速度、并且在通过 EDMA 接收数据以及在之前初始化高速缓存时没有遇到任何问题。 在转换到传输例程时、尽管我的输出缓冲器是正确的、EDMA 有时会丢弃数百个样本、有时会在例程结束时切断数据。 它似乎是由缓存例程引起的、在缓存未启用时工作正常。 但是、缓存是必要的、我不想编写我自己的代码、将我所需的代码移回 L2和 L1存储器中的第四个、而是使用已经开发好的缓存例程。
我已经阅读了有关 TMS320C674x 处理器的高速缓存用户手册、了解了与 EDMA 的一致性。 尽管更容易、我觉得将 EDMA 的输出 TX 缓冲器放置在存储器的不可高速缓存部分会更理想(我曾使用 Pragma 语句尝试过这种方法、但无法确定如何更改 SDRAM 可缓存的级别)
下面是我用于初始化高速缓存的代码:
void disable_cache (void)
{
//将 DDR2 (MAR 192 - 223)设置为不可缓存
对于(计数器= 192;计数器< 224;计数器++)
CSL_FINST (cacheRegs->MAR[计数器]、cache_mar_PC、不可缓存);
//禁用 L1P
CSL_FINST (cacheRegs->L1PCFG、cache_L1PCFG_MODE、disable);
失速=高速缓冲存储器->L1PCFG;
//禁用 L1D
CSL_FINST (cacheRegs->L1DCFG、cache_L1DCFG_MODE、disable);
STALL =高速缓冲存储器-> L1DCFG;
//禁用 L2
CSL_FINST (cacheRegs->L2CFG、cache_L2CFG_mode、disable);
stall =高速缓冲存储器-> L2CFG;
}//* disable_cache */
void setup_DDR2_cache (void)
{
//将 SDRAM (MAR 192-223)设置为可缓存
对于(计数器= 192;计数器< 224;计数器++)
CSL_FINST (cacheRegs->MAR[计数器]、cache_mar_PC、可缓存);
}/* setup_SDRAM_cache */
void enable_L1 (void)
{
//将 L1P 大小设置为32K
CSL_FINST (cacheRegs->L1PCFG、cache_L1PCFG_MODE、32K);
失速=高速缓冲存储器->L1PCFG;
//将 L1D 大小设置为32K
CSL_FINST (cacheRegs->L1DCFG、cache_L1DCG_MODE、32K);
stall = cacheRegs->L1DCFG;
}-->enable_L1 */
void enable_L2 (void)
{
//将 L2大小设置为256K
CSL_FINST (cacheRegs->L2CFG、cache_L2CFG_mode、128K);
STALL =高速缓冲存储器-> L2CFG;
}/* ENABLE_L2 */
有人能告诉我这个缓存例程有什么问题、或者告诉我一个从某种 TI 软件中有效的缓存例程吗?