8 Commits

Author SHA1 Message Date
518eb9f134 [Mod] 优化方案一, 433MHz工作正常 2024-08-07 21:25:57 +08:00
de1285ff41 [Mod] 调相频率868 2024-08-07 15:10:29 +08:00
b9f5afd78e [Mod] 优化展示效果
1. start_task中新增delay,延后打印'#';
2024-08-06 09:57:57 +08:00
e7c70664d6 [Mod] MBL 使用NCVI->ICER 清除所有已使用的中断 2024-08-05 10:09:09 +08:00
8862e54265 [Mod] 使用NCVI->ICER 清除所有已使用的中断 2024-08-02 21:04:24 +08:00
b7c27bc14f [Mod] CMT2310 跳转前切换至Standby,成功免初始化
1. 新增Standby切换入口;
2. ping接收打印优化;
2024-08-02 19:53:56 +08:00
293d9b3be1 [Mod] 优化systick 退出实现 2024-08-02 19:16:53 +08:00
d587362102 [Mod] 完善退出流程 2024-08-02 19:04:30 +08:00
21 changed files with 791 additions and 75 deletions

View File

@ -66,9 +66,11 @@ void systick_config(void)
*/
void systick_deinit(void)
{
SysTick_Config(1);
NVIC_SetPriority(SysTick_IRQn, priority_orig);
SysTick->LOAD = 0UL; /* set reload register */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
}
/*!

View File

@ -73,7 +73,7 @@ void Ebyte_Port_ReceiveCallback( uint16_t state, uint8_t *buffer, uint8_t lengt
{
uint8_t j, pcEchoLength;
uint8_t *p;
int8_t rx_data[32] = {0};
uint8_t rx_data[32] = {0};
/* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD> */
if( state &= 0x0002 ) {
@ -115,7 +115,7 @@ void Ebyte_Port_ReceiveCallback( uint16_t state, uint8_t *buffer, uint8_t lengt
if( ! PC_isConnected ) {
is_jump_main = 1;
snprintf(rx_data, sizeof(rx_data), "%s", buffer);
EBYTE_LOG("\r\n Receive Data: %s", rx_data);
EBYTE_LOG(" Receive Data: %s\r\n", rx_data);
}
Ebyte_BSP_LedControl( BSP_LED_1, OFF );

View File

@ -1,20 +1,20 @@
/**
**********************************************************************************
* @file ebyte_core.c
* @brief EBYTE<54><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>API<50><49>װ<EFBFBD><D7B0> <20><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>߼<EFBFBD>
* @details <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> https://www.ebyte.com/
* @author JiangHeng
* @date 2021-05-13
* @version 1.0.0
* @brief EBYTE<54><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>API<50><49>װ<EFBFBD><D7B0> <20><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>߼<EFBFBD>
* @details <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> https://www.ebyte.com/
* @author JiangHeng
* @date 2021-05-13
* @version 1.0.0
**********************************************************************************
* @copyright BSD License
* <20>ɶ<EFBFBD><C9B6>ڰ<EFBFBD><DAB0>ص<EFBFBD><D8B5>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* ______ ____ __ __ _______ ______
* @copyright BSD License
* <20>ɶ<EFBFBD><C9B6>ڰ<EFBFBD><DAB0>ص<EFBFBD><D8B5>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* ______ ____ __ __ _______ ______
* | ____| | _ \ \ \ / / |__ __| | ____|
* | |__ | |_) | \ \_/ / | | | |__
* | __| | _ < \ / | | | __|
* | |____ | |_) | | | | | | |____
* |______| |____/ |_| |_| |______|
* | |__ | |_) | \ \_/ / | | | |__
* | __| | _ < \ / | | | __|
* | |____ | |_) | | | | | | |____
* |______| |____/ |_| |_| |______|
*
**********************************************************************************
*/
@ -29,8 +29,9 @@ const Ebyte_RF_t Ebyte_RF =
{
Ebyte_E48x_Init,
Ebyte_E48x_SendPayload,
Ebyte_E48x_SetStandby,
Ebyte_E48x_SetSleep,
Ebyte_E48x_SetRx,
Ebyte_E48x_SetRx,
Ebyte_E48x_IntOrPollTask,
Ebyte_E48x_InterruptTrigger,
Ebyte_E48x_GetName,

View File

@ -32,6 +32,7 @@ typedef struct
{
void ( *Init )( void );
void ( *Send )( uint8e_t *buffer, uint8e_t size , uint32e_t timeout);
void ( *EnterStandby )( uint8e_t command);
void ( *EnterSleepMode )( uint8e_t command);
void ( *EnterReceiveMode )( uint32e_t timeout );
void ( *StartPollTask)( void );

View File

@ -61,7 +61,6 @@ int ebyte_main( void )
{
/* Init Systick */
systick_config();
#if 0
/* <20><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>Դ <20><>ʼ<EFBFBD><CABC> */
Ebyte_BSP_Init();
/* (<28><>ѡ) <20><><EFBFBD><EFBFBD><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>FIFO <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4><EFBFBD> */
@ -70,8 +69,6 @@ int ebyte_main( void )
Ebyte_RF.Init();
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
Ebyte_RF.EnterReceiveMode( 0 );
/* MCU <20><>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD> */
Ebyte_BSP_GlobalIntEnable();
EBYTE_LOG( "Start PingPong.....\r\n" );
EBYTE_LOG( "Please push button1 or button2.....\r\n" );
@ -89,8 +86,9 @@ int ebyte_main( void )
delay_1ms(100);
}
Ebyte_BSP_GlobalIntDisable();
#endif
Ebyte_RF.EnterStandby(0);
Ebyte_BSP_Deinit();
systick_deinit();
}
@ -148,7 +146,7 @@ void Task_Transmit( void )
{
pongLength = 5;
}else{
EBYTE_LOG( "\r\n Echo : pong \r\n" );
EBYTE_LOG( " Echo : pong \r\n" );
pongLength = 4;
}

View File

@ -23,6 +23,10 @@
#include "ebyte_port.h"
#include "ebyte_conf.h"
#include "gd32w51x_gpio.h"
#include "gd32w51x_misc.h"
#include "gd32w51x_rcu.h"
#include "gd32w51x_spi.h"
#include "gd32w51x_timer.h"
#include "platform_def.h"
BSP_BTN_FIFO_t BSP_BTN_FIFO;
@ -43,7 +47,6 @@ void Ebyte_BSP_HSI_Init(void)
// CLK_SYSCLKDivConfig( CLK_SYSCLKDiv_1 );
}
void Ebyte_BSP_E48xGPIO_Init(void)
{
rcu_periph_clock_enable(BSP_GPIO_RCU_E48_GPIO);
@ -54,6 +57,12 @@ void Ebyte_BSP_E48xGPIO_Init(void)
gpio_mode_set( BSP_GPIO_PORT_E48_GP4, GPIO_MODE_INPUT, GPIO_PUPD_NONE, BSP_GPIO_PIN_E48_GP4);
gpio_mode_set( BSP_GPIO_PORT_E48_GP5, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, BSP_GPIO_PIN_E48_GP5);
}
void Ebyte_BSP_E48xGPIO_Deinit(void)
{
rcu_periph_clock_disable(BSP_GPIO_RCU_E48_GPIO);
}
/* !
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO
*
@ -77,6 +86,23 @@ void Ebyte_BSP_GPIO_Init(void)
// GPIO_Init( BSP_GPIO_PORT_BUTTON_2, BSP_GPIO_PIN_BUTTON_2, GPIO_Mode_In_PU_No_IT );
}
/* !
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO
*
* @note Ŀ<><C4BF>Ӳ<EFBFBD><D3B2>: EBYTE E15-EVB02
*/
void Ebyte_BSP_GPIO_Deinit(void)
{
/* Button */
rcu_periph_clock_disable(BSP_GPIO_RCU_E48_BUTTON);
/* LED */
rcu_periph_clock_disable(BSP_GPIO_RCU_E48_LED);
/* E48 */
Ebyte_BSP_E48xGPIO_Deinit();
}
/* !
* @brief ͨ<>Ŵ<EFBFBD><C5B4>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
*
@ -146,6 +172,21 @@ void Ebyte_BSP_SPI_Init( void )
spi_enable(BSP_RF_SPI);
}
/* !
* @brief <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ͨ<EFBFBD><CDA8>SPI<50>ӿڳ<D3BF>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Ebyte_BSP_SPI_Deinit( void )
{
/* SPI enable */
spi_disable(BSP_RF_SPI);
spi_i2s_deinit(BSP_RF_SPI);
spi_parameter_struct spi_init_struct;
rcu_periph_clock_disable(BSP_RF_SPI_CLOCK);
}
/* !
* @brief RFģ<46><C4A3>SPIͨ<49><CDA8><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
@ -210,6 +251,31 @@ void Ebyte_BSP_TIMER_Init( void )
nvic_irq_enable(TIMER2_IRQn, 0, 0);
}
/* !
* @brief <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*
* @note ʹ<><CAB9><EFBFBD><EFBFBD>TIM3<4D><33><EFBFBD><EFBFBD>1ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* TIM3<4D><33><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ΪHSI 16MHz, 128<32><38>Ƶ<EFBFBD><C6B5>Ϊ 16 MHz / 128 = 125 000 Hz
* Ŀ<>궨ʱ1ms <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>Ϊ ( 0.001 x 125000 - 1) = 124
*/
void Ebyte_BSP_TIMER_Deinit( void )
{
nvic_irq_disable(TIMER2_IRQn);
/* enable a TIMER */
timer_disable(BSP_RF_TIMER);
/* enable the TIMER interrupt */
timer_interrupt_disable(BSP_RF_TIMER, TIMER_INT_UP);
/* clear interrupt bit */
timer_interrupt_flag_clear(BSP_RF_TIMER, TIMER_INT_FLAG_UP);
/* enable the peripherals clock */
rcu_periph_clock_disable(BSP_RF_TIMER_RCU);
/* deinit a TIMER */
timer_deinit(BSP_RF_TIMER);
}
/* !
* @brief E15-EVB02 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʼ<EFBFBD><CABC>
*
@ -241,6 +307,31 @@ void Ebyte_BSP_Init( void )
Ebyte_BTN_FIFO_Init( &BSP_BTN_FIFO );
}
/* !
* @brief E15-EVB02 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʼ<EFBFBD><CABC>
*
* @note <20>ڲ<EFBFBD>ʱ<EFBFBD><CAB1>HSI x 16MHz
* <20>û<EFBFBD>ͨ<EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> x USART1
* <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ͨ<EFBFBD>Žӿ<C5BD> x SPI1
* <20><>ʱ<EFBFBD><CAB1> x TIM3
* <20><><EFBFBD><EFBFBD> x 2
* ָʾ<D6B8><CABE> x 2
*/
void Ebyte_BSP_Deinit( void )
{
/* <20><>ʱ<EFBFBD><CAB1> <20><>ʼ<EFBFBD><CABC> */
Ebyte_BSP_TIMER_Deinit();
/* SPI<50>ӿ<EFBFBD> <20><>ʼ<EFBFBD><CABC> */
Ebyte_BSP_SPI_Deinit();
/* <20><><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> */
// Ebyte_BSP_UART_Init();
/* IO <20><>ʼ<EFBFBD><CABC> */
Ebyte_BSP_GPIO_Deinit();
}
/* !
* @brief <20><><EFBFBD><EFBFBD>LED <20><>/<2F><>/<2F><>ת
*

View File

@ -164,6 +164,7 @@ typedef struct
extern BSP_BTN_FIFO_t BSP_BTN_FIFO;
void Ebyte_BSP_Init( void );
void Ebyte_BSP_Deinit( void );
void Ebyte_BTN_FIFO_Init(BSP_BTN_FIFO_t *fifo);
void Ebyte_BSP_DelayMs( volatile uint32_t nTime );
void Ebyte_BSP_TimerDecrement(void);

View File

@ -149,6 +149,274 @@
*****************************************************************************/
#if ( PRODUCT_FREQUENCY == CM2310A_868MHZ)
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x2A,
0x42,
0x00,
0xAA,
0x04,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x1F,
0x00,
0x01,
0x00,
0x00,
0x00,
0x00,
0x2D,
0x00,
0x00,
0x00,
0x2D,
0x41,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0x00,
0x05,
0x80,
0x00,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x1F,
0x07,
0x00,
0x00,
0x00,
0x00,
0xE4,
0x20,
0x1A,
0x60,
0x08,
0x00,
0xAA,
0x00,
0xE2,
0x82,
0x38,
0x00,
0xD0,
0xE0,
0x80,
0x00,
0x41,
0x00,
0x01,
0x00,
0x02,
0x00,
0x00,
0x03,
0x04,
};
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x10,
0x06,
0x00,
0xFF,
0x00,
0xCD, // vRadioTcxoDrvSel 接收设置的将0xcd变为了0x0d
0x0E,
0x20,
0x50,
0x87,
0x31,
0x5B,
0x08,
0x38,
0xFF,
0x00,
0x6C,
0x00,
0x00,
0x08,
0xB4,
0x04,
0x56,
0xE0,
0x20,
0x08,
0x01,
0x10,
0x11,
0x00,
0x91,
0x7F,
0x00,
0x18,
0x00,
0x00,
0x1F,
0xE4,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xC0,
0x6C,
0x00,
0x80,
0x98,
0x6B,
0x00,
0x80,
0x0F,
0x64,
0x06,
0x02,
0x04,
0x56,
0x00,
0x36,
0x05,
0x20,
0xC8,
0x63,
0xA1,
0xFA,
0x02,
0x58,
0x40,
0x54,
0x74,
0xD0,
0x0F,
0x01,
0x1B,
0xE6,
0x54,
0x0C,
0x09,
0xE2,
0x33,
0x04,
0x01,
0xA5,
0x06,
0x0F,
0x12,
0x4C,
0x00,
0x00,
0xF6,
0x00,
0x00,
0x00,
0x18,
0x81,
0x00,
0x00,
0x47,
0x12, //0x67寄存器ANT_DIVERSITY_MODE设置电线分集的接口会修改它
0x25,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
/* [CMT page2] */
const uint8_t g_cmt2310a_page2[CMT2310A_PAGE2_SIZE] = {
0x00,
0x01,
0x02,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
#if 0
/* [CMT page0] */
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x12,
@ -231,7 +499,7 @@ const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x00,
0x03,
0x04,
};
};
/* [CMT page1] */
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
@ -347,6 +615,7 @@ const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x00,
0x00,
0x00,
};
};
#endif
#endif
#endif

