本帖最后由 kendol 于 2015-3-2 10:45 编辑
RT,请教一下坛子里的大侠。
我想通过SPI发送数据到DAC7568完成正弦波输出。现在我用的这个32bit DAC是8通道,12位精度的,它的寄存器配置如下图:
这个DAC的控制位地址位配置图:
然后DSP中SPITXBUF为16位寄存器,我把数据分两次发送:
代码如下
void F280X_SPIDAC_Update(SPIDAC *p)
{
// _iq Tmp;
if(p->Rad >= _IQ12(1))
{
p->Rad = _IQ12(0); // 防溢出
}
p->Rad += _IQ12(0.005);
p->Sinewave = (_IQ12sinPU(p->Rad) + _IQ12(1))>>1;
// p->Sinewave = Tmp << 8;
}
void F280X_SPIDAC_Transmit2(SPIDAC *p)
{
SpibRegs.SPITXBUF = (p->Sinewave) | 0x0200; //---不对的
SpibRegs.SPITXBUF = (p->Sinewave) | 0x0000;
}
上面代码中的Transmit部分是不对的,在示波器中读不出波形,所以问题就是怎么正确的把Sinewave的数据(Q12)发送到DAC的数据位中?实在是很困扰,烦请会的大侠指点一下菜鸟。
新手第一次发帖,若发错版块希望告知一下:)
我的解决方法:
在上面获取的正弦波为Q12格式,我的做法是把该段数据分为高4位发送和低8位发送(通过相与分别保留高4位和低8位),然后通过移位把它嵌入到DAC的数据位中去,这样就能把正弦波DAC出来了。
有不同解决方法的也希望交流分享一下:)
|