一. 控制接口
RDA5807 提供了 I2C 作为控制接口.
在该接口下,有两中读写方式,分别是连续读写方式和带寄存器地址的标准 I2C 方式,两种方式通过I2C 的器件地址来区分实现,读写方式和器件地址详细描述如下:
1、连续读写方式:
在该模式下,寄存器的地址是不可见的,即有一个固定的起始寄存器地址(写操作时为 02H,读操作时为 0AH),并有一个内部递增计数器,I2C 器件地址为 0010000B,加上读写标志,即 I2C 器件地址为0x20(写操作)和 0x21(读操作)
(1)、 写操作: 写操作默认起始寄存器为 02H, 即所有写操作都是默认从 02H开始,即使只写如 03H 或者 05H,都必须从 02H 写起,MCU 写入寄存器的顺序如下:02H 的高字节,02H 的低字节,03H 的高字节,……,直到结束。芯片在 MCU 写入每个字节后都会返回一个 ACK。MCU 会给出 STOP 来结束操作。
(2)、 读操作: 读操作默认起始寄存器为 0AH, 即所有读操作都是默认从 0AH开始。在对芯片进行读操作时,MCU 给出命令字节后,RDA5807HP 会送出数据字节,顺序如下:0AH 高字节,0AH 低字节,0BH 高字节,……,直到芯片接收到从 MCU 发出的 NACK, MCU 送出 STOP,读操作结束。除了最后一个字节, MCU 在读到每个字节后都要给出 ACK, 在读到最后一个字节后, MCU给出 NACK,使芯片把总线交给 MCU,然后 MCU 发出 STOP,结束整个操作。
2、标准 I2C 读写方式:
该模式是与标准 I2C 读写方式一致,即带寄存器地址的方式,I2C 器件地址为 0010001B,加上读写标志位,即为 0x22(写操作)和 0x23(读操作),读写方式的格式如下:
二. 状态转换
RDA5807HP 中有 5 种状态: 复位初始化(Reset&Initial),设置频点(Tune), 搜台(Seek),工作(Working),休眠(Sleep)。
在芯片上电和复位后,软件通过编写 ENABLE(02H,bit 0)寄存器,将其置为 1,即可使RDA5807HP 进入上电状态。 软件通过编程相应寄存器, 即可使 RDA5807HP 进入 Tune 或 Seek状态,这些操作之后,RDA5807HP 进入正常工作状态(Working)。软件通过将 ENABLE 置为 0,可使 RDA5807HP 进入睡眠状态,此时所有寄存器值保持不变(与未睡眠之前相同)。在睡眠状态时,软件可通过编写 ENABLE 为 1,即可将 RDA5807HP 回到正常工作(Working)状态。进入工作模式后,软件需要重新设置所需要的频点,即重新进行一次 Tune 操作。
单片机源程序如下:
- /****************************************************************************************
- * 说 明: FM收音机固定频率实验
- * 开发平台: 剑齿虎STM8开发板
- * 作 者: 刘洋 张殿东
- * 版 本: V1.0
- ****************************************************************************************/
- #include "pbdata.h"
- void BSP_Configuration(void);
- /****************************************************************************************
- * 函 数 名: main
- * 功能说明: c程序入口
- * 形 参:无
- * 返 回 值: 错误代码(无需处理)
- ****************************************************************************************/
- int main(void)
- {
- u16 time=0;
- u8 key=0;
-
- BSP_Configuration();
-
- while(1)
- {
- key=TM1650_Key();
-
- switch(key)
- {
- case 0x64: //上搜台
- {
- RDA_Seek_Direction(1);
- RXFreq=RDA_Search_Freq();
- RDA_Freq_View(RXFreq);
- while(TM1650_Key()==key);
- }
- break;
- case 0x5C:// 下搜台
- {
- 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:// 确定键 开关
- {
- RDA_Enable();
- while(TM1650_Key()==key);
- }
- break;
- }
-
- if(KEY_Down(K1_PORT,K1_PIN)==true)//向下微调
- {
- RDA_Freq_Down();
- }
-
- if(KEY_Down(TOUCH_PORT, TOUCH_PIN)==true)//向上微调
- {
- RDA_Freq_Up();
- }
-
- time++;
- delay_ms(1);
- if(time>1000)
- {
- time=0;
- printf("频率:%d\r\n",RXFreq);
- printf("信号:%d\r\n",RDA_RSSI());
- printf("音量:%d\r\n",Vol);
- printf("\r\n");
- }
- }
- }
- /****************************************************************************************
- * 函 数 名: BSP_Configuration
- * 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
- * 形 参:无
- * 返 回 值: 无
- ****************************************************************************************/
- void BSP_Configuration(void)
- {
- CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
【众拳】剑齿虎STM8开发板的实验代码下载:
众拳RDA5807收音机实验程序.zip
(1.92 MB, 下载次数: 168)
资料.zip
(869.77 KB, 下载次数: 100)
|