View File

@ -21,6 +21,8 @@
#include "board.h"
#define GET_CHIP_INFO_RETRY_MAX 10
uint8_t rf_rxbuffer[200];
uint8_t rf_rxsize;
uint8_t radio_rece_data_flag;
@ -29,28 +31,50 @@ extern uint32_t g_chip_id;
void Ebyte_E48x_Init( void )
{
int ret;
uint8_t chip_state = 0;
uint32_t fail_retry = 0;
boolean_t is_chip_cmt2310 = FALSE;
vSpiMasterInit();
init_prepare:
/* Step1 */
vRadioPowerUp(); // Release RST(GPIO5)
vRadioSetAntSwitch(FALSE, FALSE); // Disable GPIO0 & GPIO1 as antenna switch control
vRadioSpiModeSel(FALSE); // SPI 4-Wire mode
g_chip_id = lRadioChipVersion();
chip_state = bRadioGetState();
// OSAL_LOGD("Debug, got information Version[%#X] State[%#X].", g_chip_id, chip_state);
is_chip_cmt2310 = ((g_chip_id & 0x00FFFF00) == 0x00231000);
if (is_chip_cmt2310 && (chip_state == CMT2310A_STATE_IS_READY)) {
printf("Infor, CMT2310 already in State[READY], so skip initialization.");
goto init_end;
}
else if (is_chip_cmt2310 && (!chip_state || chip_state & 0x80)) { // Valid mode, except IDLE and READY
printf("Debug, initialize CMT2310 right now with current State[%#X].", chip_state);
goto init_run;
}
else if (fail_retry++ >= GET_CHIP_INFO_RETRY_MAX) {
printf("Error, get the information of CMT2310 failed with Chip-ID[%#X] State[%#X].", g_chip_id, chip_state);
return -1;
}
else if (fail_retry == 1) {
vRadioPowerUp(); // Release RST(GPIO5)
delay1ms(20);
}
/* Step2 */
g_chip_id = lRadioChipVersion();
if(0x00231000 != (g_chip_id & 0x00FFFF00)) {
EBYTE_LOG("[%s|%u] Error, dismatch Chip-ID[%#x](!=0x231000).\r\n", __FUNCTION__, __LINE__, g_chip_id);
return;
}
EBYTE_LOG("[%s|%u] Info, Link Device:E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
vRadioSoftReset(); // Software reset
vRadioBoot(); // Boot CMT2310 core
delay1ms(50);
/* Step3 */
if (bRadioGetState() == CMT2310A_STATE_IS_READY) {
EBYTE_LOG("[%s|%u] Infor, CMT2310 already in State[READY], so skip initialization.\r\n", __FUNCTION__, __LINE__);
return;
}
EBYTE_LOG("[%s|%u] Info, goto initialize E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step4 */
goto init_prepare;
init_run:
/* Step3~6 */
vRadioInit();
init_end:
return ret;
}
void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout )
@ -64,6 +88,11 @@ void Ebyte_E48x_SetRx( uint32_t timeout )
vRadioReceive();
}
void Ebyte_E48x_SetStandby( uint8_t cmd )
{
vRadioStandby();
}
void Ebyte_E48x_SetSleep( uint8_t cmd )
{
return;

View File

@ -14,6 +14,7 @@ void Ebyte_E48x_Init( void );
void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout );
void Ebyte_E48x_SetRx( uint32_t timeout );
void Ebyte_E48x_SetSleep( uint8_t cmd );
void Ebyte_E48x_SetStandby( uint8_t cmd );
void Ebyte_E48x_IntOrPollTask( void );
void Ebyte_E48x_InterruptTrigger( void );
uint32_t Ebyte_E48x_GetName(void);

