📄 cc1100_ii.c
字号:
//Timer0_Init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK0 = 0x00; //timer 0 interrupt sources
TIMSK1 = 0x00; //timer 1 interrupt sources
TIMSK2 = 0x00; //timer 2 interrupt sources
PCMSK0 = 0x00; //pin change mask 0
PCMSK1 = 0x00; //pin change mask 1
PCMSK2 = 0x00; //pin change mask 2
PCICR = 0x00; //pin change enable
PRR = 0x00; //power controlle
//_SEI(); //re-enable interrupts
}
/*********************************************************/
/*函数名字:SpiTxRx_Byte */
/*输入参数:写入寄存器的数据 */
/*输出参数:读取寄存器的数据 */
/*功能描述:通过SPI 串口读写一字节数据 */
/*建造日期;2008年03月30日 */
/*********************************************************/
unsigned char SpiTxRx_Byte(unsigned char data)
{
unsigned char i, temp = 0;
for (i=0; i<8; i++) //读写八位
{
if (data & 0x80)
{
MOSI_H; //写出高位
}
else
{
MOSI_L; //写出低位
}
SCLK_H; //发出时钟
NOP();
NOP();
data <<= 1;
temp <<= 1; //数据左移
if (MISO_H)
{
temp += 1 ; //记录高位
}
else
{
temp += 0; //记录低位
}
SCLK_L; //结束时钟
NOP();
NOP();
}
return temp; //返回数据
}
/*********************************************************/
/*函数名字:RESET_CC1100 */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:写入复位滤波命 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void RESET_CC1100(void)
{
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte(CC_SRES); //复位命令
while (MISO_H); //等待响应
CSN_H; //结束使能
}
/*********************************************************/
/*函数名字:POWER_UP_RESET_CC1100 */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:模块上电初始化 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void POWER_UP_RESET_CC1100(void)
{
CSN_H; //上电拉高
SCLK_H,MOSI_L; //
delay_ns(1); //
CSN_L; //片选使能
delay_ns(1); //
CSN_H; //选择拉高
delay_ns(80); //
SCLK_L; //拉低时钟
RESET_CC1100(); //复位命令
}
/*********************************************************/
/*函数名字:Init_cc1100 */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:初始化模块 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void Init_cc1100(void)
{
POWER_UP_RESET_CC1100(); //上电复位
WriteRfSettings(); //写入配置
Spi_Write_Burst(CC_PATABLE,PaTabel,8); //功率配置
Spi_Write_Strobe(CC_SIDLE); //进入空闲
Spi_Write_Strobe(CC_SFRX); //清缓冲区
}
/*********************************************************/
/*函数名字:Spi_Write_Strobe */
/*输入参数:滤波命令 */
/*输出参数:无 */
/*功能描述:写入滤波命令 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void Spi_Write_Strobe(unsigned char strobe)
{
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte(strobe); //写入命令
CSN_H; //结束使能
}
/*********************************************************/
/*函数名字:Spi_Read_Byte */
/*输入参数:寄存器地址 */
/*输出参数:寄存器配置 */
/*功能描述:单字节读取寄存器 */
/*建造日期;2008年03月30日 */
/*********************************************************/
unsigned char Spi_Read_Byte(unsigned char addr)
{
unsigned char value;
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte((addr|Read_Byte)); //送出地址
value = SpiTxRx_Byte(0); //读寄存器
CSN_H; //结束使能
return value; //返回数据
}
/*********************************************************/
/*函数名字:Spi_Read_Status */
/*输入参数:寄存器地址 */
/*输出参数:寄存器配置 */
/*功能描述:单字节读取寄存器 */
/*建造日期;2008年03月30日 */
/*********************************************************/
unsigned char Spi_Read_Status(unsigned char addr)
{
unsigned char value;
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte((addr|Read_Burst)); //送出地址
value = SpiTxRx_Byte(0); //读寄存器
CSN_H; //结束使能
return value; //返回数据
}
/**********************************************************/
/*函数名字:Spi_Write_Byte */
/*输入参数:寄存器地址,配置 */
/*输出参数:无 */
/*功能描述:单字节写入寄存器 */
/*建造日期;2008年03月30日 */
/**********************************************************/
void Spi_Write_Byte(unsigned char addr,unsigned char value)
{
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte(addr); //送出地址
SpiTxRx_Byte(value); //写入配置
CSN_H; //结束使能
}
/**********************************************************/
/*函数名字:Spi_Read_Burst */
/*输入参数:寄存器地址,接收缓冲区首址,接收字节数 */
/*输出参数:结果存储在缓冲区地址 */
/*功能描述:连续读取寄存器数据 */
/*建造日期;2008年03月30日 */
/**********************************************************/
void Spi_Read_Burst (unsigned char addr,unsigned char *buffer,unsigned char count)
{
unsigned char i;
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte((addr|Read_Burst)); //连续读取
for (i = 0; i < count; i++) //
{
buffer[i] = SpiTxRx_Byte(0); //存储数据
}
CSN_H; //结束使能
}
/**********************************************************/
/*函数名字:Spi_Write_Burst */
/*输入参数:寄存器地址,发射缓冲区首址,发送字节数 */
/*输出参数:无 */
/*功能描述:连续写入寄存器数据 */
/*建造日期;2008年03月30日 */
/**********************************************************/
void Spi_Write_Burst(unsigned char addr,unsigned char *buffer,unsigned char count)
{
unsigned char i;
CSN_L; //片选使能
while (MISO_H); //等待响应
SpiTxRx_Byte((addr|Write_Burst)); //连续写入
SpiTxRx_Byte(count);//长度
for (i = 0; i < count; i++) //
{
SpiTxRx_Byte(buffer[i]); //送出数据
}
CSN_H; //结束使能
}
/*********************************************************/
/*函数名字:Spi_Write_Packet */
/*输入参数:发送缓冲区首址,数组长度 */
/*输出参数:无 */
/*功能描述:发送缓冲区数据 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size)
{
unsigned char i;
Spi_Write_Byte(CC_TXFIFO,size); //先送长度
Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size); //发送数据
Spi_Write_Strobe(CC_STX); //发送模式
i = 0;
while (GDO0_L) //等待送出
{
if (i > 10) break; //限时等待
delay_nms(1); //
i++; //
}
i = 0;
while (GDO0_H) //送出完毕
{
if (i > 10) break; //限时等待
delay_nms(1); //
i++; //
}
delay_nms(1);
Spi_Write_Strobe(CC_SFTX); //清缓冲区
Spi_Write_Strobe(CC_SIDLE); //进入空闲
Spi_Write_Strobe(CC_SRX); //进入接收
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -