📄 cc1100_func.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 + -