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

📄 spi_ad_2.c

📁 DSP2407A对ADC0809的控制
💻 C
字号:
// 串行AD与DSP通过SPI通信程序
#include "register.h"
int flag;
int RESULT[256];
int i;

// 系统初始化子程序  	
void initial()                                   
{
	asm(" setc	INTM");	    			    // 禁止所有中断
    WSGR=0x0000;
  	asm(" clrc	SXM");    				   	// 抑制符号位扩展
	asm(" clrc	OVM");		    			// 累加器中结果正常溢出
	asm(" clrc	CNF");		    		    // B0被配置为数据存储空间
	*SCSR1=0x82FC;			   			    // CLKIN=15M,CLKOUT=2*CLKIN=30M
	*WDCR=0x0E8;			   			    // 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     			     				// 即WD保护位复位后的缺省值为1,故可以用软件禁止看门狗
	*IMR=0x0000;			   			    // 禁止所有中断
	*IFR=0xFFFF;			     			// 清除全部中断标志,"写1清0"
}

// SPI初始化子程序
void SPIinitial()
{
	*MCRB=0x0018;							// 设置通用引脚为SPI功能,SIMO和SS为通用IO
	*PCDATDIR=*PCDATDIR|0x0404;	   			// IOPC2设置为输出方式,且IOPC2=1
	*SPICCR=0x0009;							// 使SPI进入复位状态,0831为下降沿输出
	*SPICTL=0x000C;							// 禁止过冲中断、延时时钟、主工作方式、禁止中断、禁止发送
	*SPIBRR=0x0063;							// SPI波特率=300KHz
	*SPICCR=*SPICCR|0x0080;					// SPICLK信号下降沿输入数据,10位
	//*PCDATDIR=*PCDATDIR&0x0FFFB;	  	    // IOPC2=0,以片选AD转换器
}

// 延时程序,等待AD
void ADCdelay(int delx)
{
   int m=0;
   while(m<delx)
  {
   m++;
  }
}

// 主程序
main()
{
	initial();									// 系统初始化
	SPIinitial();								// SPI初始化
	while(1)
  {
	for(i=0;i<=255;i++)
	{
	*PCDATDIR=*PCDATDIR&0xFFFB;					// 输出一个低电平,片选AD
	ADCdelay(0xF);								// 延时十个时钟周期
	*SPITXBUF=0x00;								// 虚发一个数,触发CLK,使AD开始转换
	while((*SPISTS&0x40)!=0x40){}				// 判断数据是否接收完毕
	*PCDATDIR=*PCDATDIR|0x0404;					// 输出一个高电平,为下次数据收发做准备
	ADCdelay(0xF);								// 延时十个时钟周期
	RESULT[i]=*SPIRXBUF&0x00FF;					// 读数,将中断标志位清零
												// 屏蔽高七位和最低位
	}
  }
}

void interrupt nothing( ) 
{
 	return;
}
	

⌨️ 快捷键说明

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