发现DMA-DAC输出间隔有一个固有延时
发现stc32g144k-256的DMA-DAC输出间隔有一个固有延时,不知道是什么原因。以40M主频,用MDA-DAC交替输出0和4095, 用逻辑分析仪捕捉其输出间隔
按理论计算当ITV设置50,100,200时,其输出间隔应该是1.25us, 2.5us, 5us.
但实际输出间隔约为1.55us, 2.8us, 5.3us,都比理论计算要高约0.3us。
忽略各种误差的情况下,可以得出结论:输出间隔比理论计算要高出约12个系统周期。
改变主频,上面论结论依然成立。
测试代码如下
#include "stc32g144k.h"
typedef unsigned short u16;
typedef unsigned char u8;
u16 xdata buf = {
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f, 0x0000, 0xff0f,
};
//40M主频
void main()
{
EAXFR = 1; //扩展寄存器(XFR)访问使能
WTST = 1;
CKCON = 0; //提高访问XRAM速度
P0M0 = 0;
P0M1 = 0X21; // P00 P05设置高阻
PGA1_CR1 = 0X53;// 缓冲模式 PGA1正极端口选择DAC1O PGA1 负极端口选择P05 PGA1输出端口选择P00、
PGA1_CR2 = 0X04;
DMA_ARB_CFG = 0x00;//切换到xdata部分
DMA_DAC1_TXAH = (u8)((u16)buf >> 8); //地坛
DMA_DAC1_TXAL = (u8)((u16)buf);
DMA_DAC1_ITVH = 0; //间隔
DMA_DAC1_ITVL = 50; //25ns * 50 = 1.25us
//DMA_DAC1_ITVL = 100; //25ns * 100 = 2.5us
//DMA_DAC1_ITVL = 200; //25ns * 200 = 5.0us
DMA_DAC1_AMTH = 0; //传输数量
DMA_DAC1_AMT= 99;
DMA_DAC1_CFG = 0X03; //数量总线最优先级。
DAC1_DIV = 0;
DAC1_CR = 0XB1;
DMA_DAC1_CR = 0XC0; //使能并触发
while(1)
{
if (DMA_DAC1_STA & 0X01)
{
DMA_DAC1_CR = 0XC0; //使能并触发
DMA_DAC1_STA = 0;
}
NOP4();
}
}
DMA SPI 发送的时候也会有一样问题。。。据梁工说 会有大概18个时钟周期。。可能是和DMA某些运行逻辑有关。 数据处理和搬运需要时间
比如方波90°也只在理论上 早期的DMA控制器,总线共享,DMA控制器是等总线空闲时候再进行数据传输,传输过程中CPU又使用总线时DMA暂停运行,等总线空闲再继续传输,所以DMA的传输时间不是固定的.
现在的处理器可能有多套总线,如果DMA控制器传输数据使用专用的总线,数据传输时间就是固定的.但DMA参数修改后需要参数装载时间.所以也不能仅仅按照数据长度计算传输时间.
页:
[1]