有关DSP2812与SPI接口DA芯片的通信(AD5640,AD5682)

本文介绍了使用DSP2812通过SPI接口与AD5640和AD5682R DA芯片通信的详细过程,包括配置SPI接口、初始化过程以及遇到的问题和解决方案。在AD5640通信成功后,更换为AD5682R时,由于其24位移位寄存器导致通信异常,通过示波器排查发现SPITXBUF的16位问题,最终解决了通信问题。
摘要由CSDN通过智能技术生成

使用DSP2812控制SPI接口DA芯片总结:

本文只针对SPI接口的DA芯片,通常用到的DA芯片有精度位16位/14位/12位的。我在这次过程中用到的都是14位的,刚开始使用的是AD5640的DA芯片,其精度为14位,移位寄存器为16位,前2位是工作模式位(一般选正常工作模式就行),后14位是数据,刚刚好,DSP2812的数据输出寄存器(SPITXBUF)也是16位,只需要设置SPICCR寄存器数据位为16位即可,由于AD5640是要求下降沿数据输入,因此DSP2812配置为上升沿输出,具体看SPI接口时序图。在配置完数据输出字符长度和极性(DSP数据上升沿输出,下降沿输入),接下来再配置DSP为主模式,设置时钟相位(选正常的SPI时钟),配置波特率(根据DSP低速外设时钟设置,AD5640可达30MHz),复位SPI模块,设置为自由运行模式,这样,DSP2812与AD5640的SPI接口已配置完毕,接下来对AD5640的操作就很简单了,只需要通过SPITXBUF发送数据就可以,相关源代码如下:

#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"   
#include "math.h"

void InitSpii(void); //SPI初始化

extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

int main(void) {

InitSysCtrl();  //初始化系统控制寄存器、Pll、看门狗和时钟

 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 InitFlash();

 InitGpio();        //GPIO初始化

 DINT; //禁止和清除所有CPU中断向量表
 InitPieCtrl();//初始化PIE控制寄存器
 IER = 0x0000;//禁止CPU中断
 IFR = 0x0000;//清除CPU中断标志
 InitPieVectTable();//初始化中断向量表

 InitPeripherals();         //模块初始化

EINT;          // Enable Global interrupt INTM   //使能所有CPU中断向量表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值