CC1310切换速率的办法
生活随笔
收集整理的這篇文章主要介紹了
CC1310切换速率的办法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
客戶在使用CC131開發產品的過程中,經常會遇到切換速率的場景,比如此刻使用50Kbps速率傳輸,下一時刻使用10Kbps速率傳輸,那么如何有效的在各個速率之間切換,這里介紹兩個辦法:
一、使用RF_control來切換速率
RF_control函數說明如下:
/** * @brief Set RF control parameters *
- @note Calling context : Task *
-
- @param h Handle previously returned by RF_open()
-
- @param ctrl Control codes
-
- @param args Pointer to control arguments
-
- @return RF_Stat indicates if API call was successfully completed.
- */
- extern RF_Stat RF_control(RF_Handle h, int8_t ctrl, void *args);
- 其中形參h為rfhandle,必須RF_control執行之前由RF_open打開形參ctrl為命令,為RF_CTRL_UPDATE_SETUP_CMD,這個命令說明如下:
- /! * @brief Control code used by RF_control to update setup command * * Setting this control notifies RF that the setup command is to be updated, so that RF will take * proper actions when executing the next setup command. * Note the updated setup command will take effect in the next power up cycle when RF executes the * setup command. Prior to updating the setup command, user should make sure all pending commands * have completed. /
#define RF_CTRL_UPDATE_SETUP_CMD 1
也就是執行這個命令會讓RF使用新的參數來進行下一次數據收發。
具體使用方法如下,這里首先使用默認的50Kbps速率發送一包數據,然后修改RF_cmdPropRadioDivSetup相關參數為10Kbps速率,然后調用RF_yield將RF關閉并開始啟用新的參數,最后開始使用10Kbps開始一次新的數據傳輸:
result = RF_runCmd(rfHandle, (RF_Op)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
if (!(result & RF_EventLastCmdDone))
{ while(1); }
HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0 ) = ( 1 << 25 );
RF_cmdPropRadioDivSetup.modulation.deviation = 0x4C;
RF_cmdPropRadioDivSetup.symbolRate.rateWord = 0x199A;
RF_cmdPropRadioDivSetup.rxBw = 0x23;
RF_cmdPropRadioDivSetup.pRegOverride = pOverrides_10K;
RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD, NULL);
RF_yield(rfHandle); //Force a power down using RF_yield() API. This will power down RF after all pending radio commands are complete.
HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0 ) = ( 1 << 25 );
result = RF_runCmd(rfHandle, (RF_Op)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);if (!(result & RF_EventLastCmdDone)){ while(1); }
這里測試標紅部分代碼的執行時間約為18.8uS,效率很高。而且用另一塊板子設定在10Kbps速率接收,數據能夠正確接收到,說明速率切換成功了。
二、使用RF_close來切換速率
這個方法很簡答,將RF關閉,然后重新初始化RF,再打開RF,就切換到新的速率了,具體使用方法如下:HWREG( GPIO_BASE + GPIO_O_DOUTSET31_0 ) = ( 1 << 25 );
RF_close(rfHandle);
rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_10K, &rfParams);
RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
HWREG( GPIO_BASE + GPIO_O_DOUTCLR31_0 ) = ( 1 << 25 );
這里測試標紅部分代碼的執行時間約為460uS,效率較RF_control相比低多了。
三、使用RFC_GPO3來映射:
由圖中可以看到,當TX開始時GPO3拉高,當TX結束時GPO3拉低。我們將RFC_GPO3映射到LED引腳上,
如下:PINCC26XX_setMux(ledPinHandle, Board_LED3, PINCC26XX_MUX_RFC_GPO3);
通過觀察LED3的波形來觀察時間,如下圖:
圖中的低電平即表示上一次tx結束到下一次tx開始的時間,約為1.5ms,高電平的時間表示以10Kbps或者50Kbps發送時的時間。
源文件見:C:\AAA\1-Sub-1G\CC1310\A-Test OK\CC1310_RFStatusSwitch_Test.rar
總結
以上是生活随笔為你收集整理的CC1310切换速率的办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu查询PC的bios信息
- 下一篇: 学术前沿趋势分析Task01