View File

@ -360,6 +360,14 @@ void vRadioTransmit(uint8_t* buffer, uint8_t length )
vRadioReceive();
}
void vRadioStandby( void )
{
bRadioGoStandby();
vRadioClearTxFifo();
vRadioClearRxFifo();
vRadioClearInterrupt();
}
uint8_t vRadioGetPacket(uint8_t *buffer,uint8_t *length)
{
uint8_t rx_length;

View File

@ -26,8 +26,9 @@ extern void vRadioGoRxInit( void );
extern void vRadioTransmit(uint8_t* buffer, uint8_t length );
extern void vRadioReceive(void);
extern uint8_t vRadioGetPacket(uint8_t *buffer,uint8_t *length);
extern void vRadioStandby(void);
extern uint8_t vRadioGetPacket(uint8_t *buffer,uint8_t *length);
extern void vRadioCheckLink(void);

View File

@ -430,6 +430,11 @@ void vRadioRegPageSel( uint8_t page_sel )
}
}
void vRadioBoot( void )
{
bSpiWriteByte( CMT2310A_CTL_REG_00, CMT2310A_REBOOT );
}
/******************************
**Name: vRadioPowerUpBoot
**Func: Radio power up boot start

View File

@ -15,7 +15,7 @@
#define CM2310A_868MHZ 2
#define CM2310A_915MHZ 3
#define PRODUCT_FREQUENCY CM2310A_410MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#define PRODUCT_FREQUENCY CM2310A_433MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#include "radio_spi.h"
#include "CMT2310A_def.h"
@ -83,7 +83,6 @@ extern void vRadioXoWaitCfg( uint8_t div_sel );
extern void delay1ms(uint16_t cnt);
extern void delay10us(uint32_t cnt);
void vRadioBoot( void );
#endif

View File

@ -75,7 +75,10 @@ static void jump_to_main_image(uint32_t msp, uint32_t reset)
img_reset = (img_fptr_t)reset;
__disable_irq();
// __disable_irq();
for (int i = 0; i < sizeof(NVIC->ICER) / 4; i++)
NVIC->ICER[i] = ~(0UL);
#if defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8M_BASE__)
/* Restore the Main Stack Pointer Limit register's reset value
* before passing execution to runtime firmware to make the

View File

@ -59,6 +59,7 @@ OF SUCH DAMAGE.
#include "uart.h"
#include "console.h"
#include "flash_api.h"
#include <radio_phy.h>
#ifdef CONFIG_TELNET_SERVER
#include "telnet_main.h"
@ -1093,6 +1094,8 @@ static void cmd_boot(int argc, char **argv)
uint32_t arm_vector[2] = {0};
uint32_t boot_idx = 0, image_offset = 0, version;
bRadioGoStandby();
if (argc > 2) {
DEBUGPRINT("jump_bml: command format error!\r\n");
goto Usage;
@ -1105,7 +1108,8 @@ static void cmd_boot(int argc, char **argv)
goto BootFailed;
}
__disable_irq();
for (int i = 0; i < sizeof(NVIC->ICER) / 4; i++)
NVIC->ICER[i] = ~(0UL);
/* Jump to main image */
img_reset = (img_fptr_t)arm_vector[1];

