DSP驱动DAC8560芯片

[复制链接]
1852|12
 楼主| 877049204 发表于 2018-1-25 16:27 | 显示全部楼层 |阅读模式
手里有一块DSP28335开发板,实验室有DAC芯片8560和AD5696,准备做个激光器的驱动信号,先把8560驱动起来,直播,碰到的问题和大家交流
 楼主| 877049204 发表于 2018-1-25 16:32 | 显示全部楼层
这是8560的特性,看起来还不错,哈哈其实我也不太懂,前人买的,一直没人用,我不想浪费了。采用SPI的方式,寄存器也很简单,8位命令,16位数据,如果要用内部参考的话,要连续写入这两个序列(默认是内部参考)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 877049204 发表于 2018-1-25 16:34 | 显示全部楼层
采用模拟SPI的方式,代码如下
void DAC8560_Write_byte(unsigned char com , unsigned char dat)
{
        unsigned char i = 0;
        DAC8560_FSYNC_LOW;
        DELAY_US(5);
        DAC8560_SCLK_HIGH;
        DELAY_US(5);
        for(i=0;i<8;i++)
        {
                DAC8560_SCLK_HIGH;
//                DELAY_US(5);
                if(com&0x80)
                {
                        DAC8560_DAT_HIGH;
                }
                else
                {
                        DAC8560_DAT_LOW;
                }
                DELAY_US(10);
                DAC8560_SCLK_LOW;
                DELAY_US(10);
                com<<=1;

        }

        for(i=0;i<16;i++)
        {
                DAC8560_SCLK_HIGH;
//                DELAY_US(5);
                if(dat&0x8000)
                {
                        DAC8560_DAT_HIGH;

                }
                else
                {
                        DAC8560_DAT_LOW;
                }
                DELAY_US(10);
                DAC8560_SCLK_LOW;
                DELAY_US(10);
                dat<<=1;
        }

/*        //两个额外的下降沿
        DAC8560_SCLK_LOW;
        DELAY_US(10);
        DAC8560_SCLK_HIGH;
        DELAY_US(10);
        DAC8560_SCLK_LOW;
        DELAY_US(10);
        DAC8560_SCLK_HIGH;
        DELAY_US(10);
        DAC8560_SCLK_LOW;
        DELAY_US(10);*/
        DAC8560_FSYNC_HIGH;
        DELAY_US(10);
}
 楼主| 877049204 发表于 2018-1-25 16:38 | 显示全部楼层
使用内部基准 ,两个序列转换过来就是:0x4c+0x0400,0x49+0x0401
DAC8560_Write_byte(0x4c, 0x0400);
DAC8560_Write_byte(0x49, 0x0401);
分析时序,证明程序是正确的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 877049204 发表于 2018-1-25 17:08 | 显示全部楼层
程序应该没问题,焊一块DAC芯片接上实际看一看
 楼主| 877049204 发表于 2018-1-27 15:54 | 显示全部楼层
本帖最后由 877049204 于 2018-1-27 16:19 编辑

碰到一个奇怪的问题,28335的时钟频率是150MHz,这个时钟我用定时器分频计算过,按理来说它的MIPS应该6.7ns左右,但是它执行一条语句的时间花了大概1US,现象如下:
主函数:
      while(1)
      {
//            DAC8560_Dat_Write(SinTable);
            i++;
               if(i>=50)
               {
                       i = 0;
                       GpioDataRegs.GPADAT.bit.GPIO24 = 1;
               }
               GpioDataRegs.GPADAT.bit.GPIO24 = 0;
      }
 楼主| 877049204 发表于 2018-1-27 16:09 | 显示全部楼层
这样算下来一次加法用了1uS的时间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 877049204 发表于 2018-1-31 09:13 | 显示全部楼层
焊接完成后,输出慢扫信号波形、正弦波

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

@panhj :QQ号就是我的ID  发表于 2018-9-10 16:44
你好 能加一下qq好友吗  发表于 2018-9-10 15:59
xiaolinfa1987 发表于 2018-5-23 10:43 | 显示全部楼层

我用28377s驱动DAC8534,dsp的SPI直接配置外设,数据帧最大只能设置为16bit,而DAC8534每一帧需要24bit(因为前面多了8bit的控制位)。请问怎么解决这个问题?
DAC8534手册要求片选引脚要在收到bit24之后才能拉高,在这之前拉高,数据则无效。而DSP的输出在第16bit就会拉高了。
用普通IO口模拟数据更新太慢了,还要加延时,因此想直接配置外设。
 楼主| 877049204 发表于 2018-9-10 16:47 | 显示全部楼层
xiaolinfa1987 发表于 2018-5-23 10:43
我用28377s驱动DAC8534,dsp的SPI直接配置外设,数据帧最大只能设置为16bit,而DAC8534每一帧需要24bit(因 ...

不好意思,刚看到你的问题。
可以使用SPI的FIFO功能,将24位数据帧分成两个12位的数据,依次存入SPITXBUF,这样就可以spi成功发送24的帧
xiaolinfa1987 发表于 2018-9-23 09:47 | 显示全部楼层
877049204 发表于 2018-9-10 16:47
不好意思,刚看到你的问题。
可以使用SPI的FIFO功能,将24位数据帧分成两个12位的数据,依次存入SPITXBUF ...

可以分3个8位的,多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

1835

帖子

20

粉丝
快速回复 在线客服 返回列表 返回顶部