⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi8831.c

📁 新华龙020 的内置spi0。驱动16位精度dac8831的程序
💻 C
字号:
///////////////////////////////////////////////////////////////////////
///SPI驱动8831程序
//采用单端方式输出
//输出公式见数据手册
///////////////////////////////////////////////
#include <c8051f020.h>
#include <intrins.h>
#include <math.h>
# define Vref  2.78
typedef unsigned char uchar;
typedef unsigned int uint;
sbit cs=P0^4;
void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}

void Port_IO_Init()
{
    // P0.0  -  SCK  (SPI0), Open-Drain, Digital
    // P0.1  -  MISO (SPI0), Open-Drain, Digital
    // P0.2  -  MOSI (SPI0), Open-Drain, Digital
    // P0.3  -  NSS  (SPI0), Open-Drain, Digital
    XBR0      = 0x02;
    XBR2      = 0x40;
}

void Oscillator_Init()
{
    int i = 0;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    OSCICN    = 0x08;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Reset_Sources_Init();
    Port_IO_Init();
    Oscillator_Init();
}
//SPI配置函数具体配置待定
void spi_cfg(uchar spicfg, uchar spickr, uchar spicn)
{
    SPI0CFG = spicfg;
    SPI0CKR = spickr;
    SPI0CN = spicn;
    EIE1 &= ~0x01; //禁止中断
}
void SendSPIByte(uint dat)
{
    cs=1;
    cs=0;
    SPIF=0;
    SPI0DAT=dat>>8;//发送高8bit
    while(!SPIF);
    SPIF=0;//清空标志位
    SPI0DAT=dat;//发送低8bit
    while(!SPIF);
    cs=1;//发完了片选拉高,然后在一个时钟周期内 dac装载数据
    _nop_();
    _nop_();
}
main()
{	
	uint DACdat;
	unsigned char a;
    Init_Device();
    spi_cfg(0x07,0x0a,0x03);
    /*
	 SPI0CFG = 0x07;	8831cfg=00000111主机模式空闲时候时钟为低when  driver 8831 ,ckpol=0;ckpha=0;
	 SPI0CKR =0X6E ;	 8831ckr=0x6e	 波特率设置,系统时钟为22.1184MHZ,若果要SCK为100KHZ 
	        SPI0CN = 0x02;	 8831cn= 0x02 
	 四线制单主机模式,主机NSS输出为0,SPIEN为0,SPI未开启
	 注意:这些配制只是暂时的具体待定
	*/ 
    while(1)
    {//产生正弦波的试验
    for(a=1;a<32;a++)
		{
	  	DACdat=32768*(1+sin((6.28/32)*a))/Vref;
		SendSPIByte(DACdat);//
		}
	 a=0;
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -