hpw421初始版本
This commit is contained in:
@@ -0,0 +1,449 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: sueRimn
|
||||
* @Date: 2023-12-12 14:23:55
|
||||
* @LastEditors: sueRimn
|
||||
* @LastEditTime: 2024-03-28 11:25:14
|
||||
*/
|
||||
/*!
|
||||
* \file main.c
|
||||
*
|
||||
* \brief Target main implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "xc6xxx_rf_ADV.h"
|
||||
#include "mtypes.h"
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
uint8_t recv_adv_buf[ADV_BUFF_LEN] = {0};
|
||||
|
||||
uint8_t rf_adv_channel[] = {RF_ADV_CHANNEL_37, RF_ADV_CHANNEL_38, RF_ADV_CHANNEL_39};
|
||||
uint8_t adv_index = 0;
|
||||
/*------------------------------------------------------------------------------------
|
||||
Func Prototype
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief clock_init
|
||||
* @details
|
||||
* @param void
|
||||
* @retval void
|
||||
*/
|
||||
void clock_init(void)
|
||||
{
|
||||
CLOCK_InitCfg_t clock_cfg;
|
||||
|
||||
clock_cfg.hfclk_src = CLOCK_HFCLK_SRC_XTAL;
|
||||
clock_cfg.hfclk_in = CLOCK_HFCLK_IN_32M;
|
||||
#if (RC_32K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_RC;
|
||||
#endif //(RC_32K)
|
||||
|
||||
#if (XTAL_32K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
|
||||
#endif // (XTAL_32K)
|
||||
|
||||
#if (XTAL_32768K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
|
||||
#endif // (XTAL_32768K)
|
||||
|
||||
if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_XTAL) {
|
||||
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32768;
|
||||
} else if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_RC) {
|
||||
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32K;
|
||||
}
|
||||
|
||||
xc_clock_init_cfg(&clock_cfg);
|
||||
|
||||
SysTick_Config(xc_clock_hfclk_in_get() / 100);
|
||||
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
|
||||
}
|
||||
|
||||
void app_uart_init(void)
|
||||
{
|
||||
GPIO_InitCfg_t gpio_cfg = {0};
|
||||
|
||||
gpio_cfg.Mux = GPIO_Mux0;
|
||||
gpio_cfg.Pull = GPIO_PULLUP;
|
||||
gpio_cfg.Int = NOT_INT;
|
||||
gpio_cfg.FunSel = UART0_TX;
|
||||
|
||||
gpio_cfg.Pin = GPIO_18;
|
||||
gpio_cfg.Dir = GPIO_DIR_OUTPUT;
|
||||
xc_gpio_init(&gpio_cfg);
|
||||
|
||||
gpio_cfg.FunSel = UART0_RX;
|
||||
gpio_cfg.Pin = GPIO_19;
|
||||
gpio_cfg.Dir = GPIO_DIR_INPUT;
|
||||
xc_gpio_init(&gpio_cfg);
|
||||
|
||||
UART_InitCfg_t uart_cfg = {0};
|
||||
|
||||
uart_cfg.Parity = UART_PARITY_DISABLE;
|
||||
uart_cfg.StopBits = UART_STOP_1_BITS;
|
||||
uart_cfg.WordLength = UART_DATA_8_BITS;
|
||||
uart_cfg.BaudRate = UART_BAUDRATE_115200;
|
||||
uart_cfg.HardwareFlowControl = UART_HWFC_DISABLE;
|
||||
|
||||
xc_uart_init(UART0_IDX, &uart_cfg);
|
||||
}
|
||||
/**
|
||||
* @brief Rf 2.4g dump log
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
#ifdef DEBUG_LOG
|
||||
void rf_dump_log(void)
|
||||
{
|
||||
LOGI("***************** 2.4G Param ******************\n");
|
||||
LOGI("CFG_TOP: 0x%08x\r\n", XC_RF_2_4G->CFG_TOP);
|
||||
LOGI("EN_AA: 0x%08x\r\n", XC_RF_2_4G->EN_AA);
|
||||
LOGI("EN_RXADDR: 0x%08x\r\n", XC_RF_2_4G->EN_RXADDR);
|
||||
LOGI("SETUP_AW: 0x%08x\r\n", XC_RF_2_4G->SETUP_AW);
|
||||
LOGI("SETUP_RETR: 0x%08x\r\n", XC_RF_2_4G->SETUP_RETR);
|
||||
LOGI("RF_CH: 0x%08x\r\n", XC_RF_2_4G->RF_CH);
|
||||
LOGI("SETUP_RF: 0x%08x\r\n", XC_RF_2_4G->SETUP_RF);
|
||||
LOGI("STATUS: 0x%08x\r\n", XC_RF_2_4G->STATUS);
|
||||
LOGI("OBSERVE_TX: 0x%08x\r\n", XC_RF_2_4G->OBSERVE_TX);
|
||||
LOGI("RSSI: 0x%08x\r\n", XC_RF_2_4G->RSSI);
|
||||
LOGI("RX_ADDR_P0: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P0_H), XC_RF_2_4G->RX_ADDR_P0_L);
|
||||
LOGI("RX_ADDR_P1: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P1_H), XC_RF_2_4G->RX_ADDR_P1_L);
|
||||
LOGI("RX_ADDR_P2TOP5:0x%08x\r\n", XC_RF_2_4G->RX_ADDR_P2TOP5);
|
||||
LOGI("BER_RESULT: 0x%08x%08x\r\n", XC_RF_2_4G->BER_ERR_CNT, XC_RF_2_4G->BER_RECV_CNT);
|
||||
LOGI("AGC_SETTING: 0x%08x\r\n", XC_RF_2_4G->AGC_SETTING);
|
||||
LOGI("PGA_SETTING: 0x%02x %08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF00) >> 8, XC_RF_2_4G->PGA_SETTING);
|
||||
LOGI("TX_ADDR: 0x%02x %08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF), XC_RF_2_4G->TX_ADDR_L);
|
||||
LOGI("RX_PW_PX: 0x%04x %08x\r\n", 0xFFFF & (XC_RF_2_4G->RX_PW_Px_H), XC_RF_2_4G->RX_PW_Px_L);
|
||||
LOGI("STATUS_FIFO: 0x%08x\r\n", XC_RF_2_4G->STATUS_FIFO);
|
||||
LOGI("RSSIREC: 0x%08x\r\n", XC_RF_2_4G->RSSIREC);
|
||||
LOGI("TXPROC_CFG: 0x%08x\r\n", XC_RF_2_4G->TXPROC_CFG);
|
||||
LOGI("RXPROC_CFG: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RXPROC_CFG_H), XC_RF_2_4G->RXPROC_CFG_L);
|
||||
LOGI("DYNPD: 0x%08x\r\n", XC_RF_2_4G->DYNPD);
|
||||
LOGI("FEATURE: 0x%08x\r\n", XC_RF_2_4G->FEATURE);
|
||||
LOGI("PGA_SETTING_H: 0x%08x\r\n", XC_RF_2_4G->TX_ADDR_H);
|
||||
LOGI("***********************************************\n");
|
||||
LOGI("\r\n");
|
||||
}
|
||||
#endif // DEBUG_LOG
|
||||
|
||||
/**
|
||||
* @brief RF ADV data package filling
|
||||
* @param uint8_t * - buff
|
||||
* uint8_t - len
|
||||
* @return uint8_t - data len
|
||||
*/
|
||||
|
||||
uint8_t rf_adv_packet(uint8_t *buff)
|
||||
{
|
||||
if (sizeof(buff) > ADV_LENGTH) {
|
||||
buff = NULL;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
uint8_t l = 0;
|
||||
|
||||
buff[l++] = 0x42;
|
||||
buff[l++] = ADV_LENGTH - 5;
|
||||
|
||||
/* Simulate Bluetooth MAC address */
|
||||
uint8_t rf_adv_mac_addr[6] = {MAC_ADDR_0, MAC_ADDR_1, MAC_ADDR_2, MAC_ADDR_3, MAC_ADDR_4, MAC_ADDR_5};
|
||||
memcpy(&buff[l], rf_adv_mac_addr, sizeof(rf_adv_mac_addr));
|
||||
l += sizeof(rf_adv_mac_addr);
|
||||
|
||||
buff[l++] = 0x02;
|
||||
buff[l++] = 0x01;
|
||||
buff[l++] = 0x06;
|
||||
|
||||
buff[l++] = ADV_LENGTH - 15;
|
||||
|
||||
// Complete Local Name
|
||||
buff[l++] = 0x09;
|
||||
|
||||
/* Simulate Bluetooth broadcast data */
|
||||
uint8_t rf_adv_data_buff[26] = {"RF-ADV-TEST-123456789BLE52"};
|
||||
memcpy(&buff[l], rf_adv_data_buff, sizeof(rf_adv_data_buff));
|
||||
l += sizeof(rf_adv_data_buff);
|
||||
|
||||
/* CRC */
|
||||
buff[l++] = 0x55;
|
||||
buff[l++] = 0x55;
|
||||
buff[l++] = 0x55;
|
||||
|
||||
return l;
|
||||
}
|
||||
/**
|
||||
* @brief Rf adv tx event
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
|
||||
void rf_adv_tx_evevt(void)
|
||||
{
|
||||
uint8_t len = 0;
|
||||
uint8_t buff[ADV_LENGTH];
|
||||
LOGI("************ADV Send Start**************\r\n");
|
||||
|
||||
while (1) {
|
||||
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(RF_ADV_BASE + rf_adv_channel[adv_index]);
|
||||
|
||||
/* Simulate Bluetooth broadcast data filling */
|
||||
len = rf_adv_packet(buff);
|
||||
|
||||
/* Simulate Bluetooth broadcast package software CRC */
|
||||
ble_crc(buff, len - 3, buff + len - 3);
|
||||
|
||||
/* Simulate Bluetooth broadcast package software whitening */
|
||||
ble_whiten(buff, len, bleWhitenStart(RF_ADV_BASE + rf_adv_channel[adv_index]));
|
||||
|
||||
/* Send data processing */
|
||||
rf_tx_packet(buff, len);
|
||||
|
||||
adv_index += 1;
|
||||
if (adv_index == sizeof(rf_adv_channel)) {
|
||||
adv_index = 0;
|
||||
}
|
||||
delay_ms(10);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF rx adv event
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
|
||||
#if (XINCX_RF_ADV_NVIC_MODE == true)
|
||||
void rf_adv_rx_evevt(void)
|
||||
{
|
||||
uint8_t data_len = 0;
|
||||
uint32_t blecrc = 0;
|
||||
uint8_t rf_adv_crc_stat = CRC_IDLE;
|
||||
LOGI("************ADV Recv Start**************\r\n");
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(XINCX_ADV_CHANNEL);
|
||||
|
||||
/* Enable RF24G interrupt */
|
||||
NVIC_EnableIRQ(RF24G_IRQn);
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
|
||||
while (1) {
|
||||
if ((recv_len != 0) && (rf24g_handler_flag)) {
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
rf24g_handler_flag = false;
|
||||
|
||||
/* Whitening of packet software */
|
||||
blecrc = rf_adv_packet_whiten(&data_len);
|
||||
|
||||
/* Packet software CRC judgment */
|
||||
rf_adv_crc_stat = rf_adv_crc(recv_adv_buf, &data_len, blecrc);
|
||||
if (rf_adv_crc_stat == CRC_OK) {
|
||||
/* Only after 5 bytes is valid data */
|
||||
for (uint8_t i = 0; i < data_len + 5; i++)
|
||||
LOGI("%02x ", recv_adv_buf[i]);
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
|
||||
recv_len = 0;
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
void rf_adv_rx_evevt(void)
|
||||
{
|
||||
uint8_t data_len = 0;
|
||||
uint32_t blecrc = 0;
|
||||
uint8_t rf_adv_crc_stat = CRC_IDLE;
|
||||
LOGI("************ADV Recv Start**************\r\n");
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(XINCX_ADV_CHANNEL);
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
|
||||
while (1) {
|
||||
if ((XC_RF_2_4G->STATUS) & MASK_RX_DR) {
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
|
||||
recv_len = rf_rx_packet(recv_adv_buf);
|
||||
if (recv_len != 0) {
|
||||
/* Whitening of packet software */
|
||||
blecrc = rf_adv_packet_whiten(&data_len);
|
||||
|
||||
/* Packet software CRC judgment */
|
||||
rf_adv_crc_stat = rf_adv_crc(recv_adv_buf, &data_len, blecrc);
|
||||
if (rf_adv_crc_stat == CRC_OK) {
|
||||
for (uint8_t i = 0; i < data_len + 5; i++)
|
||||
LOGI("%02x ", recv_adv_buf[i]);
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
|
||||
recv_len = 0;
|
||||
}
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#define RF_BLE_ADDR 0x1AB51376
|
||||
#define RF_BLE_CHN37 2402
|
||||
|
||||
uint8_t rf_rxdata[32];
|
||||
uint8_t rf_rxlen, rf_rssi;
|
||||
uint8_t rf_irq_cnt = 0;
|
||||
uint8_t rf_rx_cnt = 0;
|
||||
|
||||
mftest_t mftest = {0}; //生产测试
|
||||
|
||||
uint8_t getbuff[8] = {0};
|
||||
uint8_t setbuff[8] = {0};
|
||||
uint8_t saveflag = 1; //默认为断电保存状态
|
||||
uint8_t setrad_flag = 0;
|
||||
|
||||
volatile uint16_t cnt_ms1 = 0;
|
||||
volatile uint16_t cnt_ms2 = 0;
|
||||
volatile uint32_t ticks[64] = {0};
|
||||
void app_tick_handler(void)
|
||||
{
|
||||
cnt_ms1++;
|
||||
cnt_ms2++;
|
||||
light_tick();
|
||||
rad_tick();
|
||||
|
||||
//以下代码模拟定时器中运行的程序
|
||||
for(int i = 0; i < 64; i++)
|
||||
{
|
||||
if(ticks[i] < 0xFFFFFFFF)
|
||||
{
|
||||
ticks[i]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
extern void readreg(void);
|
||||
#define LED1_PIN GPIO_1
|
||||
#define LED2_PIN GPIO_4
|
||||
/**
|
||||
* @brief main
|
||||
* @details
|
||||
* @param[in] void
|
||||
* @param[out] void
|
||||
* @retval int - 0
|
||||
* @retval void
|
||||
* @par identifier
|
||||
* reserve
|
||||
* @par other
|
||||
* void
|
||||
* @par change log
|
||||
* Alex created on 2023-05-31
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
/* Clock initialization */
|
||||
clock_init();
|
||||
|
||||
/* Serial port initialization */
|
||||
app_uart_init();
|
||||
light_init();
|
||||
rad_init();
|
||||
test_init(20);
|
||||
LOGI("__START__\n");
|
||||
|
||||
/* Simulate broadcast initialization */
|
||||
rf24g_adv_init();
|
||||
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
|
||||
|
||||
GPIO_InitCfg.Mux = GPIO_Mux0;
|
||||
GPIO_InitCfg.FunSel = GPIO_Dx;
|
||||
GPIO_InitCfg.Pull = GPIO_PULLUP;
|
||||
// Board Led1 Initialization
|
||||
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
|
||||
GPIO_InitCfg.Int = NOT_INT;
|
||||
GPIO_InitCfg.Pin = LED1_PIN;
|
||||
xc_gpio_init(&GPIO_InitCfg);
|
||||
|
||||
GPIO_InitCfg.Mux = GPIO_Mux0;
|
||||
GPIO_InitCfg.FunSel = GPIO_Dx;
|
||||
GPIO_InitCfg.Pull = GPIO_PULLUP;
|
||||
// Board Led1 Initialization
|
||||
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
|
||||
GPIO_InitCfg.Int = NOT_INT;
|
||||
GPIO_InitCfg.Pin = LED2_PIN;
|
||||
xc_gpio_init(&GPIO_InitCfg);
|
||||
|
||||
xc_gpio_write_pin(LED1_PIN, GPIO_PIN_RESET);
|
||||
xc_gpio_write_pin(LED2_PIN, GPIO_PIN_RESET);
|
||||
#ifdef DEBUG_LOG
|
||||
/* Register information printing */
|
||||
rf_dump_log();
|
||||
#endif // DEBUG_LOG
|
||||
uint8_t data_len = 0;
|
||||
uint32_t blecrc = 0;
|
||||
uint8_t rf_adv_crc_stat = CRC_IDLE;
|
||||
LOGI("************ADV Recv Start**************\r\n");
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(XINCX_ADV_CHANNEL);
|
||||
|
||||
/* Enable RF24G interrupt */
|
||||
NVIC_EnableIRQ(RF24G_IRQn);
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
|
||||
#if (XINCX_ADV_MODE == TX_MODE)
|
||||
/* Send Event */
|
||||
rf_adv_tx_evevt();
|
||||
|
||||
#elif (XINCX_ADV_MODE == RX_MODE)
|
||||
/* Receive events */
|
||||
rf_adv_rx_evevt();
|
||||
|
||||
#endif
|
||||
ASSERT;
|
||||
}
|
||||
Reference in New Issue
Block a user