View File

@ -33,6 +33,7 @@ OF SUCH DAMAGE.
*/
/*============================ INCLUDES ======================================*/
#include "radio_hal.h"
#include "wrapper_freertos.h"
#include "wrapper_os.h"
#include "debug_print.h"
@ -145,12 +146,14 @@ void start_task(void *p_arg)
const char *filename;
#endif // CONFIG_GY3513
wifi_management_init();
// wifi_management_init();
#ifdef CONFIG_FATFS_SUPPORT
rcu_periph_clock_enable(RCU_CRC);
fatfs_mk_mount();
#endif
delay1ms(100);
#ifdef CONFIG_CONSOLE_ENABLE
console_init();
#else
@ -197,11 +200,11 @@ int main(void)
}
#endif // CONFIG_TASK_LED
if (NULL == sys_task_create(NULL, (const uint8_t *)"start_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, start_task, NULL)) {
if (NULL == sys_task_create(NULL, (const uint8_t *)"sub1g_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, sub1g_task, NULL)) {
DEBUGPRINT("ERROR: create start task failed\r\n");
}
if (NULL == sys_task_create(NULL, (const uint8_t *)"sub1g_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, sub1g_task, NULL)) {
if (NULL == sys_task_create(NULL, (const uint8_t *)"start_task", NULL, START_TASK_STK_SIZE, 0, START_TASK_PRIO, start_task, NULL)) {
DEBUGPRINT("ERROR: create start task failed\r\n");
}

View File

@ -149,6 +149,274 @@
*****************************************************************************/
#if ( PRODUCT_FREQUENCY == CM2310A_868MHZ)
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x2A,
0x42,
0x00,
0xAA,
0x04,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x64,
0xD1,
0xCE,
0x1F,
0x00,
0x01,
0x00,
0x00,
0x00,
0x00,
0x2D,
0x00,
0x00,
0x00,
0x2D,
0x41,
0x00,
0x00,
0xFF,
0xFF,
0x00,
0x00,
0x05,
0x80,
0x00,
0x00,
0x08,
0x00,
0x00,
0x00,
0x00,
0x1F,
0x07,
0x00,
0x00,
0x00,
0x00,
0xE4,
0x20,
0x1A,
0x60,
0x08,
0x00,
0xAA,
0x00,
0xE2,
0x82,
0x38,
0x00,
0xD0,
0xE0,
0x80,
0x00,
0x41,
0x00,
0x01,
0x00,
0x02,
0x00,
0x00,
0x03,
0x04,
};
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x10,
0x06,
0x00,
0xFF,
0x00,
0xCD, // vRadioTcxoDrvSel 接收设置的将0xcd变为了0x0d
0x0E,
0x20,
0x50,
0x87,
0x31,
0x5B,
0x08,
0x38,
0xFF,
0x00,
0x6C,
0x00,
0x00,
0x08,
0xB4,
0x04,
0x56,
0xE0,
0x20,
0x08,
0x01,
0x10,
0x11,
0x00,
0x91,
0x7F,
0x00,
0x18,
0x00,
0x00,
0x1F,
0xE4,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xC0,
0x6C,
0x00,
0x80,
0x98,
0x6B,
0x00,
0x80,
0x0F,
0x64,
0x06,
0x02,
0x04,
0x56,
0x00,
0x36,
0x05,
0x20,
0xC8,
0x63,
0xA1,
0xFA,
0x02,
0x58,
0x40,
0x54,
0x74,
0xD0,
0x0F,
0x01,
0x1B,
0xE6,
0x54,
0x0C,
0x09,
0xE2,
0x33,
0x04,
0x01,
0xA5,
0x06,
0x0F,
0x12,
0x4C,
0x00,
0x00,
0xF6,
0x00,
0x00,
0x00,
0x18,
0x81,
0x00,
0x00,
0x47,
0x12, //0x67寄存器ANT_DIVERSITY_MODE设置电线分集的接口会修改它
0x25,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
/* [CMT page2] */
const uint8_t g_cmt2310a_page2[CMT2310A_PAGE2_SIZE] = {
0x00,
0x01,
0x02,
0x03,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
#if 0
/* [CMT page0] */
const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x12,
@ -231,7 +499,7 @@ const uint8_t g_cmt2310a_page0[CMT2310A_PAGE0_SIZE] = {
0x00,
0x03,
0x04,
};
};
/* [CMT page1] */
const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
@ -347,6 +615,7 @@ const uint8_t g_cmt2310a_page1[CMT2310A_PAGE1_SIZE] = {
0x00,
0x00,
0x00,
};
};
#endif
#endif
#endif

View File

@ -21,6 +21,8 @@
#include "board.h"
#define GET_CHIP_INFO_RETRY_MAX 10
uint8_t rf_rxbuffer[200];
uint8_t rf_rxsize;
uint8_t radio_rece_data_flag;
@ -29,28 +31,50 @@ extern uint32_t g_chip_id;
void Ebyte_E48x_Init( void )
{
int ret;
uint8_t chip_state = 0;
uint32_t fail_retry = 0;
boolean_t is_chip_cmt2310 = FALSE;
vSpiMasterInit();
init_prepare:
/* Step1 */
vRadioPowerUp(); // Release RST(GPIO5)
vRadioSetAntSwitch(FALSE, FALSE); // Disable GPIO0 & GPIO1 as antenna switch control
vRadioSpiModeSel(FALSE); // SPI 4-Wire mode
g_chip_id = lRadioChipVersion();
chip_state = bRadioGetState();
// OSAL_LOGD("Debug, got information Version[%#X] State[%#X].", g_chip_id, chip_state);
is_chip_cmt2310 = ((g_chip_id & 0x00FFFF00) == 0x00231000);
if (is_chip_cmt2310 && (chip_state == CMT2310A_STATE_IS_READY)) {
DEBUGPRINT("Infor, CMT2310 already in State[READY], so skip initialization.");
goto init_end;
}
else if (is_chip_cmt2310 && (!chip_state || chip_state & 0x80)) { // Valid mode, except IDLE and READY
DEBUGPRINT("Debug, initialize CMT2310 right now with current State[%#X].", chip_state);
goto init_run;
}
else if (fail_retry++ >= GET_CHIP_INFO_RETRY_MAX) {
DEBUGPRINT("Error, get the information of CMT2310 failed with Chip-ID[%#X] State[%#X].", g_chip_id, chip_state);
return -1;
}
else if (fail_retry == 1) {
vRadioPowerUp(); // Release RST(GPIO5)
delay1ms(20);
}
/* Step2 */
g_chip_id = lRadioChipVersion();
if(0x00231000 != (g_chip_id & 0x00FFFF00)) {
DEBUGPRINT("[%s|%u] Error, dismatch Chip-ID[%#x](!=0x231000).\r\n", __FUNCTION__, __LINE__, g_chip_id);
return;
}
DEBUGPRINT("[%s|%u] Info, Link Device:E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
vRadioSoftReset(); // Software reset
vRadioBoot(); // Boot CMT2310 core
delay1ms(50);
/* Step3 */
if (bRadioGetState() == CMT2310A_STATE_IS_READY) {
DEBUGPRINT("[%s|%u] Infor, CMT2310 already in State[READY], so skip initialization.\r\n", __FUNCTION__, __LINE__);
return;
}
DEBUGPRINT("[%s|%u] Info, goto initialize E48-XXXM20S.\r\n", __FUNCTION__, __LINE__);
/* Step4 */
goto init_prepare;
init_run:
/* Step3~6 */
vRadioInit();
init_end:
return ret;
}
void Ebyte_E48x_SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout )

View File

@ -430,6 +430,11 @@ void vRadioRegPageSel( uint8_t page_sel )
}
}
void vRadioBoot( void )
{
bSpiWriteByte( CMT2310A_CTL_REG_00, CMT2310A_REBOOT );
}
/******************************
**Name: vRadioPowerUpBoot
**Func: Radio power up boot start

View File

@ -15,7 +15,7 @@
#define CM2310A_868MHZ 2
#define CM2310A_915MHZ 3
#define PRODUCT_FREQUENCY CM2310A_410MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#define PRODUCT_FREQUENCY CM2310A_433MHZ//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
#include "radio_spi.h"
#include "CMT2310A_def.h"
@ -83,6 +83,8 @@ extern void vRadioXoWaitCfg( uint8_t div_sel );
extern void delay1ms(uint16_t cnt);
extern void delay10us(uint32_t cnt);
extern void vRadioBoot( void );
#endif