每一个发送的数据时序没问题。但DAC8734只能把第一个接收到的数字数据输出,我用的是TI公司自己的DAC8734EVM。可能有哪些原因导致的呢?是上电顺序的原因吗?
Martin:
这个情况更像是时序有问题,有用示波器检查过时序吗? 你的LDAC是怎么样更新的?
weiguang an:
回复 Martin:
LDAC我设置的一直是低电压,所以LDAC应该没问题。
SPITransmitData1(SOC_SPI_1_REGS,data1); SPITransmitData1(SOC_SPI_1_REGS,data2); SPIDat1Config(SOC_SPI_1_REGS,SPI_DATA_FORMAT0,0x01);
上面是我的发送语句,这三句循环执行。我把DSP的SP配置成12位的,两个发送语句是24位。然后拉高CS。循环发送时的时序如图。
I
Martin:
回复 weiguang an:
这个时序看起来是没问题的!SCLK的时钟速率有多快?
有没有测试过写入寄存器,然后读出该寄存器,这样读出的数据是否正常呢?
程序中的第三句是干嘛的?
能否将你的测试结果发上来看看,比如说发送什么数据,实测结果是什么?
weiguang an:
回复 Martin:
SCLK在4MHZ,第三句是用来拉高CS的。在双极模式下,发的数是
1. 32768 (data1=72,data2=0) 测试结果是-10
2. 49152(data1=76,data2=0) 测试结果是-5
3. 65535(data1=79,data2=4095) 测结果是0
这都没问题,只发一个数得到结果是对的。连续发就只显示第一个数。
我想问一下,用SPI控制DAC连续发送的程序框架是什么?
Martin:
回复 weiguang an:
你的系统中只有一片DAC8734吧?
LDAC一直拉低的情况下,DAC 连续在CS拉高的时候更新,只要你的输入是有效的,输入后将CS拉高,就可以更新了。
你的程序,能够连续正确地读写寄存器吗?
Jetone Jia:
回复 Martin:
DAC8734和16位单片机MC9S12XEP100连接不上,spi设置位8bit,连续发送3byte,每byte之间有个很小的,略大于1个SCLK的时钟间隔,这决定了不能和8734通信吗
while(!SPI2SR_SPTEF); SPI2DRL = 0x00; while(!SPI2SR_SPTEF); SPI2DRL = 0x00; while(!SPI2SR_SPTEF); SPI2DRL = 0x00;
只用SPI发送,不回读的方式,现在不知道怎样消除那一个SCLK
Jetone Jia:
回复 Jetone Jia:
只能关中断用IO模拟了吗?太占时间了
Jetone Jia:
回复 Jetone Jia:
Sorry for my word. I get dac8734, because the mcu register didnot properly write. thanks