主题中讨论的其他器件: 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