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

📄 cc1100_func.c

📁 用c8051f310开发的433M无线模块cc1100的完整程序
💻 C
字号:
/******************************************************************************
文件名:	CC1100_func.c
说  明:	本文件包含了访问CC1100的函数。
作  者:	赵华森
开  始:	2008.2.29
修  改:	V1.0 初次开发实验调试。
******************************************************************************/
#include "CC1100_z.h"
#include "CC1100_MCU_z.h"
#include "CC1100_func.h"
#include "CC1100_SMARTRF.h"	//SmartRF Stdio软件计算的CC1100寄存器配置值。

/******************************************************************************
函数名称:	void Write_Register( unsigned addr, unsigned char byte )
函数功能:	将byte写入addr寄存器中。更新状态字节。
入口参数:	(1)addr = CC1100寄存器地址。
		(2)byte = 写入的数据。
返回值:	无
******************************************************************************/
void Write_Register( unsigned char addr, unsigned char byte )
{
	Start_SPI;	//SPI操作开始
	write_spi( addr | CC1100_WRITE_SINGLE );	//调用硬件相关的函数
	write_spi( byte );		//(硬件相关的函数)
	Stop_SPI;	//SPI操作结束。
}
/******************************************************************************
函数名称:	unsigned char Read_regsiter( unsigned addr )
函数功能:	读addr寄存器内容。更新状态字节。
入口参数:	addr = CC1100寄存器地址。
返回值:	addr寄存器内容。
******************************************************************************
unsigned char Read_Register( unsigned char addr )
{
	Start_SPI;	//SPI操作开始
	write_spi( addr | CC1100_READ_SINGLE );	//(硬件相关的函数)
	addr = read_spi();		//硬件相关的函数
	Stop_SPI;	//SPI操作结束。
	return (addr);
}*/

/******************************************************************************
函数名称:	unsigned char turn_CC1100( unsigned char cmd )
函数功能:	写命令。更新状态字节。
入口参数:	cmd = 命令。
返回值:	状态字节的状态位。
******************************************************************************/
unsigned char turn_CC1100( unsigned char cmd )
{
	Start_SPI;
	cmd = write_spi( cmd | CC1100_WRITE_SINGLE );	//(调用硬件相关的函数)
	Stop_SPI;
	cmd &= 0x70;
	return ( cmd );
}

/******************************************************************************
函数名称:	void Set_function( void )
函数功能:	根据本应用补充变更配置CC1100。
入口参数:	无
返回值:	无。
******************************************************************************/
void CC1100_function( void )
{
//	PA_Power = 8;		//输出功率复位值=8(+10dBm)
	Write_Register( CC1100_PATABLE, 0xC0 );		//输出功率=+10dBm。
//	RF_channel = 0;		//无线信道复位值=0(0信道)
	Write_Register( CC1100_CHANNR, 0);		//无线信道=0。
//	Node_Address = 1;	//节点地址=1
	Write_Register( CC1100_ADDR, 0 );	//节点地址=1。
//设置包控制
//	Write_Register( CC1100_PKTCTRL1, 0x0A );	//无前序门限、CRC失败清RXFIFO、无附加状态字节、允许节点地址核对(0=广播地址)。
	Write_Register( CC1100_PKTCTRL1, 0x08 );	//无前序门限、CRC失败清RXFIFO、无附加状态字节、无节点地址核对。
	Write_Register( CC1100_PKTCTRL0, 0x44 );	// 白化开、正常使用FIFO、允许CRC校验、定长模式。
//	Write_Register( CC1100_PKTLEN,   34 );		// 地址(1)+URX包剩余字节(1)+数据(32)。
	Write_Register( CC1100_PKTLEN,   33 );		// 定长=33字节(URX包剩余字节(1)+数据(32))。
//	Write_Register( CC1100_PKTCTRL0, 0x45 );	// 白化开、正常使用FIFO、允许CRC校验、变长模式。
//	Write_Register( CC1100_PKTLEN,   64 );		// 限长64字节。
//管脚控制定义
	Write_Register( CC1100_IOCFG2, 0x07 );	// 1=收到CRC OK包,0=MCU取走第一个字节。
	Write_Register( CC1100_IOCFG0, 0x06 );	//1=开始收/发同步字。0=完成或错误(收:地址错/溢出,发:亏欠)。
//校准:IDLE切换到TX/RX时校准:MCSM0=Smart值(0x18)。
//收发完成:返回IDEL:MCSM1=0x30(复位值)。

}

