主题中讨论的其他器件: CC1312R、 CC1190
您好!
我们使用 CC1352P-launchpad-P2作为参考设计了一款定制电路板。 由于我们只需要2.4GHz 信号、因此我们丢弃了900MHz 匹配 元件、将 SKY13317上的一个控制引脚连接到 GND、然后仅使用两个 GPIO 在低功率和高功率900MHz 信号之间切换。
/* Owned by /ti/drivers/RF as */ extern const uint_least8_t CONFIG_RF_24GHZ_CONST; #define CONFIG_RF_24GHZ 27 /* Owned by /ti/drivers/RF as */ extern const uint_least8_t CONFIG_RF_HIGH_PA_CONST; #define CONFIG_RF_HIGH_PA 28 /* Owned by /ti/drivers/RF as */ extern const uint_least8_t CONFIG_RF_SUB1GHZ_CONST; #define CONFIG_RF_SUB1GHZ 30
在参考设计中、GPIO 从 DIO_28和 DIO_29切换到 DIO_27和 DIO_28、以简化布局。 在这种情况下、我们应该如何实现射频/天线切换回调函数? 由于射频天线引脚名称是在 syscfg 中定义的、 我们是否可以 为参考板复制由 syscfg 生成的代码?
/*
* ======== Antenna switching ========
*/
/*
* ======== rfDriverCallbackAntennaSwitching ========
* Sets up the antenna switch depending on the current PHY configuration.
*
* Truth table:
*
* Path DIO27 DIO28 DIO30
* ========== ===== ===== =====
* Off 0 0 0
* 2.4 GHZ 1 0 0
* HIGH PA 0 1 0
* SUB1 GHZ 0 0 1
*/
void rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
{
if (events & RF_GlobalEventRadioSetup) {
bool sub1GHz = false;
uint8_t loDivider = 0;
/* Switch off all paths. */
GPIO_write(CONFIG_RF_24GHZ, 0);
GPIO_write(CONFIG_RF_HIGH_PA, 0);
GPIO_write(CONFIG_RF_SUB1GHZ, 0);
/* Decode the current PA configuration. */
RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
/* Decode the generic argument as a setup command. */
RF_RadioSetup* setupCommand = (RF_RadioSetup*)arg;
switch (setupCommand->common.commandNo) {
case (CMD_RADIO_SETUP):
case (CMD_BLE5_RADIO_SETUP):
loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
/* Sub-1GHz front-end. */
if (loDivider != 0) {
sub1GHz = true;
}
break;
case (CMD_PROP_RADIO_DIV_SETUP):
loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
/* Sub-1GHz front-end. */
if (loDivider != 0) {
sub1GHz = true;
}
break;
default:break;
}
if (sub1GHz) {
/* Sub-1 GHz */
if (paType == RF_TxPowerTable_HighPA) {
/* PA enable --> HIGH PA
* LNA enable --> Sub-1 GHz
*/
GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
/* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
de-asserted on CC1352 Rev A. */
GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_RFC_GPO0);
} else {
/* RF core active --> Sub-1 GHz */
GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
GPIO_write(CONFIG_RF_SUB1GHZ, 1);
}
} else {
/* 2.4 GHz */
if (paType == RF_TxPowerTable_HighPA)
{
/* PA enable --> HIGH PA
* LNA enable --> 2.4 GHz
*/
GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_RFC_GPO0);
/* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
de-asserted on CC1352 Rev A. */
GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
} else {
/* RF core active --> 2.4 GHz */
GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
GPIO_write(CONFIG_RF_24GHZ, 1);
}
}
}
else if (events & RF_GlobalEventRadioPowerDown) {
/* Switch off all paths. */
GPIO_write(CONFIG_RF_24GHZ, 0);
GPIO_write(CONFIG_RF_HIGH_PA, 0);
GPIO_write(CONFIG_RF_SUB1GHZ, 0);
/* Reset the IO multiplexer to GPIO functionality */
GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
}
}
请告知。
谢谢。
ZL