您尚未登录。

楼主 # 2024-02-23 14:11:44

hpxzw520
会员
注册时间: 2020-11-18
已发帖子: 39
积分: 9

f1c100s 音频、串口dma混用有问题

大家好,我这边的工程,之前用到了音频dma,是做了双缓冲,

用的是Write Through模式
void sys_mmu_init(void)
{
unsigned int * ttb;
ttb=mmuTable;
map_l1_section(ttb, 0x00000000, 0x00000000, SZ_2G, 0);
map_l1_section(ttb, 0x80000000, 0x80000000, SZ_2G, 0);
// map_l1_section(ttb, 0x80000000, 0x80000000, SZ_1M * 32, F1C100S_CACHE_WRITE_BACK);
map_l1_section(ttb, 0x80000000, 0x80000000, SZ_1M * 32, F1C100S_CACHE_WRITE_THROUGH);

arm32_ttb_set((uint32_t)(ttb));// 写入页表地址
arm32_tlb_invalidate();
arm32_domain_set(0x1);// 设置域不进行权限检查
arm32_mmu_enable();
arm32_icache_enable();
arm32_dcache_enable();
}
----------------------------------------------------------------------------------

音频NDMA 通道0
连续模式
然后在1ms定时器里面判断半满、全满中断
然后将要播放的音频数据丢进去做缓冲,
写入数据前加上sysFlushCache(D_CACHE);
----------------------------------------------------------------------------------
case D_CACHE:
sys_flush_and_clean_dcache();
__asm
{
/----- flush D-cache & write buffer -----/
MOV temp, 0x0
MCR p15, 0, temp, c7, c10, 4 / drain write buffer /
}

sys_flush_and_clean_dcache

tci_loop
MRC p15, 0, r15, c7, c14, 3 ; test clean and invalidate
BNE tci_loop

BX r14

END
一切正常
----------------------------------------------------------------------------------

后来串口数量多了,数据量大了,想加上串口dma
串口NDMA 通道2
连续模式
也是开启了半满、全满中断
在读dma数据前,调用了sysInvalidCache();
单独使用串口dma,是正常的,一起用的话,音频的播放就有问题了
会有不正常的卡顿,请问怎么处理?

----------------------------------------------------------------------------------
VOID sysInvalidCache(void)
{
int temp;

__asm
{
MOV temp, 0x0
MCR p15, 0, temp, c7, c7, 0 / invalidate I and D cache /
}
}
----------------------------------------------------------------------------------

最近编辑记录 hpxzw520 (2024-02-23 16:28:55)

离线

楼主 #2 2024-02-23 16:07:50

hpxzw520
会员
注册时间: 2020-11-18
已发帖子: 39
积分: 9

Re: f1c100s 音频、串口dma混用有问题

zzm24 wrote:

参考rtthread代码,只清指定地址cache

谢谢,不过我有点迷糊,能不能给个传送门,我看看
rt-thread没接触过~

离线

楼主 #3 2024-02-24 11:35:23

hpxzw520
会员
注册时间: 2020-11-18
已发帖子: 39
积分: 9

Re: f1c100s 音频、串口dma混用有问题

zzm24 wrote:

参考rtthread代码,只清指定地址cache

哥们,有个链接吗,我找到几个rtthread,
arm32.h文件只是这样的
uint32_t arm32_read_p15_c1(void);
void arm32_write_p15_c1(uint32_t value);
void arm32_mmu_enable(void);
void arm32_mmu_disable(void);
void arm32_dcache_enable(void);
void arm32_dcache_disable(void);
void arm32_icache_enable(void);
void arm32_icache_disable(void);
void arm32_ttb_set(uint32_t base);
void arm32_domain_set(uint32_t domain);
void arm32_tlb_invalidate(void);
uint32_t arm32_read_p15_c0(uint32_t ld);

离线

楼主 #5 2025-07-03 15:56:01

hpxzw520
会员
注册时间: 2020-11-18
已发帖子: 39
积分: 9

Re: f1c100s 音频、串口dma混用有问题

是的,我测试是这样
好久没上论坛了,之前dma混用放着没管,现在要用上了,才看到回复。。。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发