⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mt6189a1_drv.c

📁 gemini0816 fm drv new
💻 C
📖 第 1 页 / 共 5 页
字号:
   { 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 + -