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

📄 mxfe_spi_interface.c

📁 基于ADI blackfin处理器的范例程序
💻 C
字号:
#include "system.h"
/********************************************************************************/
/***** InitSPI_for_AD9866()													*****/
/********************************************************************************/
void InitSPI_for_AD9866(void)
{ unsigned char temp =0;
	

	*pSPI_CTL 	&=  (~SPE);					// disable SPI
	*pSPI_FLG 	|=  (FLS1|FLG1);			// Enable PF1 as SlaveSelect, active low
	*pSPI_BAUD  =   BAUD_CONF;			
	*pSPI_CTL   =   MSTR | SIZE | GM | (TIMOD & 1);
	asm("ssync;");
	*pSPI_CTL 	|=  SPE;					// enable SPI
	asm("ssync;");

	
	temp = Write_Byte_to_AD9866(0, 0x80);	// set SPI to 4-wire and MSB first
	temp = Read_Byte_from_AD9866(0);	// set SPI to 4-wire and MSB first	
	printf("%d",temp);
}




/********************************************************************************/
/***** Write_Byte_to_AD9866(address, data)									*****/
/***** sends a single configuration byte via SPI to the AD9866 register		*****/
/***** only polling is done, no interrupts. Return value is RX reg			*****/
/********************************************************************************/
unsigned char Write_Byte_to_AD9866(unsigned char AD9866_address, unsigned char AD9866_data)
{	unsigned short Instr_Sequence;
	
	// instruction sequence is 1 instruction byte followed by a configuration byte.
	// both are combined into a single 16-bit transfer over the SPI
	
	Instr_Sequence = 0x0000 | (unsigned short)AD9866_address<<8 | (unsigned short)AD9866_data;	// set I7 to Write, and N1:0 to 1byte transfer
	
	*pSPI_TDBR = Instr_Sequence;
	asm("ssync;");
	
	while (!(*pSPI_STAT & 0x0001));			// wait until single-word transfer bit is set

	while (!(*pSPI_STAT & 0x0020));			// wait until receive buffer full bit is set

	return (unsigned char)(*pSPI_RDBR & 0x00FF);		// return LSByte
}


/********************************************************************************/
/***** data = Read_Byte_from_AD9866(address)								*****/
/***** reads a single configuration byte via SPI from the AD9866 register	*****/
/***** only polling is done, no interrupts. 								*****/
/********************************************************************************/
unsigned char Read_Byte_from_AD9866(unsigned char AD9866_address)
{	unsigned short Instr_Sequence;
	
	// instruction sequence is 1 instruction byte followed by a zero byte.
	// both are combined into a single 16-bit transfer over the SPI
	
	Instr_Sequence = 0x8000 | (unsigned short)AD9866_address<<8;	// set I7 to Read, and N1:0 to 1byte transfer
	
	*pSPI_TDBR = Instr_Sequence;
	asm("ssync;");
	
	while (!(*pSPI_STAT & 0x0001));			// wait until single-word transfer bit is set

	while (!(*pSPI_STAT & 0x0020));			// wait until receive buffer full bit is set

	return (unsigned char)(*pSPI_RDBR & 0x00FF);		// return LSByte
}

⌨️ 快捷键说明

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