SPARTAN 3E STARTER KIT板载DAC程序

上一篇 / 下一篇  2007-11-07 21:42:23 / 天气: 晴朗 / 心情: 高兴 / 个人分类:EDK

查看( 191 ) / 评论( 4 )


#include "xparameters.h"

#include "stdio.h"

#include "xutil.h"

#include "xgpio_l.h" /* general-purpose I/O peripheral control functions */

//====================================================
void usleep(unsigned int delay);
void spi_init(void);
void spi_write(unsigned char data);
void set_dac(unsigned char channel,unsigned int data);

int main (void) {


   print("-- Entering main() --\r\n");
 
 //XGpio_mSetDataDirection(XPAR_LEDS_8BIT_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_SPI_DISABLE_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_FLAH_DISABLE_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_SDI_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_SDO_BASEADDR, 1, 0xffffffff);
 XGpio_mSetDataDirection(XPAR_SCK_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_DAC_CS_BASEADDR, 1, 0x00000000);
 XGpio_mSetDataDirection(XPAR_DAC_CLR_BASEADDR, 1, 0x00000000);
 
 XGpio_mWriteReg(XPAR_SPI_DISABLE_BASEADDR, 1, 0x60000000);
 XGpio_mWriteReg(XPAR_FLAH_DISABLE_BASEADDR, 1, 0xe0000000); 
 
 //XGpio_mWriteReg(XPAR_LEDS_8BIT_BASEADDR, 1, 0x0000000e);
 
 spi_init();
 set_dac(0,2500);
 set_dac(1,3000);
 set_dac(2,2500);
 set_dac(3,3000);

   return 0;
}

void usleep(unsigned int delay)
{
 unsigned int j, i;
 for(i=0; i<delay; i++)
  for(j=0; j<10000; j++);
}

void spi_init(void)
{
 XGpio_mSetDataReg(XPAR_SCK_BASEADDR, 1, 0x00000000);//SCK=0
 XGpio_mSetDataReg(XPAR_DAC_CS_BASEADDR, 1, 0xffffffff);//DAC_CS=1
 XGpio_mSetDataReg(XPAR_DAC_CLR_BASEADDR, 1, 0xffffffff);//DAC_CLR=1
}

void spi_write(unsigned char data)
{
 unsigned char i;
 
 for(i=0;i<8;i++)
 { 
  if(data&0x80)
  {
   XGpio_mWriteReg(XPAR_SDI_BASEADDR, 1, 0xffffffff);
  }
  else
  {
   XGpio_mWriteReg(XPAR_SDI_BASEADDR, 1, 0x00000000);
  }
  XGpio_mWriteReg(XPAR_SCK_BASEADDR, 1, 0x00000000);//SCK=0
  usleep(10);
  XGpio_mWriteReg(XPAR_SCK_BASEADDR, 1, 0xffffffff);//SCK=1 
  usleep(10);
  data=data<<1;
 }
}
/***********************************************************************
channel:select output channel
A:0
B:1
C:2
D:3
data:DAC data 0 to 4095
**********************************************************************/
void set_dac(unsigned char channel,unsigned int data)
{
   unsigned char high;
 unsigned char low;
 spi_init();
 XGpio_mSetDataReg(XPAR_DAC_CS_BASEADDR, 1, 0x00000000);//DAC_CS=0
 spi_write(0x00);
 usleep(10);
 spi_write(0x30+channel);//spi_write(0x31);//channel B
 usleep(10);
 //spi_write(0xBB);
 high=(data&0xff0)>>4;
 spi_write(high);
 usleep(10);
 //spi_write(0x80);
 low=(data&0xf)<<4;
 spi_write(low);
 usleep(10);
 XGpio_mSetDataReg(XPAR_DAC_CS_BASEADDR, 1, 0xffffffff);//DAC_CS=1
}


 

 


TAG:

mszzk609发布于2007-11-09 10:50:14
你好
楼主,你这方面学的很不错啊,有机会交流一下吧,我的QQ是61321397.
zkf0100007的个人空间 zkf0100007 发布于2007-11-09 12:49:07
呵呵,过奖了,大家一起学习!
玉丫子vcom发布于2007-11-15 10:42:26
SPI时序,看看先
718617发布于2007-11-19 20:19:29
谢谢楼主,分享好东西!!!!!!!!!
我来说两句

(可选)

我的栏目

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 5723
  • 日志数: 21
  • 文件数: 5
  • 建立时间: 2007-03-12
  • 更新时间: 2007-11-07

RSS订阅

Open Toolbar