|
一. 控制接口
RDA5807 提供了 I2C 作為控制接口.
在該接口下,有兩中讀寫方式,分別是連續(xù)讀寫方式和帶寄存器地址的標(biāo)準(zhǔn) I2C 方式,兩種方式通過(guò)I2C 的器件地址來(lái)區(qū)分實(shí)現(xiàn),讀寫方式和器件地址詳細(xì)描述如下:
1、連續(xù)讀寫方式:
在該模式下,寄存器的地址是不可見(jiàn)的,即有一個(gè)固定的起始寄存器地址(寫操作時(shí)為 02H,讀操作時(shí)為 0AH),并有一個(gè)內(nèi)部遞增計(jì)數(shù)器,I2C 器件地址為 0010000B,加上讀寫標(biāo)志,即 I2C 器件地址為0x20(寫操作)和 0x21(讀操作)
(1)、 寫操作: 寫操作默認(rèn)起始寄存器為 02H, 即所有寫操作都是默認(rèn)從 02H開(kāi)始,即使只寫如 03H 或者 05H,都必須從 02H 寫起,MCU 寫入寄存器的順序如下:02H 的高字節(jié),02H 的低字節(jié),03H 的高字節(jié),……,直到結(jié)束。芯片在 MCU 寫入每個(gè)字節(jié)后都會(huì)返回一個(gè) ACK。MCU 會(huì)給出 STOP 來(lái)結(jié)束操作。
(2)、 讀操作: 讀操作默認(rèn)起始寄存器為 0AH, 即所有讀操作都是默認(rèn)從 0AH開(kāi)始。在對(duì)芯片進(jìn)行讀操作時(shí),MCU 給出命令字節(jié)后,RDA5807HP 會(huì)送出數(shù)據(jù)字節(jié),順序如下:0AH 高字節(jié),0AH 低字節(jié),0BH 高字節(jié),……,直到芯片接收到從 MCU 發(fā)出的 NACK, MCU 送出 STOP,讀操作結(jié)束。除了最后一個(gè)字節(jié), MCU 在讀到每個(gè)字節(jié)后都要給出 ACK, 在讀到最后一個(gè)字節(jié)后, MCU給出 NACK,使芯片把總線交給 MCU,然后 MCU 發(fā)出 STOP,結(jié)束整個(gè)操作。
2、標(biāo)準(zhǔn) I2C 讀寫方式:
該模式是與標(biāo)準(zhǔn) I2C 讀寫方式一致,即帶寄存器地址的方式,I2C 器件地址為 0010001B,加上讀寫標(biāo)志位,即為 0x22(寫操作)和 0x23(讀操作),讀寫方式的格式如下:
二. 狀態(tài)轉(zhuǎn)換
RDA5807HP 中有 5 種狀態(tài): 復(fù)位初始化(Reset&Initial),設(shè)置頻點(diǎn)(Tune), 搜臺(tái)(Seek),工作(Working),休眠(Sleep)。
在芯片上電和復(fù)位后,軟件通過(guò)編寫 ENABLE(02H,bit 0)寄存器,將其置為 1,即可使RDA5807HP 進(jìn)入上電狀態(tài)。 軟件通過(guò)編程相應(yīng)寄存器, 即可使 RDA5807HP 進(jìn)入 Tune 或 Seek狀態(tài),這些操作之后,RDA5807HP 進(jìn)入正常工作狀態(tài)(Working)。軟件通過(guò)將 ENABLE 置為 0,可使 RDA5807HP 進(jìn)入睡眠狀態(tài),此時(shí)所有寄存器值保持不變(與未睡眠之前相同)。在睡眠狀態(tài)時(shí),軟件可通過(guò)編寫 ENABLE 為 1,即可將 RDA5807HP 回到正常工作(Working)狀態(tài)。進(jìn)入工作模式后,軟件需要重新設(shè)置所需要的頻點(diǎn),即重新進(jìn)行一次 Tune 操作。
單片機(jī)源程序如下:
- /****************************************************************************************
- * 說(shuō) 明: FM收音機(jī)固定頻率實(shí)驗(yàn)
- * 開(kāi)發(fā)平臺(tái): 劍齒虎STM8開(kāi)發(fā)板
- * 作 者: 劉洋 張殿東
- * 版 本: V1.0
- ****************************************************************************************/
- #include "pbdata.h"
- void BSP_Configuration(void);
- /****************************************************************************************
- * 函 數(shù) 名: main
- * 功能說(shuō)明: c程序入口
- * 形 參:無(wú)
- * 返 回 值: 錯(cuò)誤代碼(無(wú)需處理)
- ****************************************************************************************/
- int main(void)
- {
- u16 time=0;
- u8 key=0;
-
- BSP_Configuration();
-
- while(1)
- {
- key=TM1650_Key();
-
- switch(key)
- {
- case 0x64: //上搜臺(tái)
- {
- RDA_Seek_Direction(1);
- RXFreq=RDA_Search_Freq();
- RDA_Freq_View(RXFreq);
- while(TM1650_Key()==key);
- }
- break;
- case 0x5C:// 下搜臺(tái)
- {
- RDA_Seek_Direction(0);
- RXFreq=RDA_Search_Freq();
- RDA_Freq_View(RXFreq);
- while(TM1650_Key()==key);
- }
- break;
- case 0x54:// 左小聲
- {
- RDA_Vol_Small();
- while(TM1650_Key()==key);
- }
- break;
- case 0x44://右大聲
- {
- RDA_Vol_Big();
- while(TM1650_Key()==key);
- }
- break;
- case 0x4C:// 確定鍵 開(kāi)關(guān)
- {
- RDA_Enable();
- while(TM1650_Key()==key);
- }
- break;
- }
-
- if(KEY_Down(K1_PORT,K1_PIN)==true)//向下微調(diào)
- {
- RDA_Freq_Down();
- }
-
- if(KEY_Down(TOUCH_PORT, TOUCH_PIN)==true)//向上微調(diào)
- {
- RDA_Freq_Up();
- }
-
- time++;
- delay_ms(1);
- if(time>1000)
- {
- time=0;
- printf("頻率:%d\r\n",RXFreq);
- printf("信號(hào):%d\r\n",RDA_RSSI());
- printf("音量:%d\r\n",Vol);
- printf("\r\n");
- }
- }
- }
- /****************************************************************************************
- * 函 數(shù) 名: BSP_Configuration
- * 功能說(shuō)明: 初始化硬件設(shè)備。只需要調(diào)用一次。該函數(shù)配置CPU寄存器和外設(shè)的寄存器并初始化一些全局變量。
- * 形 參:無(wú)
- * 返 回 值: 無(wú)
- ****************************************************************************************/
- void BSP_Configuration(void)
- {
- CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
【眾拳】劍齒虎STM8開(kāi)發(fā)板的實(shí)驗(yàn)代碼下載:
眾拳RDA5807收音機(jī)實(shí)驗(yàn)程序.zip
(1.92 MB, 下載次數(shù): 168)
2017-12-8 10:10 上傳
點(diǎn)擊文件名下載附件
資料.zip
(869.77 KB, 下載次數(shù): 100)
2017-12-8 10:10 上傳
點(diǎn)擊文件名下載附件
|
|