- 在sdk_config.h中定义宏
// PA功能配置菜单
// PA TX引脚配置
//
#ifndef PA_TX_PIN
#define PA_TX_PIN 24
#endif
// PA RX引脚配置
//
#ifndef PA_RX_PIN
#define PA_RX_PIN 20
#endif
//
2. PA功能函数实现
void pa_lna_assist(uint32_t gpio_pa_pin, uint32_t gpio_lna_pin);
//--------------------ANT PA----------------------------------------
void setAntPaLnaConfig(uint32_t gpio_pa_pin, uint32_t gpio_lna_pin)
{
ret_code_t err_code;
ANT_PA_LNA_CONFIG ant_pa_lna_config;
ant_pa_lna_config.PA_CONFIG.bEnabled = true;
ant_pa_lna_config.PA_CONFIG.ucGPIO = gpio_pa_pin;
ant_pa_lna_config.PA_CONFIG.bActiveState = 1;
ant_pa_lna_config.LNA_CONFIG.bEnabled = true;
ant_pa_lna_config.LNA_CONFIG.ucGPIO = gpio_lna_pin;
ant_pa_lna_config.LNA_CONFIG.bActiveState = 1;
nrf_ppi_channel_t ppi_set_ch;
nrf_ppi_channel_t ppi_clr_ch;
uint32_t gpio_toggle_ch = 0;
err_code = nrf_drv_ppi_channel_alloc(&ppi_set_ch);
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_ppi_channel_alloc(&ppi_clr_ch);
APP_ERROR_CHECK(err_code);
ant_pa_lna_config.ucGPIOTECh = gpio_toggle_ch;
ant_pa_lna_config.ucPPIChEnable = ppi_set_ch;
ant_pa_lna_config.ucPPIChDisable = ppi_clr_ch;
sd_ant_config_pa_lna_set(&ant_pa_lna_config);
}
//------------------BLE PA----------------------------------------------
void pa_lna_assist(uint32_t gpio_pa_pin, uint32_t gpio_lna_pin)
{
ret_code_t err_code;
nrf_ppi_channel_t ppi_set_ch;
nrf_ppi_channel_t ppi_clr_ch;
uint32_t gpio_toggle_ch = 1;
err_code = nrf_drv_ppi_channel_alloc(&ppi_set_ch);
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_ppi_channel_alloc(&ppi_clr_ch);
APP_ERROR_CHECK(err_code);
// Configure SoftDevice PA/LNA assist
ble_opt_t opt;
memset(&opt, 0, sizeof(ble_opt_t));
// Common PA/LNA config
opt.common_opt.pa_lna.gpiote_ch_id = gpio_toggle_ch; // GPIOTE channel
opt.common_opt.pa_lna.ppi_ch_id_clr = ppi_clr_ch; // PPI channel for pin clearing
opt.common_opt.pa_lna.ppi_ch_id_set = ppi_set_ch; // PPI channel for pin setting
// PA config
opt.common_opt.pa_lna.pa_cfg.active_high = 1; // Set the pin to be active high
opt.common_opt.pa_lna.pa_cfg.enable = 1; // Enable toggling
opt.common_opt.pa_lna.pa_cfg.gpio_pin = gpio_pa_pin; // The GPIO pin to toggle
// LNA config
opt.common_opt.pa_lna.lna_cfg.active_high = 1; // Set the pin to be active high
opt.common_opt.pa_lna.lna_cfg.enable = 1; // Enable toggling
opt.common_opt.pa_lna.lna_cfg.gpio_pin = gpio_lna_pin; // The GPIO pin to toggle
err_code = sd_ble_opt_set(BLE_COMMON_OPT_PA_LNA, &opt);
APP_ERROR_CHECK(err_code);
setAntPaLnaConfig(gpio_pa_pin,gpio_lna_pin);
}
3.在main函数主循环前调用pa_lna_assist函数即可实现PA功能