7231N SDK开发 打开禁用的RX2
如何打开被禁用的rx2,让模组能够使用rx2接收数据
如何打开被禁用的rx2,让模组能够使用rx2接收数据
BK7231N 的 RX2 被用作了 RF 校准使用,上电 RX2 为低的时候会进入 RF 自动校准模式。
所以如果你需要使用 RX2 ,需要确保上电时 RX2 不会处于拉低状态。
如何修改 RX2 作为普通uart 使用,在 vendor/func/bk7011_cal/bk7231N_cal.c 文件中的 rwnx_cal_load_user_rfcali_mode() 函数中,等待 rx2 作为输入 IO 读取结束之后,重新初始化 RX2,TX2 即可。示例代码如下:
Code: Select all
UINT32 rwnx_cal_load_user_rfcali_mode(int *rfcali_mode)
{
#define RF_MODE_GPIO_ID (GPIO1)
#define RF_MODE_AUTOCALI_GPIO_LEVEL (0)
#define RF_MODE_MANULCALI_GPIO_LEVEL (1)
UINT32 gpio_level, second_func, ret, mode = 0, txpwr_state;
GLOBAL_INT_DECLARATION();
GLOBAL_INT_DISABLE();
/* checking RX of UART2 */
bk_gpio_config_input_pup(RF_MODE_GPIO_ID);
txpwr_state = manual_cal_txpwr_tab_ready_in_flash();
gpio_level = bk_gpio_input(RF_MODE_GPIO_ID);
// 重新初始化 UART2
second_func = GFUNC_MODE_UART2;
gpio_ctrl(CMD_GPIO_ENABLE_SECOND, &second_func);
GLOBAL_INT_RESTORE();
如果你还需要使用 rx2 的中断输入功能,还需要注释 vendor/driver/uart/uart_bk.c 文件的 void uart2_isr(void) 内的 uart_read_fifo_frame(UART2_PORT, uart[UART2_PORT].rx); 。使用 rx2 的中断输入功能示例如下:
Code: Select all
void uart2_isr(void)
{
#if CFG_UART_DEBUG_COMMAND_LINE
UINT32 status;
UINT32 intr_en;
UINT32 intr_status;
intr_en = REG_READ(REG_UART2_INTR_ENABLE);
intr_status = REG_READ(REG_UART2_INTR_STATUS);
REG_WRITE(REG_UART2_INTR_STATUS, intr_status);
status = intr_status & intr_en;
if(status & (RX_FIFO_NEED_READ_STA | UART_RX_STOP_END_STA))
{
// #if (!CFG_SUPPORT_RTT)
// uart_read_fifo_frame(UART2_PORT, uart[UART2_PORT].rx);
// #endif
...
RX2 被用作了 RF 校准使用,上电 RX2 为低的时候会进入 RF 自动校准模式。进入校准模式后就不能当普通串口接收数据使用了吗
可以用做普通串口使用的,在 vendor/func/bk7011_cal/bk7231N_cal.c 文件中的 rwnx_cal_load_user_rfcali_mode() 函数内使用 RX2 读取 IO 高低电平之后就可正常使用该 GPIO 了。再次之前对这个 io 进行操作,会在执行到 rwnx_cal_load_user_rfcali_mode() 时将 RX2 脚初始化为 gpio 输入使用,导致在此之前的配置无用。所以需要在 RX2 读取 IO 高低电平之后进行操作