|
发表于 2012-8-30 09:33:11
|
显示全部楼层
网上一段程序!!
/*********************************************************************
** 功能描述:模数转换程序**
*********************************************************************/
#include "DSP28_Device.h"
#define uint unsigned int
#define DCLK GpioDataRegs.GPFDAT.bit.GPIOF13
#define CS GpioDataRegs.GPFDAT.bit.GPIOF12
#define DIN GpioDataRegs.GPFDAT.bit.GPIOF11
#define DOUT GpioDataRegs.GPFDAT.bit.GPIOF9
#define BUSY GpioDataRegs.GPFDAT.bit.GPIOF10
void IOinit(void)
{
EALLOW;
GpioMuxRegs.GPFDIR.bit.GPIOF13 = 1; //GPIO F13为输出
GpioMuxRegs.GPFDIR.bit.GPIOF12 = 1; //GPIO F12为输出
GpioMuxRegs.GPFDIR.bit.GPIOF11 = 1; //GPIO F11为输出
CS=1; DCLK=0;
EDIS;
}
uint ADS7844(void)
{
uint temp,i;
CS=0;
temp=0x87;//控制字
temp<=8;
for(i=0;i<8;i++)
{
DCLK=0;
if((temp&0x8000)==0x8000)DIN=1;
else DIN=0;
temp<=1;
DCLK=1;
}
DCLK=0;
DCLK=1;
while(BUSY==0);
temp=0x00;
for(i=0;i<16;i++)
{
DCLK=0;
if(DOUT==1)temp|=0x01;
temp<=1;
DCLK=1;
}
DCLK=0;
CS=1;
temp>>=4;
return(temp);
}
void Spi_intial()
{
SpiaRegs.SPICCR.all = 0x004F; // 使SPI处于复位模式, 下降沿,16位数据
SpiaRegs.SPICTL.all = 0x000d; // 主控模式, 一般时钟模式,使能talk, 关闭SPI中断 0x000D:表示有延时
SpiaRegs.SPIBRR = 0x007F; // 配置波特率
SpiaRegs.SPICCR.all = SpiaRegs.SPICCR.all|0x0080; // 退出复位状态
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x000F; // 设置通用引脚为SPI引脚
EDIS;
}
void main(void)
{
unsigned int i20,temp11,d_a_data;
InitSysCtrl();
IOinit();
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3;// 高速外设模块时钟HSPCLK=SYSCLKOUT/6=25Mhz
EDIS;
DINT; // 关闭总中断
IER = 0x0000; // 关闭外设中断
IFR = 0x0000; // 清中断标志
Spi_intial(); // SPI初始化子程序
/*
SpiaRegs.SPITXBUF = 0xD002; // 初始化指令:DAC_A使能 内部参考,输出2.048
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);
SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
d_a_data=100; //(0--2047)
for(i20 = 0; i20<2; i20++);
SpiaRegs.SPITXBUF = 0xC000|d_a_data; // DAC_A置数
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);
SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
temp11= ADS7844();
*/
d_a_data=2000;
/* GpioDataRegs.GPBDAT.bit.GPIOB9 = 0; */
/* //DSP28x_usDelay(20); */
/* SpiaRegs.SPITXBUF = 0x5000|d_a_data; // 0101 */
/* while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){} */
/* SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF; */
/* //DSP28x_usDelay(20); */
/* GpioDataRegs.GPBDAT.bit.GPIOB9 = 1; */
//DSP28x_usDelay(20);
GpioDataRegs.GPBDAT.bit.GPIOB9 = 0;
//DSP28x_usDelay(20);
SpiaRegs.SPITXBUF = 0xc000|d_a_data; // DAC_A置数
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}
SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
//DSP28x_usDelay(20);
GpioDataRegs.GPBDAT.bit.GPIOB9 = 1;
while (1)
{
DSP28x_usDelay(205630);
};
} |
|