shuaishuaiku 发表于 2026-1-3 15:48:05

DAC+DMA实现求助 | DAC-DMA装载数据是小端模式

在使用STC32G144k246芯片做信号发生器的时候发现DAC+DMA无法输出,
可能是我的编程有误,在实测过程中,
我不使用DMA直接DAC输出的时候是正常的,可以输出我想要的电压,
但是当我加上DMA后输出就一直为0,我采用定时器17溢出触发,
实测定时器是正常工作的能够正常进入中断,DMA必须首次手动触发才能正常工作,
测试过程发现也能进入DMA中断,说明是有搬运的,
而且我串口打印缓冲区数组中的值是有数据的,但是用电压表测量输出没有任何变化。
我是采用AICUBE进行初始化操作的。
下面是我的一些初始化设置以及一些代码





ercircle 发表于 2026-1-3 21:08:26

AiCube没配置DAC1_CRDMAEN位,开了这个后有反应

另外发现手册一处寄存器命名错误:




kaily 发表于 2026-1-4 11:30:42

ercircle 发表于 2026-1-3 21:08
AiCube没配置DAC1_CRDMAEN位,开了这个后有反应

另外发现手册一处寄存器命名错误:



梁工 发表于 2026-1-4 16:25:35

DAC-DMA装载数据是小端模式。



请先别修改程序, 直接下载"obj"里面的"DAC.hex"测试, 下载时选择主频24MHz.
DAC1+OP1 DMA自动装载DAC从P0.7输出32点正弦波,P0.5(OP1负输出入端)要悬空。
P0.7输出接一阶RC滤波(3K+10F)送示波器观察。

输出正弦波频率 = 采样率 /32。




王昱顺 发表于 2026-1-4 16:34:36

装载之前使用大小端交换即可


//大小端交换
void swap_endian_uint16_array(unsigned int *arr, unsigned int count)
{
    unsigned int i;
    unsigned short temp;
   
    for(i = 0; i < count; i++)
    {
      temp = arr;
      arr = ((temp & 0x00FF) << 8) | ((temp & 0xFF00) >> 8);
    }
}



神农鼎 发表于 2026-1-4 19:00:15

STC32G144K246,DAC-DMA例程及注意事项 - STC32G144K246 测试版块,PGA/运放,DAC,CAN-FD,主频100MHz以下 国芯人工智能技术交流网站 - AI32位8051交流社区


页: [1]
查看完整版本: DAC+DMA实现求助 | DAC-DMA装载数据是小端模式