hpw422移植新的sdk

This commit is contained in:
xushaoxiang
2026-07-03 18:08:25 +08:00
commit 945a5a5b0b
2583 changed files with 713209 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,245 @@
/*!
* \file rf_2_4g.h
*
* \brief The head file of rf_2_4g.c
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __RF_2_4G_H__
#define __RF_2_4G_H__
#ifdef __cplusplus
extern "C"
{
#endif
/*-----------------------------------------------------------------------------------
INCLUDE HEADE FILES
------------------------------------------------------------------------------------*/
#include "rf_config.h"
#include "xc6xxx.h"
#include "xc_rf_24g_register.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
/* RF Command Code */
#define R_REG 0x00
#define W_REG 0x20
#define R_RX_PL_WID 0x60
#define R_RX_PLOAD 0x61
#define W_TX_PLOAD 0xA0
#define W_TX_PLOAD_NOACK 0xB0
#define W_ACK_PLOAD 0xA8
#define FLUSH_TX 0xE1
#define FLUSH_RX 0xE2
#define REUSE_TX_PL 0xE3
#define CMD_NOP 0xFF
#define CMD_DONE 0x100
/* FIFO status */
#define STAT_TX_REUSE (0x1 << 6)
#define STAT_TX_FULL (0x1 << 5)
#define STAT_TX_EMPTY (0x1 << 4)
#define STAT_RX_FULL (0x02)
#define STAT_RX_EMPTY (0x01)
/* STATUS Interrupt status */
#ifdef XC62XX
#define MASK_PBT_CRC_FAIL (0x1 << 8)
#define MASK_RX_SYNC (0x1 << 7)
#endif
#define MASK_RX_DR (0x1 << 6)
#define MASK_TX_DS (0x1 << 5)
#define MASK_MAX_RT (0x1 << 4)
#define MASK_ALL_INTER (MASK_RX_DR | MASK_TX_DS | MASK_MAX_RT)
/* RF State Machine */
#define CE_CTL_HIGH XC_RF_2_4G->CFG_TOP |= 0x4000
#define CE_CTL_LOW XC_RF_2_4G->CFG_TOP &= ~0x4000
/* Number of CRC bytes */
#define CRC_0BYTE 0U
#define CRC_1BYTE 1U
#define CRC_2BYTE 2U
/* Communication rate */
#define DR_1M 0x02
#define DR_2M 0x0A
#define DR_250K 0x22
#define DR_125K 0x2A
/* Communication mode */
#define TX_MODE 0
#define RX_MODE 1
#define TRX_MODE 2
#define RTX_MODE 3
#define DELAY_CNT 0U
#define LOGI(...) printf(__VA_ARGS__)
#ifdef RF_DEMO
#define RF_FAIL 0U
#define RF_SUCCESS 1U
#define ASSERT while (1)
#endif
#define XINCHIP_PACKET 0
#define PANCHIP_PACKET 1
#define BELKEN_PACKET 2
#define TELINK_PACKET 3
#define HUNTERSUN_PACKET 4
#ifdef XC62XX
/* The maximum payload is 256 bytes */
#define XINCX_2_4G_PIPE0_LEN 32
#else
#if (XINCX_RF_NORMAL_PACKET_MODE)
/* The maximum payload of static packets is 63 bytes */
#define XINCX_2_4G_PIPE0_LEN 32
#else
/* The maximum payload of a dynamic packet is 128 bytes */
#define XINCX_2_4G_PIPE0_LEN 32
#endif //XINCX_RF_NORMAL_PACKET_MODE
#endif //XC62XX
#define BUFF_LEN XINCX_2_4G_PIPE0_LEN
#define readl(addr) (*(volatile unsigned int *)(addr))
#define writel(addr, value) (*(volatile unsigned int *)(addr) = (value))
/* RF Tx Status Typedef */
typedef enum
{
TX_DATA_OK = 0,
TX_DATA_INVALID = 1,
TX_RETRANS_MAX = 2
} eRF_Tx_Status;
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Exported Functions
-------------------------------------------------------------------------------------*/
void nop_cnt(uint32_t cnt);
void rf_wr_cmd(uint8_t cmd);
void rf_rc_calib(void);
void reset_rf2_4g(void);
void freq_ctune(uint8_t val);
void rf24g_modem_init(void);
void rf24g_config(void);
void rf24g_init(void);
void set_rf_dynpd(uint8_t dynpd);
void set_rf_power(uint8_t tx_pwr);
void set_rf_afc(void);
void rf_set_channel(uint16_t channel);
void set_rf_channel(uint16_t channel);
void set_rf_txaddr(uint32_t addr_l, uint32_t addr_h);
void set_rf_pipe0_rxaddr(uint32_t addr_l, uint32_t addr_h);
void set_rf_tx_addr_width(uint8_t bytes);
void set_rf_DR(uint8_t rate);
void set_rf_feature(uint8_t long_pld, uint8_t fec, uint8_t whiten, uint8_t dpl, uint8_t ack_pay, uint8_t dyn_ack);
void set_rf_compatility_featue(uint8_t guard_cfg, uint8_t long_pld_type, uint8_t preamble_num,
uint8_t preamble_type, uint8_t crc_scope_header, uint8_t crc_scope_addr);
uint8_t set_rf_preamble(uint32_t preamble_word);
void set_rf_guard_woard(uint16_t guard_word);
void set_rf_mode(uint8_t mode);
void set_rf_crc(uint8_t crc_byte);
#ifdef XC62XX
void set_rf_pipe_rx_payLen(uint16_t p0_len, uint16_t p1_len, uint16_t p2_len, uint16_t p3_len, uint16_t p4_len,
uint16_t p5_len);
#else
void set_rf_pipe_rx_payLen(uint8_t p0_len, uint8_t p1_len, uint8_t p2_len, uint8_t p3_len, uint8_t p4_len,
uint8_t p5_len);
#endif
void set_rf_retr(uint8_t cnt, uint8_t delay);
void set_rf_enaa(uint8_t pipe0_enaa, uint8_t pipe1_enaa, uint8_t pipe2_enaa, uint8_t pipe3_enaa, uint8_t pipe4_enaa,
uint8_t pipe5_enaa);
void set_rf_en_pipe(uint8_t user_pipe);
void rf_24g_callback(void *context);
void rf_2M_config(void);
uint8_t rf_tx_packet(uint8_t *data, uint16_t len);
uint16_t rf_rx_packet(uint8_t *buff);
void rf_fill_ack_packet(uint8_t *buff, uint8_t len);
uint8_t rf_read_ack_packet(uint8_t *buff);
void rf_off_and_on(void);
void rf_ana24_set(void);
int16_t rf_get_rssi(void);
#ifdef XC62XX
void rf_pbt_init(void);
uint8_t rf_set_pbt_hl_ord(bool ord);
uint8_t rf_set_pbt_hl_offset(uint16_t hl_offset);
uint8_t rf_set_pbt_h_len(uint8_t handler_len);
uint8_t rf_set_pbt_en(void);
uint8_t rf_set_pbt_off(void);
uint8_t rf_set_crc_bit_inv(bool crc_inv);
uint8_t rf_set_ack_type(bool ack_type);
uint8_t rf_set_pid_det(bool pin_en);
uint8_t rf_set_fifo_len(bool length_fifo);
uint16_t rf_get_pend_rxfrem_len(void);
uint8_t rf_set_pbt_auto_trx(bool auto_trx);
uint8_t rf_set_pbt_pld_len_offset(uint8_t offset);
uint8_t rf_set_pbt_crc_init(uint32_t init_val);
uint32_t rf_get_pbt_timer(void);
uint32_t rf_get_pbt_sync_timer(void);
uint8_t rf_set_pbt_tx_head(uint8_t *hadnler_buff);
uint32_t rf_get_pbt_tx_head(void);
uint32_t rf_get_pbt_rx_head(void);
uint8_t rf_set_pbt_rx2tx_timer(uint16_t timer);
uint8_t rf_set_pbt_tx2rx_timer(uint16_t timer);
uint8_t rf_set_pbt_crc_fail_on(void);
uint8_t rf_set_pbt_crc_fail_off(void);
uint8_t rf_set_sync_inter_on(void);
uint8_t rf_set_sync_inter_off(void);
uint8_t rf_set_whiten_value(uint8_t value);
uint8_t rf_set_panchip_whiten_on(void);
uint8_t rf_set_panchip_whiten_off(void);
uint8_t rf_set_whiten_opt(uint8_t whiten_opt);
uint8_t rf_set_pllon_lock_time(uint8_t pll_timer);
uint8_t rf_set_pbt_auto_trx_timer(uint16_t pbt_rx2tx_timer, uint16_t pbt_tx2rx_timer);
uint8_t rf_set_pbt_config(uint8_t pbt_auto_trx, int len_offset, uint32_t pbt_crc_init);
uint8_t rf_clk_div23_en_soften_on(void);
uint8_t rf_clk_div23_en_soften_off(void);
uint8_t rf_clk_div23_en_soft_on(void);
uint8_t rf_clk_div23_en_soft_off(void);
uint8_t rf_chan_mult_1p5_soften_on(void);
uint8_t rf_chan_mult_1p5_soften_off(void);
uint8_t rf_chan_mult_1p5_soft_on(void);
uint8_t rf_chan_mult_1p5_soft_off(void);
uint8_t rf_chan_frac_offset(uint32_t value);
#endif
void rf_set_freq_dev(uint16_t freq_dev);
uint16_t rf_get_freq_dev(void);
void rf_ack_payload_config(void);
#define INFO_BUFF(buff, len) rf_buff_info(buff, len)
#ifdef __cplusplus
}
#endif
#endif /* __RF_2_4G__ */