您尚未登录。

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

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

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)

离线

#1 2024-02-23 15:37:21

zzm24
会员
注册时间: 2018-05-07
已发帖子: 120
积分: 107

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

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

离线

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

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

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

zzm24 说:

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

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

离线

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

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

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

zzm24 说:

参考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);

离线

页脚

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

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