Files
hpw421/component/boot2/bsp/bsp_2_4G.h
T
2026-07-03 18:08:25 +08:00

238 lines
7.3 KiB
C

#ifndef _BSP_2_4_G_H_
#define _BSP_2_4_G_H_
#include "Includes.h"
#define _2_4G_BASE 0x50003000
#define CFG_TOP ((volatile unsigned *)(_2_4G_BASE + 0x00))
#define EN_AA ((volatile unsigned *)(_2_4G_BASE + 0x04))
#define EN_RXADDR ((volatile unsigned *)(_2_4G_BASE + 0x08))
#define SETUP_AW ((volatile unsigned *)(_2_4G_BASE + 0x0C))
#define SETUP_RETR ((volatile unsigned *)(_2_4G_BASE + 0x10))
#define RF_CH ((volatile unsigned *)(_2_4G_BASE + 0x14))
#define SETUP_RF ((volatile unsigned *)(_2_4G_BASE + 0x18))
#define STATUS ((volatile unsigned *)(_2_4G_BASE + 0x1C))
#define OBSERVE_TX ((volatile unsigned *)(_2_4G_BASE + 0x20))
#define RSSI ((volatile unsigned *)(_2_4G_BASE + 0x24))
#define RX_ADDR_P0_L ((volatile unsigned *)(_2_4G_BASE + 0x28))
#define RX_ADDR_P0_H ((volatile unsigned *)(_2_4G_BASE + 0x2C))
#define RX_ADDR_P1_L ((volatile unsigned *)(_2_4G_BASE + 0x30))
#define RX_ADDR_P1_H ((volatile unsigned *)(_2_4G_BASE + 0x34))
#define RX_ADDR_P2TOP5 ((volatile unsigned *)(_2_4G_BASE + 0x38))
#define BER_RESULT_L ((volatile unsigned *)(_2_4G_BASE + 0x3C))
#define BER_RESULT_H ((volatile unsigned *)(_2_4G_BASE + 0x40))
#define AGC_SETTING ((volatile unsigned *)(_2_4G_BASE + 0x44))
#define PGA_SETTING_L ((volatile unsigned *)(_2_4G_BASE + 0x48))
#define PGA_SETTING_H ((volatile unsigned *)(_2_4G_BASE + 0x50))
#define TX_ADDR_L ((volatile unsigned *)(_2_4G_BASE + 0x4C))
#define TX_ADDR_H ((volatile unsigned *)(_2_4G_BASE + 0x50))
#define RX_PW_PX_L ((volatile unsigned *)(_2_4G_BASE + 0x54))
#define RX_PW_PX_H ((volatile unsigned *)(_2_4G_BASE + 0x58))
#define STATUS_FIFO ((volatile unsigned *)(_2_4G_BASE + 0x80))
#define RSSIREC ((volatile unsigned *)(_2_4G_BASE + 0x84))
#define TXPROC_CFG ((volatile unsigned *)(_2_4G_BASE + 0x88))
#define RXPROC_CFG_L ((volatile unsigned *)(_2_4G_BASE + 0x8C))
#define RXPROC_CFG_H ((volatile unsigned *)(_2_4G_BASE + 0xA8))
#define DYNPD ((volatile unsigned *)(_2_4G_BASE + 0x94))
#define FEATURE ((volatile unsigned *)(_2_4G_BASE + 0x98))
#define CMD_BYTE ((volatile unsigned *)(_2_4G_BASE + 0xC0))
#define TXFIFO_WDATA ((volatile unsigned *)(_2_4G_BASE + 0xC4))
#define RXFIFO_RDTA ((volatile unsigned *)(_2_4G_BASE + 0xC8))
#define RXFIFO_LEN ((volatile unsigned *)(_2_4G_BASE + 0xCC))
#define R_REG 0x00
#define W_REG 0x20
#define R_RX_PLOAD 0x61
#define W_TX_PLOAD 0xA0
#define FLUSH_TX 0xE1
#define FLUSH_RX 0xE2
#define REUSE_TX_PL 0xE3
#define R_RX_PL_WID 0x60
#define W_ACK_PLOAD 0xA8
#define W_TX_PLOAD_NOACK 0xB0
#define CMD_NOP 0xFF
#define CMD_DONE 0x100
#define TX_REUSE (0x1 << 6)
#define TX_FULL (0x1 << 5)
#define TX_EMPTY (0x1 << 4)
#define RX_FULL (0x2)
#define RX_EMPTY (0x1)
/* STATUS Interrupt status */
#define XC_RX_DR (0x1 << 6)//@
#define XC_TX_DS (0x1 << 5)//@
#define XC_MAX_RT (0x1 << 4)//@
#define ALL_IRQ_STATUS (0x70)//@
//
#define EN_LONG_PLD 1
#define EN_FEC 1
#define EN_WHITEN 1
#define EN_DPL 1
#define EN_ACK_PAY 1
#define DIS_LONG_PLD 0
#define DIS_FEC 0
#define DIS_WHITEN 0
#define DIS_DPL 0
#define DIS_ACK_PAY 0
#define EN_CRC 1
#define DIS_CRC 0
#define CRC_1BIT 1
#define CRC_2BIT 2
#define setbit_array(x,y) (setbit((x)[(y)/8],(y)%8))
#define clrbit_array(x,y) (clrbit((x)[(y)/8],(y)%8))
#define CE_High *CFG_TOP |=0x4000
#define CE_Low *CFG_TOP &=(~0x4000)
#define TX_MODE 0x0
#define RX_MODE 0x1
#define nop() __NOP();\
__NOP();\
__NOP();\
__NOP()
extern void send_cmd(uint8_t cmd);
extern void BLEcrc(const uint8_t* data, uint8_t dataLen, uint8_t* outputCRC);
extern void bleWhiten(uint8_t* data, uint8_t len, uint8_t whitenCoeff);
extern uint8_t bleWhitenStart(uint16_t Fre);
extern uint8_t reverseBits(uint8_t input);
extern uint8_t XC_RxPacket(uint8_t en_ack_pay,uint8_t *ack_buf,uint8_t ack_len,uint8_t *rxbuf);
extern void XC_TxPacket(uint8_t *txbuf, uint8_t len);
extern void init_24G(uint8_t mode);
extern void init_adv(uint8_t mode);
extern void set_channel(uint16_t channel);
extern void config_2_4g_rf(void);
extern void set_power(uint8_t gc);
void set_txaddr(uint32_t txaddr_l,uint32_t txaddr_h);
void set_pipe0_rxaddr(uint32_t rxaddr_l,uint32_t rxaddr_h);
void set_trx_addr_len(uint8_t len);
void set_rate(uint8_t rate);
void set_feature(uint8_t long_pld,uint8_t fec,uint8_t whiten,uint8_t dpl,uint8_t ack_pay);
void set_mode(uint8_t mode);
void set_crc(uint8_t enable,uint8_t crc_bit);
void set_p012345_revlen(uint32_t p0123len,uint32_t p45len);
void set_pipe0_revlen(uint8_t p0len);
void rf_rccalib(void);
void go_tx(uint16_t ch);
void go_rx(uint16_t ch);
void rx_24g_ota(void);
uint8_t wait_ack(uint8_t *ack_pay_buf,uint8_t *len,uint32_t timeout);
void set_retry_cnt(uint8_t ch);
/////////////////////////////////////////////////////////
#define CLK_BBPLL64M 0
#define CLK_BBPLL96M 1
#define _24G_CLK_SOURCE CLK_BBPLL96M
/////////////////////////////////////////////////////////
#define BUFF_ADV_LENGTH 15
#define BUFF_24G_LENGTH 32
#define BUFF_24G_ACK_PAY_LENGTH 7
/////////////////////////////////////////////////////////
#define RF_ADV_CHANNELS_37 2402
#define RF_ADV_CHANNELS_38 2426
#define RF_ADV_CHANNELS_39 2480
#define RF_ADV_CHANNELS RF_ADV_CHANNELS_38
#define CHANNEL_24G 2402
/////////////////////////////////////////////////////////
#define RATE_2M 0x0A
#define RATE_1M 0x02
#define RATE_250K 0x22
#define RATE_125K 0x2A
//#define TRANS_RATE RATE_250K
//#define TRANS_RATE RATE_1M
#define TRANS_RATE RATE_1M //RATE_250K RATE_125K RATE_1M
/////////////////////////////////////////////////////////
#define POWER_LEVEL 0x10 /////tip:1M Max Power 0x2c(6.8dbm)
/////////////////////////////////////////////////////////
//#define USE_24G_IRQ
/////////////////////////////////////////////////////////
#define ACK_TOMEOUT 0x10000 //4550
/////////////////////////////////////////////////////////
#define TEST_SINGLE 0
#define TEST_24G 1
#define TEST_ADV 0
#define TEST_SWITCH_24G 0
/////////////////////////////////////////////////////////
#define DEBUG1
//#define DEBUG2
#define FLASH_BIN_ADDR_OFFSET (0x3000)
#define PACKET_LENGTH (29)
enum{
STATUS_OK=0,
STATUS_FAIL=1,
STATUS_BUSY=2,
STATUS_READY=3,
};
enum{
rFALSE=0,//false
rTRUE=1, //true
};
typedef struct{
uint32_t SoftVer;/**/
uint32_t RomVer;
uint32_t Len;/*file len*/
uint32_t CRC32;/*crc32*/
uint32_t PacketNum;
uint32_t cPacketNo;
uint32_t Channel;
uint32_t AddrH;
uint32_t AddrL;
uint32_t FrameNum;
uint32_t cFrameNo;
uint32_t WriteAddr;
uint32_t DataStatus:8;
uint32_t CheckStatus:8;
uint32_t RevComplete:8;
uint32_t ResStatus1:8;
}INFO_24G;
extern volatile INFO_24G info_24g;
#endif