欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

main.c

F2812实现电机控制源程序.rar
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 + -