博客首页 | 排行榜 |

zkf0100007的博客

个人档案
博文分类
SPARTAN 3E STARTER KIT板载DAC程序  2009-06-23 23:13
#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
}

类别:EDK |
上一篇:终于用EDK把LCD240128(T6963)点亮了
以下网友评论只代表其个人观点,不代表本网站的观点或立场