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

📄 max5121与dsp的spi软件实现.txt

📁 适用于初学者练习 MAX5121与DSP的SPI软件实现
💻 TXT
字号:
源程序代码:
(1)所需的复位和中断向量定义文件“vectors.asm”
// 该文件利用汇编语言代码定义了复位和中断向量  
.title		"vectors.asm"
.ref		_c_int0,_nothing
.sect		".vectors"
reset:			b		_c_int0
int1:			b		_nothing	
int2:      		b		_nothing
int3:			b		_nothing
int4:			b		_nothing
int5:			b   		_nothing
int6:			b		_nothing
(2)主程序
//该程序利用LF2407的SPI模块向MAX5121芯片发送数据用于D/A转换,MAX5121的模拟输出端输出一个三角波 
//用C语言编写 
#include  "register.h"
int       GPR3;
int	  	flag1; 
int   	flag;
//系统初始化子程序 
int  initial()
{
	asm(" setc INTM");			//屏蔽中断 
	WSGR=0X00;				//禁止所有的等待状态 
	asm(" CLRC  SXM");
	asm(" CLRC  OVM");
	asm(" CLRC  CNF");		//B0被配置为数据空间 
	*SCSR1=0X81FE;			//CLKIN=6M,CLKOUT=24M ,并且使能到SPI模块的时钟 
	*WDCR=0X0E8;			//不使能看门狗 
}
//SPI模块初始化子程序 
int  SPIINITIAL()
{
	*SPICCR=0X004F;			//16 char bits ,在SPICLK的下降沿发送数据,与MAX5121在
//上升沿接收数据配合 
	*SPICTL=0X0006;			//使能主动模式,一般的时钟方式,使能TALK 
	*SPIBRR=0X0007;			//SPI的波特率为3M,CLKOUT=24M 
	*MCRB=0X003C;			//设置通用引脚为SPI功能的引脚 
	*MCRC=*MCRC&0X0FFFE;	//设置IOPE0脚为通用引脚 
	*SPICCR=*SPICCR|0X0080;	//使SPI退出复位状态 
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中 
int  SPITRANS()
{
	*PEDATDIR=(*PEDATDIR|0X0100)&0X0FFFE;//设置IOPE0为输出,且输出低电平, 
//以选中MAX5121芯片 
	*SPITXBUF=GPR3;						//向SPI的发送缓冲器写一个发送数据 
while(1)
	{
		flag=*SPISTS&0x40;				//flag=SPI的中断标志 
		if(flag==0x40)     break;			//如果SPI的中断标志的中断标志为1,则证 
//明SPI已经发送成功,则停止等待 
	}
	*SPIRXBUF=*SPIRXBUF;				//虚读SPIRXBUF寄存器,以清除SPI中断标志 
	*PEDATDIR=*PEDATDIR|0x01;			//发送完毕,则IOPE0输出高,使发送的数据输 
//出到MAX5121的输入寄存器和DAC寄存器中 
 }
//主程序 
main()
{
	initial();							//系统初始化 
	SPIINITIAL();						//SPI初始化 
	GPR3=0x4000;						//根据MAX5121的格式写一个数据,使其输出的模 
//拟量为0,具体的数据格式请参照表9.5 
	flag1=0x00;						//三角波上升沿、下降沿标志,当flag1=0时,为上 
//升沿,当flag1=1时,为下降沿 
while(1)
	{
		if(flag1==0x00)    GPR3=GPR3+2;	//因为数据从倒数第2位开始,故要使数据加1,则 
//需要在实际的寄存器中加2,此操作对应三角波的 
//上升沿 
		else GPR3=GPR3-2;				//因为数据从倒数第2位开始,故要使数据减1,则 
//需要在实际的寄存器中减2,此操作对应三角波的 
//下降沿 
		if(GPR3==0x5FFE)	flag1=0x01;	//若需要转换的数据到FFFH,则开始下降沿 
		if(GPR3==0x4000)	flag1=0x00;	//若需要转换的数据到00H,则开始上升沿 
		SPITRANS();					//调用SPI发送数据子程序  
	}
}
//当发生干扰中断时,执行此中断服务程序 
void interrupt nothing()
{
	return;
}

⌨️ 快捷键说明

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