main.c
字号:
/*********************************************************************
** Module Name: DAC **
** Author: Cbq **
** Version: 1.0 **
** CreateDate: 2008-05-16 **
** Description: **
** Remark: Huozq **
** Revision History: 2008-11-10 **
**********************************************************************/
/*********************************************************************
** 实验目的:通过学习此程序可以了解DSP的SPI与DA芯片(TLV5620)的连接 **
** 和驱动,这是DSP的一个重要特性,大家要达到掌握的程度 **
** 实验说明:主要硬件由DSP和TLV5620组成,DSP提供了SIMO和SCLK、C3TRIP **
** 信号给TLV5620,且C3TRIP信号是用来做片DAC信号的更新和锁 **
** 存的,这里大家要参照我们所提供的TLV5602的手册,4个信道 **
** 的DAC输出分别引了出来,方便大家来检测.这里还要说明的一 **
** 点的是我们用了其中的两个信道DACA和DACB作为ADC的输入, **
** 大家看电路便知。 **
** 实验结果:用万用表测试TLV5620的4个输出电压值,可看到他们是成比例 **
** 关系,分别为0.4V,0.8V,1.2V,1.6V. **
**********************************************************************/
#include "DSP28_Device.h"
/*这里使用了宏定义来控制更新锁存信号的功能,重点就是在时序上*/
#define SetLOAD GpioDataRegs.GPADAT.bit.GPIOA15=1; //将LOAD置高
#define ClrLOAD GpioDataRegs.GPADAT.bit.GPIOA15=0; //将LOAD置低
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol);
void delay(unsigned int t);
void main(void)
{
int temp;
/*初始化系统*/
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
/* 初始化PIE控制寄存器 */
InitPieCtrl();
/* 初始化PIE参数表 */
InitPieVectTable();
///初始化IO口
InitGpio();
///初始化SPI
InitSpi();
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
SetLOAD; //把刷新锁存控制信号拉高
temp=57;
while(1)
{
WriteDAC(0,0,temp); //0.4V
WriteDAC(1,0,temp*2); //0.8V
WriteDAC(2,0,temp*3); //1.2V
WriteDAC(3,0,temp*4); //1.6V
delay(1000); //在此设断点,观察变量DAC0和DAC1的值,另外加三用表直接测量四路DA的输出电压值
}
}
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
{
unsigned short int data;
data=0x0000;
///大家要知道这里所定义的各个变量的含义,add是4个通道的地址(00,01,10,11)
/// RNG是输出范围的倍数,可以是0或1。
/// VOL是0~256数据
data = ((add<<14) | (rng<<13) | (vol<<5));
//注意这里的有效数据是11位,SPI初始化中也进行了定义
if(Spi_TxReady() == 1) //判断SPI的发送缓冲区是否是空的,等于1可写数据
SpiaRegs.SPITXBUF = data; //把发送的数据写如SPI发送缓冲区
while( Spi_TxReady()!=1); //当发送缓冲区出现满标志位时,开始琐存数据
delay(1000);//同通过一负跳变琐存要发送的数据,看TLV5620数据手册即可得知
ClrLOAD;
delay(100);
SetLOAD;
delay(1000);
}
void delay(unsigned int t)
{
while(t>0)
t--;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -