📄 phy.c
字号:
#include <mega128.h>
#include <spi.h>
#include <delay.h>
#include "phy.h"
#include "CC2420.h"
#include "mcu.h"
#include "compiler.h"
#include "config.h"
/***********************************************************************************************
* 写命令选通寄存器函数
* cmd : 要写入的命令选通寄存器
* bool : 是否由本函数来使能和禁止CSn
* 返回状态字节
************************************************************************************************/
unsigned char WriteStrobeReg_spi(unsigned char cmd)
{
unsigned char Value;
SPI_ENABLE(); //使能 CSn
Value = spi(0x00|cmd);
SPI_DISABLE(); // 禁止 CSn
//delay_ms(1);
return Value;
}
unsigned char WriteStrobeReg(unsigned char cmd)
{
unsigned char Value;
Value = spi(0x00|cmd);
//delay_ms(1);
return Value;
}
/***********************************************************************************************
* 写配置寄存器函数
* cmd : 要写入的配置寄存器
* data : 要写入的数据
* bool : 是否由本函数来使能和禁止CSn
* 返回状态字节
************************************************************************************************/
unsigned char WriteConfigReg_spi(unsigned char cmd, unsigned int data)
{
unsigned char TempH,TempL,Value;
TempH = (data >> 8);
TempL = (data & 0x00FF);
SPI_ENABLE(); //使能 CSn
Value = spi(0x00|cmd);
spi(TempH);
spi(TempL);
SPI_DISABLE(); // 禁止 CSn
//delay_ms(1);
return Value;
}
/***********************************************************************************************
* 读配置寄存器函数
* cmd : 要读的配置寄存器
* 返回配置寄存器的值
************************************************************************************************/
unsigned int ReadConfigReg_spi(unsigned char cmd)
{
unsigned char Status,ValueH,ValueL;
unsigned int Value;
SPI_ENABLE(); //使能 CSn
Status = spi(0x40|cmd);
ValueH = spi(0x00);
ValueL = spi(0x00);
SPI_DISABLE(); // 禁止 CSn
Value = ValueH ;
Value = Value<<8 ;
Value |= ValueL ;
return Value;
}
/***********************************************************************************************
* 写TXFIFO函数
* data : 要写入的数据的指针
* n : 要写入的数据的长度
************************************************************************************************/
void Write_TXFIFO(unsigned char *data,unsigned char n)
{
unsigned char i;
SPI_ENABLE();
WriteStrobeReg(CC2420_TXFIFO);
for (i = 0; i < (n); i++)
{
spi(*data++);
}
SPI_DISABLE();
}
/***********************************************************************************************
* 写RAM函数
* cmd : 要写入的配置寄存器
* data[] : 要写入的数据
* n : 要写入数据的长度
* bool : 是否由本函数来使能和禁止CSn
************************************************************************************************/
void WriteRAM_spi(unsigned int cmd,unsigned char data[],unsigned char n)
{
unsigned char cmdTempH,cmdTempL,i;
cmdTempH = (0x007F & cmd);
cmdTempL = ((cmd>>1) & 0x00C0);
SPI_ENABLE(); // 使能 CSn
spi(0x80|cmdTempH);
spi(0x00|cmdTempL);
for(i=0; i<n; i++)
{
spi(data[i]);
}
SPI_DISABLE(); // 禁止 CSn
delay_ms(1);
}
/***********************************************************************************************
* 读RAM函数
* cmd : 要读的RAM区域
* 返回读出的数据
************************************************************************************************/
unsigned char ReadRAM(unsigned int cmd)
{
unsigned char cmdTempH,cmdTempL;
unsigned char Value;
cmdTempH = (0x007F & cmd);
cmdTempL = ((cmd>>1) & 0x00C0);
spi(0x80|cmdTempH);
Value = spi(0x20|cmdTempL);
delay_ms(1);
return Value;
}
/***********************************************************************************************
* 物理层初始化函数
************************************************************************************************/
void PHY_Init(void)
{
PORT_Init();
SPI_Init();
if( I_Am_What == COORDINATOR )
USART0_Init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -