/*****************************************************************
*This program is written by qian.
*Driver for CMT2300A
*Copy right by Qian JL
*2019/5/17
******************************************************************/
#include "my_spi.h"
#include "CMT2300A_Register.h"
#include "RfCongfig433.92_2.4k_35k.h"
#include "CMT2300_GPIO_Define.h"
#include "CMT2300A_Driver.h"
#include "delay.h"
bool FixedPktLength;
bool RssiTrig;
bool PktRevError;
byte PayloadLength;
byte PktRssi; //with Sign
byte PktRssiCode;
bool PktRevError;
bool RssiTrig;
bool FhssLockTrig;
byte FhssLockChannel;
signed char RssiPeakLock;
byte FhssPeakChannel;
void vSoftReset(void);
bool bGoSleep(void);
bool bGoStandby(void);
bool bGoTx(void);
bool bGoRx(void);
bool bGoSwitch(void);
byte bReadStatus(void);
byte bReadRssi(bool unit_dbm);
//GPIO & Interrupt
void vGpioFuncCfg(byte io_cfg);
void vIntSrcCfg(byte int_1, byte int_2);
void vInt1SrcCfg(byte int_1);
void vInt2SrcCfg(byte int_2);
void vIntSrcEnable(byte en_int);
byte bIntSrcFlagClr(void);
void vEnableAntSwitch(byte mode);
//Fifo packet handle
void vClearFifo(void);
byte bReadFifoFlag(void);
word wReadIntFlag(void);
void vEnableRdFifo(void);
void vEnableWrFifo(void);
void vSetPayloadLength(bool mode, byte length);
void vAckPacket(bool en);
void vWriteFifo(byte dat);
byte bReadFifo(void);
//Config
void vInit(void);
void vCfgBank(word cfg[], byte length);
void vAfterCfg(void);
//appliciation
byte bGetMessage(byte msg[]);
byte bGetMessageByFlag(byte msg[]);
void vSendMessage(byte msg[], byte length);
bool bSendMessageByFlag(byte msg[], byte length);
//FHSS Part
byte FhssChannelRange;
byte FhssChannel;
signed int FhssRssiAvg;
signed char FhssRssiTH;
void vSetChannelOffset(word interval);
void vSetChannel(word channel);
void vSetTxPreamble(word length);
byte bFHSSDetect(void);
void AntSwitch_byhand(byte mode);
/*****************************************************************************************/
byte StatusTemp=0;
/**********************************************************
State Ctrl
**********************************************************/
/**********************************************************
**Name: vSoftReset
**Function: Software reset Chipset
**Input: none
**Output: none
**********************************************************/
void vSoftReset(void)
{
vSpi3Write(((word)CUS_SOFTRST<<8)+0xFF);
delay_ms(15);
}
/**********************************************************
**Name: bGoSleep
**Function: Entry Sleep Mode
**Input: none
**Output: none
**********************************************************/
bool bGoSleep(void)
{
byte tmp;
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_SLEEP);
DelayUs(100);
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_SLEEP)
return(TRUE);
else
return(FALSE);
}
/**********************************************************
**Name: bGoStandby
**Function: Entry Standby Mode
**Input: none
**Output: none
**********************************************************/
bool bGoStandby(void)
{
byte tmp, i;
RssiTrig = FALSE;
PktRevError = FALSE;
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_STBY);
for(i=0; i<50; i++)
{
DelayUs(50);
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_STBY)
break;
}
if(i>=50)
return(FALSE);
else
return(TRUE);
}
/**********************************************************
**Name: bGoTx
**Function: Entry Tx Mode
**Input: none
**Output: none
**********************************************************/
bool bGoTx(void)
{
byte tmp, i;
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_TFS);
for(i=0; i<50; i++)
{
DelayUs(50);
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_TFS)
break;
}
if(i>=50)
return(FALSE);
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_TX);
for(i=0; i<50; i++)
{
DelayUs(50);
tmp=0;
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
StatusTemp= tmp;
if(tmp==MODE_STA_TX)
break;
}
if(i>=50)
return(FALSE);
else
return(TRUE);
}
/**********************************************************
**Name: bGoRx
**Function: Entry Rx Mode
**Input: none
**Output: none
**********************************************************/
bool bGoRx(void)
{
byte tmp, i;
RssiTrig = FALSE;
PktRevError = FALSE;
vSetPayloadLength(FALSE, PayloadLength); //Set traget reveive length
vEnableRdFifo(); //when FIFO Merge Active, set fifo to Rd
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_RFS);
for(i=0; i<50; i++)
{
DelayUs(50);
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_RFS)
break;
}
if(i>=50)
return(FALSE);
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_RX);
for(i=0; i<50; i++)
{
DelayUs(50);
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_RX)
break;
}
if(i>=50)
return(FALSE);
else
return(TRUE);
}
/**********************************************************
**Name: bGoSwitch
**Function: Tx to Rx or Rx to Tx, use for quick switch
**Input: none
**Output: none
**********************************************************/
bool bGoSwitch(void)
{
byte tmp, i, z;
tmp = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if((tmp!=MODE_STA_RX)&&(tmp!=MODE_STA_TX))
return(FALSE);
vSpi3Write(((word)CUS_MODE_CTL<<8)+MODE_GO_SWITCH);
for(i=0; i<50; i++)
{
DelayUs(50);
z = (MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
if(tmp==MODE_STA_RX)
{
if(z==MODE_STA_TX)
break;
}
else
{
if(z==MODE_STA_RX)
break;
}
}
if(i>=50)
return(FALSE);
else
return(TRUE);
}
/**********************************************************
**Name: bReadStatus
**Function: read chipset status
**Input: none
**Output: none
**********************************************************/
byte bReadStatus(void)
{
return(MODE_MASK_STA & bSpi3Read(CUS_MODE_STA));
}
/**********************************************************
**Name: bReadRssi
**Function: Read Rssi
**Input: TRUE------dBm;
FALSE-----Code;
**Output: none
**********************************************************/
byte bReadRssi(bool unit_dbm)
{
if(unit_dbm)
return(bSpi3Read(CUS_RSSI_DBM)-128); //with sig
CMT2300A.rar
5星 · 超过95%的资源 需积分: 50 146 浏览量
2019-06-05
13:30:51
上传
评论 3
收藏 1010KB RAR 举报
钱dark♂隆
- 粉丝: 17
- 资源: 2
最新资源
- note test a bc d e f g h
- MERGE.csv.zip
- 15白落梅:你是锦瑟我为流年:三毛的万水千山-3491776.mobi
- 微信小程序源码 实现 城市切换 demo 根据城市首字母排序城市 选择城市
- 12因为懂得 所以慈悲-张爱玲的倾城往事 (白落梅经典散文系列)-3321089.mobi
- 基于 C# 实现的串口温度监控软件
- 基于STM32F103RBT6单片机+SIM868自动收货机主控板硬件(原理图+PCB)工程文件.zip
- 微信小程序源码 车源宝 二手车交易平台 源码下载
- 专注于在线教育领域,打造更好的网课系统,网校系统,知识付费系统
- ADM487EARZ-REEL7 产品规格书pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