/******************************************************************************
函数名称:	void Recover_TEST( void )
函数功能:	SLEEP或XOFF时不保留这些寄存器,故唤醒后必须恢复。更新状态字节。
入口参数:	无。其值由Smart Stdio软件给出
返回值:	无。
******************************************************************************/
void Recover_TEST( void )
{
//以下4个寄存器用于测试目的,由于SLEEP不保留其内容,故唤醒后必须重写。其值由SmartRF Stdio软件给出。
	Write_Register( CC1100_FSTEST,   SMARTRF_SETTING_FSTEST );	// 频率合成器校准值寄存器。
	Write_Register( CC1100_TEST2,    SMARTRF_SETTING_TEST2 );	// 多种测试寄存器2。
	Write_Register( CC1100_TEST1,    SMARTRF_SETTING_TEST1 );	// 多种测试寄存器1。
	Write_Register( CC1100_TEST0,    SMARTRF_SETTING_TEST0 );	// 多种测试寄存器0。多信道时每个信道该值不同。
}

/******************************************************************************
函数名称:	void turn_IDLE( void )
函数功能:	切换并验证进入IDEL状态。
入口参数:	无
返回值:	无
******************************************************************************/
void turn_IDLE( void )
{
	turn_CC1100( CC1100_SIDLE );
	while ( Test_CC1100( CC1100_STATE_IDLE ) );
}

/******************************************************************************
函数名称:	void turn_FRX( void )
函数功能:	切换并验证进入RX状态。
入口参数:	无
返回值:	无。
******************************************************************************/
void turn_FRX( void )
{
	turn_CC1100( CC1100_SRX );
	while ( Test_CC1100( CC1100_STATE_RX ) );
}

/******************************************************************************
函数名称:	void turn_FTX( void )
函数功能:	切换到TX状态。
入口参数:	无
返回值:	无。
******************************************************************************/
void turn_FTX( void )
{
	turn_CC1100( CC1100_STX );
	while ( !CC1100_GDO0 );
}
/******************************************************************************
函数名称:	void Write_URX_buf_32( unsigned char i )
函数功能:	将1个分组写入TXFIFO中。更新状态字节。
入口参数:	无。
返回值:	无。
******************************************************************************/
void Write_URX_buf_33( void )
{
	unsigned char i;

	Start_SPI;	//SPI操作开始
	write_spi( CC1100_TXFIFO | CC1100_WRITE_BURST );	//调用硬件相关的函数
	i = 32;
	do
	{
		write_spi( *FTX_ptr );
		FTX_ptr++;
	}
	while ( --i );
	write_spi( FTX_len );	//本分组的字节数。
	Stop_SPI;	//SPI操作结束。
}

/******************************************************************************
函数名称:	void read_UTX_buf_32( void )
函数功能:	读取RXFIFO中1个分组
入口参数:	无。
返回值:	无。更新状态字节。
******************************************************************************/
void read_UTX_buf_33()
{
	unsigned char i;

	Start_SPI;	//SPI操作开始
	write_spi( CC1100_RXFIFO | CC1100_READ_BURST );	//调用硬件相关的函数
	i = 32;
	do
	{	//读取1个分组读入UTX缓冲区。
		*FRX_ptr = read_spi();	//正式
		FRX_ptr++;
	}
	while ( --i );
	FRX_len = read_spi();
	Stop_SPI;	//SPI操作结束。
}



/******************************************************************************
函数名称:	void clear_RXFIFO( void )
函数功能:	清除RXFIFO。
入口参数:	无。
返回值:	无。
******************************************************************************/
void clear_RXFIFO( void )
{
	turn_CC1100( CC1100_SFRX );
	while ( Test_CC1100( CC1100_STATE_IDLE ) );
}

/******************************************************************************
函数名称:	void clear_TXFIFO( void )
函数功能:	清除TXFIFO。
入口参数:	无。
返回值:	无。
******************************************************************************/
void clear_TXFIFO( void )
{
	turn_CC1100( CC1100_SFTX );
	while ( Test_CC1100( CC1100_STATE_IDLE ) );
}

/******************************************************************************
函数名称:	bit Test_CC1100( ss )
函数功能:	读状态字节5次,判断是否为ss状态。
入口参数:	ss = 状态参数。
返回值:	0=正确,1=错误。
******************************************************************************/
bit Test_CC1100( unsigned char ss )
{
	unsigned char i = 5;
	bit k = 1;

	do
	{
		if ( turn_CC1100( CC1100_SNOP ) == ss )
		{
			k = 0;
			i = 1;
		}
	}
	while ( --i );
	return ( k );
}
/******************************************************************************
函数名称:	void Set_Channel( void )
函数功能:	根据RF_channel单元内容,更换无线信道。更新状态字节。
入口参数:	无。RF_Channel:0~7对应433.099792 MHz~434.499451(间隔约200kHz)。
返回值:	无。更新状态字节。
******************************************************************************
void Set_channel( void )
{
	if ( RF_channel < 8 )	//大于7,无效。
	{
		Write_Register( CC1100_CHANNR, RF_channel);
	}
}

/******************************************************************************
函数名称:	void Set_Node_Address( void )
函数功能:	根据Node_Address单元内容,更换本芯片的节点地址。更新状态字节。
入口参数:	无。Node_Adderss:0~0xFF对应0~255号节点地址,其中0和255为广播地址。
返回值:	无。更新状态字节。
******************************************************************************
void Set_Node_Address( void )
{
	if ( Node_Address != 0xFF )	//0xFF无效。
	{
		Write_Register( CC1100_ADDR, Node_Address );
	}
}




/******************************************************************************
函数名称:	unsigned char Write_burst( unsigned addr, unsigned char *ptr, unsigned char n )
函数功能:	将数据缓冲区的数据写入addr开始的n个寄存器中。
入口参数:	(1)addr = CC1100寄存器地址(n=0时为命令)。
		(2)*ptr = 数据缓冲区的指针。
		(3)n = 0,只写入addr(命令)。
		     n = 1,只写入1个字节(单字节写)。
		     n = 2~255,连续写入n个字节(组写入)。
返回值:	写入addr时返回的CC1100的状态字节。
******************************************************************************/
/*
unsigned char Write_burst( unsigned char addr, unsigned char *ptr, unsigned char n)
{
	Start_SPI;
	addr = write_spi( addr | CC1100_WRITE_BURST );
	do
	{
		write_spi( *ptr );	//写入n个字节数据(硬件相关的函数)
		ptr++;
	}
	while ( --n );
	Stop_SPI;
	return (addr);
}
*/
/******************************************************************************
函数名称:	unsigned char Read_burst( unsigned addr, unsigned char *ptr, unsigned char n )
函数功能:	读出addr开始的n个寄存器内容到数据缓冲区。
入口参数:	(1)addr = CC1100寄存器地址(n=0时为命令)。
		(2)*ptr = 读出数据缓冲区的指针。
		(3)n = 0,只读出状态字节。
		     n = 1,只读出addr的内容(单字节读)。
		     n = 2~255,连续读出n个字节(组读出)。
返回值:	写入addr时返回的CC1100的状态字节。
******************************************************************************/
/*
unsigned char Read_burst( unsigned char addr, unsigned char *ptr ,unsigned char n)
{
	Start_SPI;
	addr = write_spi( addr | CC1100_READ_BURST );
	do
	{
		*ptr = read_spi ();	//读出n个字节数据(硬件相关的函数)
		ptr++;
	}
	while ( --n );
	Stop_SPI;
	return (addr);
}
*/

⌨️ 快捷键说明

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