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

📄 cc1100.c

📁 chipcom公司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 + -