📄 mt6189a1_drv.c
字号:
{ CW( 8, 1), 0xF7, 0x00 }, /// CW8 [11:11] 0
{ CW( 8, 1), 0xFE, 0x01 }, /// CW8 [8:8] 1
{ CW( 9, 1), 0xFE, 0x01 }, /// CW9 [8:8] 1
{ CW( 10, 0), 0xBF, 0x00 }, /// CW10 [6:6] 0
{ CW( 10, 0), 0xBF, 0x40 }, /// CW10 [6:6] 1
#if defined REF_CLK_32K //==============================================
{ CW( 3, 0), 0x1C, 0x22 }, /// CW3 [7:5] 1, /// CW3 [1:0] 2
#elif defined REF_CLK_13M
{ CW( 3, 0), 0x1C, 0x42 }, /// CW3 [7:5] 2, /// CW3 [1:0] 2
#elif defined REF_CLK_26M
{ CW( 3, 0), 0x1C, 0xC2 }, /// CW3 [7:5] 6, /// CW3 [1:0] 2
#endif //=================================================================
{ CW( 3, 1), 0xDF, 0x20 }, /// CW3 [13:13] 1
{ CW( 12, 1), 0xFD, 0x00 }, /// CW12 [9:9] 0
{ CW( 12, 0), 0xFE, 0x00 }, /// CW12 [0:0] 0
{ CW( 6, 1), 0x00, 0x1A }, /// CW6 [15:8] 26
{ CW( 7, 1), 0xFC, 0x00 }, /// CW7 [9:8] 0
{ CW( 98, 1), 0xE0, 0x00 }, /// CW98 [12:8] 0
{ CW( 98, 0), 0xF0, 0x00 }, /// CW98 [3:0] 0
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
{ CW( 6, 1), 0x00, 0xAA }, /// CW6 [15:8] 170
{ CW( 25, 1), 0x00, 0x02 }, /// CW25 [15:8] 2+
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 98, 1), 0x00, 0x00 }, /// CW98 [15:8] 0
{ CW( 98, 0), 0x00, 0x00 }, /// CW98 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 6, 1), 0x00, 0xAA }, /// CW6 [15:8] 170
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0: reset CW1_0
{ CW( 98, 0), 0x00, 0x00 }, /// CW98 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 6, 1), 0x0F, 0xB0 }, /// CW6 [15:12] 11
{ CW( 7, 1), 0x00, 0x03 }, /// CW7 [15:8] 3
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0: reset CW1_0
};
#define CAL_DEMOD_Q_COMMAND_COUNT 41
static const ctrl_word_operation CalDemodQProcess[CAL_DEMOD_Q_COMMAND_COUNT] = {
{ CW( 1, 1), 0xDF, 0x00 }, /// CW1 [13:13] 0
{ CW( 10, 0), 0xF7, 0x00 }, /// CW10 [3:3] 0
{ CW( 8, 1), 0xF7, 0x00 }, /// CW8 [11:11] 0
{ CW( 8, 1), 0xFE, 0x01 }, /// CW8 [8:8] 1
{ CW( 9, 1), 0xFE, 0x01 }, /// CW9 [8:8] 1
{ CW( 10, 0), 0xBF, 0x00 }, /// CW10 [6:6] 0
{ CW( 10, 0), 0xBF, 0x40 }, /// CW10 [6:6] 1
#if defined REF_CLK_32K //==============================================
{ CW( 3, 0), 0x1C, 0x22 }, /// CW3 [7:5] 1, /// CW3 [1:0] 2
#elif defined REF_CLK_13M
{ CW( 3, 0), 0x1C, 0x42 }, /// CW3 [7:5] 2, /// CW3 [1:0] 2
#elif defined REF_CLK_26M
{ CW( 3, 0), 0x1C, 0xC2 }, /// CW3 [7:5] 6, /// CW3 [1:0] 2
#endif //=================================================================
{ CW( 3, 1), 0xDF, 0x20 }, /// CW3 [13:13] 1
{ CW( 12, 1), 0xFD, 0x00 }, /// CW12 [9:9] 0
{ CW( 12, 0), 0xFE, 0x00 }, /// CW12 [0:0] 0
{ CW( 6, 1), 0x00, 0x1A }, /// CW6 [15:8] 28
{ CW( 7, 1), 0xFC, 0x00 }, /// CW7 [9:8] 0
{ CW( 99, 1), 0xE0, 0x00 }, /// CW99 [12:8] 0
{ CW( 99, 0), 0xF0, 0x00 }, /// CW99 [3:0] 0
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
{ CW( 6, 1), 0x00, 0xCC }, /// CW6 [15:8] 204
{ CW( 25, 1), 0x00, 0x02 }, /// CW25 [15:8] 2
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 99, 1), 0x00, 0x00 }, /// CW99 [15:8] 0
{ CW( 99, 0), 0x00, 0x00 }, /// CW99 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 6, 1), 0x00, 0xCC }, /// CW6 [15:8] 204
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0: reset CW1_0
{ CW( 99, 0), 0x00, 0x00 }, /// CW99 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x22 }, /// CW25 [7:0] 34
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x11 }, /// CW25 [7:0] 17
#endif //=================================================================
{ CW( 6, 1), 0x0F, 0xD0 }, /// CW6 [15:12] 13
{ CW( 7, 1), 0x00, 0x03 }, /// CW7 [15:8] 3
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0: reset CW1_0
};
#define CAL_PILOT_COMMAND_COUNT 37
static const ctrl_word_operation CalPilotProcess[CAL_PILOT_COMMAND_COUNT] = {
{ CW( 10, 1), 0xFB, 0x00 }, /// CW10 [10:10] 0
{ CW( 10, 0), 0x6F, 0x80 }, /// CW10 [7:7] 1, [4:4] 0
{ CW( 11, 1), 0xDF, 0x00 }, /// CW11 [13:13] 0
{ CW( 11, 1), 0xDF, 0x20 }, /// CW11 [13:13] 1
{ CW( 1, 1), 0xDF, 0x00 }, /// CW1 [13:13] 0
{ CW( 10, 0), 0xF7, 0x00 }, /// CW10 [3:3] 0
{ CW( 8, 1), 0xF7, 0x00 }, /// CW8 [11:11] 0
{ CW( 8, 1), 0xFE, 0x01 }, /// CW8 [8:8] 1
{ CW( 9, 1), 0xFE, 0x01 }, /// CW9 [8:8] 1
{ CW( 10, 0), 0xBF, 0x00 }, /// CW10 [6:6] 0
{ CW( 10, 0), 0xBF, 0x40 }, /// CW10 [6:6] 1
#if defined REF_CLK_32K //==============================================
{ CW( 3, 0), 0x1C, 0x22 }, /// CW3 [7:5] 1, /// CW3 [1:0] 2
#elif defined REF_CLK_13M
{ CW( 3, 0), 0x1C, 0x42 }, /// CW3 [7:5] 2, /// CW3 [1:0] 2
#elif defined REF_CLK_26M
{ CW( 3, 0), 0x1C, 0xC2 }, /// CW3 [7:5] 6, /// CW3 [1:0] 2
#endif //=================================================================
{ CW( 3, 1), 0xDF, 0x20 }, /// CW3 [13:13] 1
{ CW( 12, 1), 0xFD, 0x00 }, /// CW12 [9:9] 0
{ CW( 12, 0), 0xFE, 0x00 }, /// CW12 [0:0] 0
{ CW( 6, 1), 0x00, 0x1E }, /// CW6 [15:8] 30
{ CW( 7, 1), 0xFC, 0x00 }, /// CW7 [9:8] 0
{ CW( 97, 1), 0xE0, 0x00 }, /// CW97 [12:8] 0
{ CW( 97, 0), 0xF0, 0x00 }, /// CW97 [3:0] 0
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 6, 0), 0xFC, 0x01 }, /// CW6 [1:0] 1
{ CW( 6, 1), 0x00, 0xEE }, /// CW6 [15:8] 238
{ CW( 25, 1), 0x00, 0x03 }, /// CW25 [15:8] 3
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x7A }, /// CW25 [7:0] 122
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x5E }, /// CW25 [7:0] 94
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x5E }, /// CW25 [7:0] 94
#endif //=================================================================
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0, reset CW1_0
#if defined REF_CLK_32K //==============================================
{ CW( 25, 0), 0x00, 0x7A }, /// CW25 [7:0] 122
#elif defined REF_CLK_13M
{ CW( 25, 0), 0x00, 0x5E }, /// CW25 [7:0] 94
#elif defined REF_CLK_26M
{ CW( 25, 0), 0x00, 0x5E }, /// CW25 [7:0] 94
#endif //=================================================================
{ CW( 6, 1), 0x0F, 0xF0 }, /// CW6 [15:12] 15
{ CW( 7, 1), 0xFC, 0x03 }, /// CW7 [9:8] 3
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0
#if defined REF_CLK_32K //==============================================
{ CW( 5, 0), 0xEF, 0x10 }, /// CW5 [4:4] 1
#elif defined REF_CLK_13M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#elif defined REF_CLK_26M
{ CW( 5, 0), 0xEF, 0x00 }, /// CW5 [4:4] 0
#endif //=================================================================
{ CW( 6, 1), 0xFE, 0x01 }, /// CW6 [8:8] 1
{ CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
{ CW( 1, 0), 0x00, 0x00 }, /// CW1 [7:0] 0, reset CW1_0
};
static uint8 MT6189_ReadCache(uint8 CW)
{
if (CW < 52)
return cw_cache[CW];
else
return cw_cache[CW-142];
}
static void MT6189_ReadByte(uint8 CW, uint8 *data)
{
if (CW == 255) {
*data = 0;
return;
}
#if defined USE_I2C
SerialCommStart(); /// send the start sequence
SerialCommTxByte(MT6189_WRITE); /// device ID and R/W bit
SerialCommTxByte(CW); /// control word
SerialCommStart(); /// resend the start sequence
SerialCommTxByte(MT6189_READ); /// device ID and R/W bit
SerialCommRxByte(data, 0); /// read data and send ACK
SerialCommStop(); /// send the stop sequence
#elif defined USE_3_WIRE
SerialCommRxByte(CW, data);
#else
#error "Must define USE_I2C or USE_3_WIRE"
#endif
}
/* MT6189 does not support sequential write. */
static bool MT6189_WriteByte(uint8 CW, uint8 data)
{
if (CW == 255) {
uint32 i = 0;
while (1) {
uint8 dataRead;
MT6189_ReadByte(CW(1,0), &dataRead);
if (dataRead & data) {
return true;
}
if (i++ == 20) {
return false;
}
kal_sleep_task(1);
}
}
#if defined USE_I2C
SerialCommStart(); /// send the start sequence
SerialCommTxByte(MT6189_WRITE); /// device ID and R/W bit
SerialCommTxByte(CW); /// control word
SerialCommTxByte(data); /// data to be written
SerialCommStop(); /// send the stop sequence
#elif defined USE_3_WIRE
SerialCommTxByte(CW, data);
#else
#error "Must define USE_I2C or USE_3_WIRE"
#endif
if (CW < 52)
cw_cache[CW] = data;
else
cw_cache[CW-142] = data;
#if defined MT6189_DEBUG
MT6189_ReadByte(CW, &dbg_cw_readback);
#endif
return true;
}
#if defined MT6189_DEBUG
static void MT6189_DumpCtrlWord(void) {
uint32 i;
for (i=0; i<26; i++) {
MT6189_ReadByte((i<<1), &(cw_cache[i << 1]));
MT6189_ReadByte((i<<1)+1, &(cw_cache[(i << 1)+1]));
}
for (i=97; i<104; i++) {
MT6189_ReadByte((i<<1), &(cw_cache[(i-71) << 1]));
MT6189_ReadByte((i<<1)+1, &(cw_cache[((i-71) << 1) + 1]));
}
}
#endif
void FMDrv_radio_item_info(kal_uint16 group_idx, kal_uint16 item_idx, kal_uint32 item_value)
{
uint8 TmpReg1;
SerialCommInit();
switch (group_idx)
{
case mono:
if(item_value == 1)
{
MT6189_ReadByte(CW(14, 0), &TmpReg1);
TmpReg1&=0x6F;
MT6189_WriteByte(CW(14, 0),TmpReg1);
}
else
{
MT6189_ReadByte(CW(14, 0), &TmpReg1);
TmpReg1&=0x6F;
MT6189_WriteByte(CW(14, 0),(uint8)(TmpReg1) | 0x10);
}
break;
case stereo:
if(item_value == 0)
{
MT6189_ReadByte(CW(14, 0), &TmpReg1);
TmpReg1&=0x6F;
MT6189_WriteByte(CW(14, 0),TmpReg1);
}
switch (item_idx)
{
case Sblend_ON:
MT6189_ReadByte(CW(14, 0), &TmpReg1);
TmpReg1&=0x6F;
MT6189_WriteByte(CW(14, 0),(uint8)(TmpReg1) | 0x10);
break;
case Sblend_OFF:
MT6189_ReadByte(CW(14, 0), &TmpReg1);
TmpReg1&=0x6F;
MT6189_WriteByte(CW(14, 0),(uint8)(TmpReg1) | 0x10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -