📄 cc1100_tx.c
字号:
//-----------------------------------------------------------------------------
// CC1100.c
//-----------------------------------------------------------------------------
// Copyright (C) 2005 Silicon Laboratories, Inc.
//
// AUTH: JS
// DATE: 03 JUL 02
//
// This program flashes the green LED on the C8051F31x target board about
// five times a second using the interrupt handler for Timer2.
//
// Target: C8051F31x
//
// Tool chain: KEIL Eval 'c'
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f310.h> // SFR declarations
#include <intrins.h>
#include <string.h>
#include "CC1100.h"
#define INT8U unsigned char
#define INT16U unsigned int
#define WRITE_BURST 0x40 //连续写入
#define READ_SINGLE 0x80 //读
#define READ_BURST 0xC0 //连续读
#define BYTES_IN_RXFIFO 0x7F //接收缓冲区的有效字节数
#define CRC_OK 0x80 //CRC校验通过位标志
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F30x
//-----------------------------------------------------------------------------
sfr16 TMR2RL = 0xca; // Timer2 reload value
sfr16 TMR2 = 0xcc; // Timer2 counter
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define SYSCLK 24500000 // SYSCLK frequency in Hz
#define BAUDRATE 9600
//----------------------------------------------------------------------------------------------------------
//定义CC1100模块接口
sbit SCK = P0^0;
sbit MISO = P0^1;
sbit MOSI = P0^6;
sbit GDO0 = P0^7;
sbit CS_CC1100 = P2^0;
sbit GDO2 = P2^1;
//定义接口
sbit TX = P0^4;
sbit RX = P0^5;
sbit LED = P3^3; // LED='0' means ON
/****************************************************************************************
//全局变量定义
/****************************************************************************************/
INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init(void);
void SendCh(INT8U c);
void delay(unsigned int s);
INT8U SpiReadWrite(INT8U dat);
void halSpiWriteReg(INT8U addr, INT8U value);
void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count);
void halSpiStrobe(INT8U strobe);
INT8U halSpiReadReg(INT8U addr);
void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count);
INT8U halSpiReadStatus(INT8U addr);
void halWait(INT16U timeout);
void RESET_CC1100(void);
void POWER_UP_RESET_CC1100(void);
void halRfWriteRfSettings(void);
void Init_CC1100(void);
void halRfSendPacket(INT8U *txBuffer,INT8U size);
INT8U halRfReceivePacket(INT8U *rxBuffer,INT8U length);
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void) {
// INT8U TT,TT1;
INT8U arrTx[4];
INT8U arrRx[4]={0x55,0x22,0x65,0xAA};
PCA0MD &= ~0x40; //disable watchdog timer
PORT_Init();
SYSCLK_Init();
UART0_Init();
//
// TT1=SpiReadWrite(TT);
Init_CC1100();
// LED = 0;
//
// SendCh(0x55);
// halSpiWriteReg(CCxxx0_FSCTRL0,rfSettings.FSCTRL2);
arrTx[0] = 0x55;
arrTx[1] = 0x0A;
arrTx[2] = 0xCC;
arrTx[3] = 0x33;
while(1)
{
halRfSendPacket(arrTx, 4);
LED =~LED;
delay(60000);
// if(halRfReceivePacket(arrRx,4))
// {
// SendCh(arrRx[0]);
// SendCh(arrRx[1]);
// SendCh(arrRx[2]);
// SendCh(arrRx[3]);
// }
}
}
/*****************************************************************************************
//函数名:void PORT_Init (void)
//输入:无
//输出:无
//功能描述:
/*****************************************************************************************/
void PORT_Init (void)
{
P0MDOUT = 0x51;
P2MDOUT = 0x01;
P3MDOUT = 0x08;
XBR0 = 0x01;
XBR1 = 0xC0;
CS_CC1100 = 1;
SCK = 0;
MISO = 1;
MOSI = 0;
GDO0 = 1;
GDO2 = 1;
LED = 1;
CS_CC1100 = 1;
}
void SYSCLK_Init(void)
{
OSCICN = 0x83;
CLKSEL = 0x00;
}
/*****************************************************************************************
//函数名:void UART0_Init(void)
//功能描述:初始化串口0,9600,8,N
/*****************************************************************************************/
void UART0_Init(void)
{
SCON0 = 0x10; //串口方式1,8,允许接收
TMOD |= 0x20; //定时器1工作方式1,8 autoload
TH1 = 0x96;
TL1 = 0x96;
TR1 = 1; //启动定时器1
ES0 = 0;
}
/*****************************************************************************************
//函数名:void SendCh(INT8U c)
//输入:无
//输出:无
//功能描述:串口发送一个字符
/*****************************************************************************************/
void SendCh(INT8U c)
{
EA = 0;
TI0 = 0;
SBUF0 = c;
while(!TI0);
TI0 = 0;
EA = 1;
}
//*****************************************************************************************
//函数名:void delay(unsigned int s)
//输入:时间
//输出:无
//功能描述:普通廷时
//*****************************************************************************************
void delay(unsigned int s)
{
unsigned int i;
for(i=0; i<s; i++);
for(i=0; i<s; i++);
for(i=0; i<s; i++);
}
//*****************************************************************************************
//函数名:INT8U SpiReadWrite(INT8U dat)
//输入:发送的数据
//输出:无
//功能描述:SPI发送一个字节
//*****************************************************************************************
INT8U SpiReadWrite(INT8U dat)
{
INT8U i,temp;
temp = 0;
SCK = 0;
_nop_();
for(i=0; i<8; i++)
{
if(dat & 0x80)
{
MOSI = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -