|
下面这个是通过寄存器23获取FM信号质量:
- /*
- *********************************************************************************************************
- * 函 数 名: SI4730_GetFMSignalQuality
- * 功能说明: 读取FM接收信号质量
- * 形 参: _ReadBuf 返回结果存放在此缓冲区,请保证缓冲区大小大于等于7
- * 返 回 值: 0 失败, 1 成功
- *********************************************************************************************************
- */
- uint8_t SI4730_GetFMSignalQuality(uint8_t *_ReadBuf)
- {
- /*
- FM_RSQ_STATUS
- Queries the status of the Received Signal Quality (RSQ) for
- the current channel.
- CMD 0x23 FM_RSQ_STATUS
- ARG1 0x01 Clear RSQINT
- STATUS ?0x80 Reply Status. Clear-to-send high.
- RESP1 ?0x00 No blend, SNR high, low, RSSI high or low interrupts.
- RESP2 ?0x01 Soft mute is not engaged, no AFC rail, valid frequency.
- RESP3 ?0xD9 Pilot presence, 89% blend
- RESP4 ?0x2D RSSI = 45 dBμV
- RESP5 ?0x33 SNR = 51 dB
- RESP6 ?0x00
- RESP7 ?0x00 Freq offset = 0 kHz
- */
- uint8_t ucCmdBuf[32];
- uint32_t uiTimeOut;
- uint32_t i;
- ucCmdBuf[0] = 0x23;
- ucCmdBuf[1] = 0x01;
- SI4730_SendCmd(ucCmdBuf, 2);
- uiTimeOut = SI4730_WaitStatus80(1000, 0);
- if (uiTimeOut == 0)
- {
- return 0;
- }
- /* 连续读取7个字节的器件返回信息 */
- for (i = 0; i < 7; i++)
- {
- i2c_Ack();
- _ReadBuf[i] = i2c_ReadByte();
- }
- i2c_NAck();
- i2c_Stop();
- return 1;
- }
复制代码 下面这个是通过寄存22获取信号质量:
- /*
- *********************************************************************************************************
- * 函 数 名: SI4730_GetFMTuneStatus
- * 功能说明: 读取FM调谐状态
- * 形 参: 返回结果存放在此缓冲区,请保证缓冲区大小大于等于7
- * 返 回 值: 0 失败, 1 成功
- *********************************************************************************************************
- */
- uint8_t SI4730_GetFMTuneStatus(uint8_t *_ReadBuf)
- {
- /*
- CMD 0x22 FM_TUNE_STATUS
- ARG1 0x01 Clear STC interrupt.
- STATUS ?0x80 Reply Status. Clear-to-send high.
- RESP1 ?0x01 Valid Frequency.
- RESP2 ?0x27 Frequency = 0x27F6 = 102.3 MHz
- RESP3 ?0xF6
- RESP4 ?0x2D RSSI = 45 dBμV
- RESP5 ?0x33 SNR = 51 dB
- RESP6 ?0x00 MULT[7:0]
- RESP7 ?0x00 Antenna tuning capacitor = 0 (range = 0–191) READANTCAP[7:0] (Si4704/05/06/2x only)
- */
- uint8_t ucCmdBuf[32];
- uint32_t uiTimeOut;
- uint32_t i;
- ucCmdBuf[0] = 0x22;
- ucCmdBuf[1] = 0x01;
- SI4730_SendCmd(ucCmdBuf, 2);
- uiTimeOut = SI4730_WaitStatus80(100, 0);
- if (uiTimeOut == 0)
- {
- return 0;
- }
- /* 连续读取7个字节的器件返回信息 */
- for (i = 0; i < 7; i++)
- {
- i2c_Ack();
- _ReadBuf[i] = i2c_ReadByte();
- }
- i2c_NAck();
- i2c_Stop();
- return 1;
- }
复制代码 |
|