使用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中断向量表