📄 protocol.h
字号:
/*
*
* 文件名 : protocol.c
*
* 程序描述:有关CC1100之间通信过程的相关定义
*
* author : 陈思
*
*/
#ifndef PROTOCOL_H
#define PROTOCOL_H
#include "cc1100.h"
// 设置GDO2 为外部中断0,用来检测数据发送和接收检测
#define GDO2_INT0() do{ spiWriteReg(CC1100_IOCFG2,0x06); }while(0)
// 设置USART数据接收完成中断
#define USART_RECINT_ENABLE() do{ UCSR0B |= (1<<RXCIE0); }while(0)
// 关闭此中断
#define USART_RECINT_DISABLE() do{ UCSR0B &= ~(1<<RXCIE0); }while(0)
// 设置数据报类型函数
BOOL setPktType( PacketType pktType)
{
BYTE regVal;
//ErroState ret;
regVal = spiReadReg(CC1100_PKTCTRL0); // 读取PKTCTRL0
if(pktType == FIX_LENGTH)
{
regVal |= 0x03;
regVal &= 0xFC; // 设置数据报为固定长度,需要配置PKTLEN寄存器
}
else if(pktType == DEFINED_LENGTH)
{
regVal |= 0x03;
regVal &= 0xFD;
}
else
return FALSE;
spiWriteReg(CC1100_PKTCTRL0,regVal);
//ret = NO_ERRO;
return TRUE;
}
// 在固定数据报长度时,配置数据报的长度
// 如果有地址域,则地址也要占用一个BYTE
BOOL setPktLen(BYTE pktLength)
{
//ErroState ret;
if(pktLength >1 && pktLength <= 255)
spiWriteReg(CC1100_PKTLEN,pktLength);
else
return FALSE;
//ret= NO_ERRO;
return TRUE;
}
// 设置发送方式
BOOL setSendType(SendType sendType)
{
BYTE regVal;
//ErroState ret;
regVal = spiReadReg(CC1100_PKTCTRL1);
if(sendType == NO_ADDRESS)
{
regVal |= 0x03;
regVal &= 0xFC;
}
else if(sendType == UNICAST)
{
regVal |= 0x03;
regVal &= 0xFD;
}
else if(sendType == BROADCAST)
{
regVal |= 0x03;
regVal &= 0xFE;
}
else
//ret = NOT_MATCH;
return FALSE;
spiWriteReg(CC1100_PKTCTRL1,regVal);
// ret = NO_ERRO;
return TRUE;
}
// 设置CC1100的地址
BOOL setAddress(BYTE addr)
{
//ErroState ret;
if(addr >=0 && addr <= 255)
spiWriteReg(CC1100_ADDR,addr);
else
//ret = NOT_MATCH;
return FALSE;
// ret= NO_ERRO;
return TRUE;
}
// 系统初始化相关函数
// setup the interupt INT0 for GDO2
void GDO2Int()
{
SREG |= (1<<GIE);
EICRA |= (1<<ISC00)|(1<<ISC01);
//EICRA &= ~(1<<ISC00);
EIMSK |= (1<<INT0);
}
// 配置MCU的SPI口
void SpiInit()
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCLK)|(1<<DD_SS);
PORT_SPI &= ~(1<<DD_MOSI);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
SPCR |= (0<<CPHA)|(0<<CPOL);
SPCR &= ~(BIT(DORD));
DDRD &= ~BIT(DDD5);
}
// MCU的USART(通用串口)初始化,可以配置波特率
void serialInit(UINT16 baudrate)
{
// 设置串口模式为:8个数据位,1个停止位,无奇偶校验
UCSR0C = (3<<UCSZ00);
// 配置波特率
UBRR0H = (BYTE)(baudrate>>8);
UBRR0L = (BYTE)baudrate;
// 打开串口发送和接收使能
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
//打开接收中断
USART_RECINT_ENABLE();
}
/*
// USART接收一个字节函数
BYTE USART_RECIEVE_BYTE(void)
{
//Wait for data to be received
while ( !(UCSR0A & (1<<RXC0)) )
;
// Get and return received data from buffer
return UDR0;
}
// USART接收固定长度的数据
void USART_RECIEVE_PKT(BYTE *data,BYTE count)
{
UINT8 i;
for(i = 0;i < count;i ++)
{
data[i] = USART_RECIEVE_BYTE();
}
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -