集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2522|回复: 1

SPARTAN 3E STARTER KIT板载DAC程序[代码示例]

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-5-19 14:44:39 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2011-1-14 09:39 编辑

SPARTAN 3E STARTER KIT板载DAC程序[代码示例]

#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
dataAC 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
}
fpga_feixiang 发表于 2021-8-13 15:41:44 | 显示全部楼层
66666666666666666666666
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-17 15:36 , Processed in 0.146824 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表