📄 cc1100.c
字号:
/****************************************************/
/* Application note */
/* Reference design : CC1100 RF Test Board */
/* File: CC1100.c */
/* Revision: 1.0 */
/* Description: */
/* Microcontroller:ATmega48/48V */
/* Author: Zcg, Field Applications Engineer, SunRay*/
/****************************************************/
#include "iom88v.h"
#include "macros.h"
#include "main.h"
#include "CC1100.h"
/*
************************************************************
*Description:复位CC1100
*Arguments :none
*Returns :none
*Notes :
************************************************************
*/
void CC1100Rst (void)
{
INT8U i;
SCLK_H;
SI_L;
CS_L;
CS_H;
for (i = 0; i < 100; i++); //delay 50.63us
SCLK_L;
CS_L;
while (SO_STATE);
ShiftOutByte(CC1100_SRES); //复位命令
while (SO_STATE);
CS_H;
}
/*
************************************************************
*Description:写CC1100控制命令
*Arguments :strobe:控制命令
*Returns :none
*Notes :
************************************************************
*/
void CC1100Strobe (INT8U strobe)
{
SCLK_L; //写控制命令
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
ShiftOutByte(strobe);
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
}
/*
************************************************************
*Description:读CC1100单个寄存器
*Arguments :addr:地址
*Returns :数据
*Notes :
************************************************************
*/
INT8U CC1100ReadReg (INT8U addr)
{
INT8U value;
SCLK_L; //写地址
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
addr |= 0x80; //读寄存器地址
ShiftOutByte(addr);
value = ShiftInByte(); //读数据
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
return value;
}
/*
************************************************************
*Description:写CC1100单个寄存器
*Arguments :addr:地址; value:数据
*Returns :none
*Notes :
************************************************************
*/
void CC1100WriteReg (INT8U addr, INT8U value)
{
SCLK_L; //写地址
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
ShiftOutByte(addr);
ShiftOutByte(value); //写数据
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
}
/*
************************************************************
*Description:读CC1100状态寄存器
*Arguments :addr:地址
*Returns :状态值
*Notes :
************************************************************
*/
INT8U CC1100ReadStatus (INT8U addr)
{
INT8U value;
SCLK_L; //写地址
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
addr |= 0xC0; //读状态寄存器地址
ShiftOutByte(addr);
value = ShiftInByte(); //读状态
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
return value;
}
/*
************************************************************
*Description:连续读CC1100状态寄存器
*Arguments :addr:地址; *buf:读取数据存放寄存器; cnt:所要读取字节个数
*Returns :none
*Notes :
************************************************************
*/
void CC1100ReadBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
{
INT8U i;
SCLK_L; //写地址
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
addr |= 0xC0; //连续读寄存器地址
ShiftOutByte(addr);
for (i = 0; i < cnt; i++) //连续读数据
{
*(buf + i) = ShiftInByte();
}
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
}
/*
************************************************************
*Description:连续写CC1100状态寄存器
*Arguments :addr:地址; *buf:写数据寄存器; cnt:所要写字节个数
*Returns :none
*Notes :
************************************************************
*/
void CC1100WriteBurstReg (INT8U addr, INT8U *buf, INT8U cnt)
{
INT8U i;
INT8U value;
SCLK_L; //写地址
//CS_L;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
addr |= 0x40; //连续写寄存器地址
ShiftOutByte(addr);
for (i = 0; i < cnt; i++) //连续写数据
{
value = *(buf + i);
ShiftOutByte(value);
}
//CS_H;
CS_H; //3V与5V系统相连,保证平时为低电平
CS_L;
}
/*
************************************************************
*Description:利用SPI从CC1100读一个字节
*Arguments :none
*Returns :返回所读字节
*Notes :
************************************************************
*/
INT8U ShiftInByte (void)
{
INT8U i;
INT8U value = 0;
for (i = 0; i < 8; i++) //从SO移入8位数据
{
SCLK_H;
value <<= 1;
if(SO_STATE)
{
value |= 0x01;
}
SCLK_L;
}
return value;
}
/*
************************************************************
*Description:利用SPI向CC1100写一个字节
*Arguments :value:所写字节
*Returns :none
*Notes :
************************************************************
*/
void ShiftOutByte (INT8U value)
{
INT8U i;
for (i = 0; i < 8; i++) //向SI移出8位数据
{
if(value & 0x80)
{
SI_H;
}
else
{
SI_L;
}
SCLK_H;
value <<= 1;
SCLK_L;
}
SI_L; //5V至3V系统设为0V
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -