FmM5181Adj.c
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:28k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. Target : FM
  4. Applying Source File : FmM5181.c, FmTEA5767.c
  5. content: 
  6. History: 
  7. Created by David Chiu 2004/4/27
  8. Modified  by Dennis Shih 2006/01/16 
  9. ==========================================================================*/
  10. #include <DP8051XP.H>
  11. #include "TypeDef.h"
  12. #include "Const.h"
  13. #include "Reg5661.h"
  14. #include "Common.h"
  15. #if(FM_MODULE==1) //Walace060126#2
  16. #if(_C_MODE_)
  17. #include "OLED.h"
  18. #include "OledString.h"
  19. #endif
  20. #include "FmM5181.h"
  21. #include "I2C.h"
  22. #define POWER_ON_COMMAND_COUNT 49
  23. const ctrl_word_setting code PowerOnSetting[POWER_ON_COMMAND_COUNT] = {
  24.    { CW(  6, 1),  16 },   { CW(  7, 1),   0 },
  25.    { CW(  0, 1),   1 },   { CW(  0, 0),   1 },
  26. //V3
  27. //{ CW( 14, 1),   7 },   { CW( 14, 0), 126 },
  28.    { CW(  1, 1),   6 },   { CW(  1, 0),   0 },
  29.    { CW(  2, 1),  12 },   { CW(  2, 0), 187 },
  30. //#if defined   REF_CLK_32K //==============================================
  31.    { CW(  3, 1),  32 },   { CW(  3, 0),  34 },
  32. /*#elif defined REF_CLK_13M
  33.    { CW(  3, 1),  32 },   { CW(  3, 0),  66 },
  34. #elif defined REF_CLK_26M
  35.    { CW(  3, 1),  32 },   { CW(  3, 0), 194 },
  36. #else
  37. //#error "Reference Clock Definition Error!"
  38. #endif *///=================================================================
  39.    { CW(  4, 1), 194 },   { CW(  4, 0), 183 },
  40.    { CW(  5, 1),   0 },   { CW(  5, 0), 255 },
  41.    { CW(  8, 1),  70 },   { CW(  8, 0),   2 },
  42.    { CW(  9, 1),   4 },   { CW(  9, 0),   2 },
  43.    { CW( 10, 1),  48 },   { CW( 10, 0), 192 },
  44.    { CW( 11, 1),  32 },   { CW( 11, 0),   0 },
  45.    { CW( 12, 1),  49 },   { CW( 12, 0), 128 },
  46.    { CW( 13, 1),   0 },   { CW( 13, 0),   3 },
  47. //#if defined( _32KHz_ )
  48.    { CW( 14, 1),   3 },   { CW( 14, 0), 126 },
  49. /*#else /// power on internal DAC
  50.    { CW( 14, 1),   0 },   { CW( 14, 0), 126 },
  51. #endif*/
  52.    { CW( 15, 1), 138 },   { CW( 15, 0), 170 },
  53.    { CW( 16, 1),  68 },   { CW( 16, 0),  68 },
  54. //{ CW( 16, 1),  0 },   { CW( 16, 0),  0 },
  55.    { CW( 17, 1), 136 },   { CW( 17, 0), 136 },
  56.    { CW( 18, 1), 135 },   { CW( 18, 0),   7 },
  57.    { CW( 19, 1),   0 },   { CW( 19, 0), 170 },
  58.    { CW( 20, 1),   0 },   { CW( 20, 0),   0 },
  59.    { CW( 21, 1),  PILOT_TONE},   { CW( 21, 0),  30 },
  60.    { CW( 23, 1),   0 },   { CW( 23, 0),   0 },
  61.    { CW( 24, 1),   1 },   { CW( 24, 0),   0 },
  62.    { CW(  6, 1),  16 },   { CW(  7, 1),   0 },
  63.    { CW(  7, 0),   7 },
  64. }; 
  65. /*
  66. #define POWER_OFF_COMMAND_COUNT 2
  67.  const ctrl_word_setting code PowerOffSetting[POWER_OFF_COMMAND_COUNT] = {
  68.    { CW(  1, 1),  32 },    { CW(  5, 0),   0 },
  69. };
  70. */
  71. #define POWER_OFF_COMMAND POWER_OFF_COMMAND_COUNT
  72. const ctrl_word_operation xdata PowerOffProc[POWER_OFF_COMMAND_COUNT] = {
  73.    { CW(  1, 1), 0xDF, 0x20 }, /// CW1   [13:13]  1
  74.    { CW(  5, 0), 0x00, 0x00 }, /// CW5   [7:0]    0
  75.    { CW(  3, 0), 0xFE, 0x01 }, /// CW3   [0:0]    1
  76.    { CW( 10, 0), 0xE0, 0x1F }, /// CW10  [4:0]    1
  77.    { CW( 12, 0), 0xFE, 0x01 }, /// CW12  [0:0]    1
  78.    { CW( 12, 1), 0xFD, 0x02 }, /// CW12  [9:9]    1
  79.    { CW( 13, 0), 0xFE, 0x01 }, /// CW13  [0:0]    1
  80.    { CW( 19, 1), 0xFE, 0x01 }, /// CW19  [8:8]    1
  81.    { CW( 21, 0), 0xDF, 0x20 }, /// CW21  [5:5]    1
  82.    { CW( 14, 1), 0x00, 0xFF }, /// CW14  [15:8]   1
  83. };
  84. #define CAL_PLL_COMMAND_COUNT 59
  85. const ctrl_word_operation code CalPLLProcess[CAL_PLL_COMMAND_COUNT] = {
  86.    { CW(  1, 1), 0xDF, 0x00 }, /// CW1   [13:13]  0
  87.    { CW(  3, 0), 0xDD, 0x22 }, /// CW3   [5:5]    1, /// CW3   [1:1]    1
  88.    { CW(  3, 1), 0x1F, 0xE0 }, /// CW3   [15:13]  7
  89.    { CW(  6, 1), 0x0F, 0x10 }, /// CW6   [15:12]  1
  90.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0 
  91. //#if defined   REF_CLK_32K //==============================================
  92.    { CW(  3, 0), 0x1E, 0x20 }, /// CW3   [7:5]    1, /// CW3   [0:0]    0
  93. /*#elif defined REF_CLK_13M
  94.    { CW(  3, 0), 0x1E, 0x40 }, /// CW3   [7:5]    2, /// CW3   [0:0]    0
  95. #elif defined REF_CLK_26M
  96.    { CW(  3, 0), 0x1E, 0xC0 }, /// CW3   [7:5]    6, /// CW3   [0:0]    0
  97. #endif *///=================================================================
  98.    { CW(103, 1), 0xF8, 0x04 }, /// CW103 [10:8]   4
  99.    { CW(103, 0), 0xC0, 0x20 }, /// CW103 [5:0]    32
  100.    { CW(101, 0), 0xF8, 0x04 }, /// CW101 [2:0]    4
  101.    { CW( 12, 0), 0x9E, 0x60 }, /// CW12  [0:0]    0, /// CW12  [6:5]    3
  102.    { CW( 12, 1), 0xFE, 0x01 }, /// CW12  [8:8]    1
  103.    { CW( 14, 0), 0x6F, 0x10 }, /// CW14  [4:4]    1, /// CW14  [7:7]    0
  104.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  105.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  106.    { CW(  6, 1), 0x00, 0x66 }, /// CW6   [15:8]   102
  107.    { CW( 25, 1), 0xF0, 0x03 }, /// CW25  [11:8]   3
  108. //#if defined   REF_CLK_32K //==============================================
  109.    { CW( 25, 0), 0x00, 0x7A }, /// CW25  [7:0]    122
  110. /*#elif defined REF_CLK_13M
  111.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  112. #elif defined REF_CLK_26M
  113.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  114. #endif*/ //=================================================================
  115.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  116. //#if defined   REF_CLK_32K //==============================================
  117.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  118. /*#elif defined REF_CLK_13M
  119.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  120. #elif defined REF_CLK_26M
  121.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  122. #endif *///=================================================================
  123.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  124.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  125.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0, reset CW1_0
  126.    { CW(  6, 1), 0x0F, 0x10 }, /// CW6   [15:12]  1
  127.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0
  128. //#if defined   REF_CLK_32K //==============================================
  129.    { CW(  3, 0), 0x1E, 0x20 }, /// CW3   [7:5]    1, /// CW3   [0:0]    0
  130. /*#elif defined REF_CLK_13M
  131.    { CW(  3, 0), 0x1E, 0x40 }, /// CW3   [7:5]    2, /// CW3   [0:0]    0
  132. #elif defined REF_CLK_26M
  133.    { CW(  3, 0), 0x1E, 0xC0 }, /// CW3   [7:5]    6, /// CW3   [0:0]    0
  134. #endif*/ //=================================================================
  135.    { CW( 12, 0), 0x9E, 0x60 }, /// CW12  [6:5]    3, /// CW12  [0:0]    0
  136.    { CW( 12, 1), 0xFE, 0x01 }, /// CW12  [8:8]    1
  137.    { CW( 14, 0), 0x6F, 0x10 }, /// CW14  [4:4]    1, /// CW14  [7:7]    0
  138.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  139.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  140.    { CW(  6, 1), 0x00, 0x76 }, /// CW6   [15:8]   118
  141.    { CW( 25, 1), 0xF0, 0x03 }, /// CW25  [11:8]   3
  142. //#if defined   REF_CLK_32K //==============================================
  143.    { CW( 25, 0), 0x00, 0x7A }, /// CW25  [7:0]    122
  144. /*#elif defined REF_CLK_13M
  145.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  146. #elif defined REF_CLK_26M
  147.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  148. #endif*/ //=================================================================
  149.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  150. //#if defined   REF_CLK_32K //==============================================
  151.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  152. /*#elif defined REF_CLK_13M
  153.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  154. #elif defined REF_CLK_26M
  155.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  156. #endif *///=================================================================
  157.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  158.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  159.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0, reset CW1_0
  160.    { CW(  6, 1), 0x0F, 0x10 }, /// CW6   [15:12]  1
  161.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0
  162. //#if defined   REF_CLK_32K //==============================================
  163.    { CW(  3, 0), 0x1E, 0x20 }, /// CW3   [7:5]    1, /// CW3   [0:0]    0
  164. /*#elif defined REF_CLK_13M
  165.    { CW(  3, 0), 0x1E, 0x40 }, /// CW3   [7:5]    2, /// CW3   [0:0]    0
  166. #elif defined REF_CLK_26M
  167.    { CW(  3, 0), 0x1E, 0xC0 }, /// CW3   [7:5]    6, /// CW3   [0:0]    0
  168. #endif *///=================================================================
  169.    { CW( 12, 0), 0x9E, 0x60 }, /// CW12  [6:5]    3, /// CW12  [0:0]    0
  170.    { CW( 12, 1), 0xFE, 0x01 }, /// CW12  [8:8]    1
  171.    { CW( 14, 0), 0x6F, 0x10 }, /// CW14  [4:4]    1, /// CW14  [7:7]    0
  172.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  173.    { CW(  6, 1), 0x00, 0x56 }, /// CW6   [15:8]   86
  174.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  175.    { CW( 25, 1), 0xF0, 0x03 }, /// CW25  [11:8]   3
  176. //#if defined   REF_CLK_32K //==============================================
  177.    { CW( 25, 0), 0x00, 0x7A }, /// CW25  [7:0]    122
  178. /*#elif defined REF_CLK_13M
  179.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  180. #elif defined REF_CLK_26M
  181.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  182. #endif *///=================================================================
  183.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  184. //#if defined   REF_CLK_32K //==============================================
  185.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  186. /*#elif defined REF_CLK_13M
  187.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  188. #elif defined REF_CLK_26M
  189.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  190. #endif*/ //=================================================================
  191.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  192.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  193.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0, reset CW1_0
  194.    { CW( 14, 0), 0x6F, 0x80 }, /// CW14  [4:4]    0, [7:7]     1
  195.    { CW( 12, 0), 0x1F, 0x80 }, /// CW12  [6:5]    0, /// CW12  [7:7]    1 
  196.    { CW( 12, 1), 0xDF, 0x00 }, /// CW12  [13:13]  0
  197.    { CW( 13, 0), 0x7F, 0x00 }, /// CW13  [7:7]    0
  198.    { CW( 23, 1), 0xE3, 0x00 }, /// CW23  [12:10]  0
  199. };
  200. #define CAL_DEMOD_I_COMMAND_COUNT 41
  201. const ctrl_word_operation code CalDemodIProcess[CAL_DEMOD_I_COMMAND_COUNT] = {
  202.    { CW(  1, 1), 0xDF, 0x00 }, /// CW1   [13:13]  0
  203.    { CW( 10, 0), 0xF7, 0x00 }, /// CW10  [3:3]    0
  204.    { CW(  8, 1), 0xF7, 0x00 }, /// CW8   [11:11]  0
  205.    { CW(  8, 1), 0xFE, 0x01 }, /// CW8   [8:8]    1
  206.    { CW(  9, 1), 0xFE, 0x01 }, /// CW9   [8:8]    1
  207.    { CW( 10, 0), 0xBF, 0x00 }, /// CW10  [6:6]    0
  208.    { CW( 10, 0), 0xBF, 0x40 }, /// CW10  [6:6]    1
  209. //#if defined   REF_CLK_32K //==============================================
  210.    { CW(  3, 0), 0x1C, 0x22 }, /// CW3   [7:5]    1, /// CW3   [1:0]    2
  211. /*#elif defined REF_CLK_13M
  212.    { CW(  3, 0), 0x1C, 0x42 }, /// CW3   [7:5]    2, /// CW3   [1:0]    2
  213. #elif defined REF_CLK_26M
  214.    { CW(  3, 0), 0x1C, 0xC2 }, /// CW3   [7:5]    6, /// CW3   [1:0]    2
  215. #endif *///=================================================================
  216.    { CW(  3, 1), 0xDF, 0x20 }, /// CW3   [13:13]  1
  217.    { CW( 12, 1), 0xFD, 0x00 }, /// CW12  [9:9]    0
  218.    { CW( 12, 0), 0xFE, 0x00 }, /// CW12  [0:0]    0
  219.    { CW(  6, 1), 0x00, 0x1A }, /// CW6   [15:8]   26
  220.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0
  221.    { CW( 98, 1), 0xE0, 0x00 }, /// CW98  [12:8]   0
  222.    { CW( 98, 0), 0xF0, 0x00 }, /// CW98  [3:0]    0
  223.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  224.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  225.    { CW(  6, 1), 0x00, 0xAA }, /// CW6   [15:8]   170
  226.    { CW( 25, 1), 0x00, 0x02 }, /// CW25  [15:8]   2+
  227. //#if defined   REF_CLK_32K //==============================================
  228.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  229. /*#elif defined REF_CLK_13M
  230.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  231. #elif defined REF_CLK_26M
  232.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  233. #endif *///=================================================================
  234.    { CW( 98, 1), 0x00, 0x00 }, /// CW98  [15:8]   0
  235.    { CW( 98, 0), 0x00, 0x00 }, /// CW98  [7:0]    0
  236. //#if defined   REF_CLK_32K //==============================================
  237.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  238. /*#elif defined REF_CLK_13M
  239.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  240. #elif defined REF_CLK_26M
  241.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  242. #endif *///=================================================================
  243.    { CW(  6, 1), 0x00, 0xAA }, /// CW6   [15:8]   170
  244.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  245.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  246.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  247. //#if defined   REF_CLK_32K //==============================================
  248.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  249. /*#elif defined REF_CLK_13M
  250.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  251. #elif defined REF_CLK_26M
  252.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  253. #endif *///=================================================================
  254.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  255.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  256.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0: reset CW1_0
  257.    { CW( 98, 0), 0x00, 0x00 }, /// CW98  [7:0]    0
  258. //#if defined   REF_CLK_32K //==============================================
  259.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  260. /*#elif defined REF_CLK_13M
  261.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  262. #elif defined REF_CLK_26M
  263.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  264. #endif *///=================================================================
  265.    { CW(  6, 1), 0x0F, 0xB0 }, /// CW6   [15:12]  11   
  266.    { CW(  7, 1), 0x00, 0x03 }, /// CW7   [15:8]   3
  267.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  268.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  269. //#if defined   REF_CLK_32K //==============================================
  270.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  271. /*#elif defined REF_CLK_13M
  272.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  273. #elif defined REF_CLK_26M
  274.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  275. #endif *///=================================================================
  276.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  277.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  278.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0: reset CW1_0
  279. };
  280. #define CAL_DEMOD_Q_COMMAND_COUNT 41
  281. const ctrl_word_operation code CalDemodQProcess[CAL_DEMOD_Q_COMMAND_COUNT] = {
  282.    { CW(  1, 1), 0xDF, 0x00 }, /// CW1   [13:13]  0
  283.    { CW( 10, 0), 0xF7, 0x00 }, /// CW10  [3:3]    0
  284.    { CW(  8, 1), 0xF7, 0x00 }, /// CW8   [11:11]  0
  285.    { CW(  8, 1), 0xFE, 0x01 }, /// CW8   [8:8]    1
  286.    { CW(  9, 1), 0xFE, 0x01 }, /// CW9   [8:8]    1
  287.    { CW( 10, 0), 0xBF, 0x00 }, /// CW10  [6:6]    0
  288.    { CW( 10, 0), 0xBF, 0x40 }, /// CW10  [6:6]    1
  289. //#if defined   REF_CLK_32K //==============================================
  290.    { CW(  3, 0), 0x1C, 0x22 }, /// CW3   [7:5]    1, /// CW3   [1:0]    2
  291. /*#elif defined REF_CLK_13M
  292.    { CW(  3, 0), 0x1C, 0x42 }, /// CW3   [7:5]    2, /// CW3   [1:0]    2
  293. #elif defined REF_CLK_26M
  294.    { CW(  3, 0), 0x1C, 0xC2 }, /// CW3   [7:5]    6, /// CW3   [1:0]    2
  295. #endif *///=================================================================
  296.    { CW(  3, 1), 0xDF, 0x20 }, /// CW3   [13:13]  1
  297.    { CW( 12, 1), 0xFD, 0x00 }, /// CW12  [9:9]    0
  298.    { CW( 12, 0), 0xFE, 0x00 }, /// CW12  [0:0]    0
  299.    { CW(  6, 1), 0x00, 0x1A }, /// CW6   [15:8]   28
  300.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0
  301.    { CW( 99, 1), 0xE0, 0x00 }, /// CW99  [12:8]   0
  302.    { CW( 99, 0), 0xF0, 0x00 }, /// CW99  [3:0]    0
  303.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  304.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  305.    { CW(  6, 1), 0x00, 0xCC }, /// CW6   [15:8]   204
  306.    { CW( 25, 1), 0x00, 0x02 }, /// CW25  [15:8]   2
  307. //#if defined   REF_CLK_32K //==============================================
  308.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  309. /*#elif defined REF_CLK_13M
  310.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  311. #elif defined REF_CLK_26M
  312.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  313. #endif *///=================================================================
  314.    { CW( 99, 1), 0x00, 0x00 }, /// CW99  [15:8]   0
  315.    { CW( 99, 0), 0x00, 0x00 }, /// CW99  [7:0]    0
  316. /*#if defined   REF_CLK_32K //==============================================
  317.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  318. #elif defined REF_CLK_13M
  319.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  320. #elif defined REF_CLK_26M
  321.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  322. #endif *///=================================================================
  323.    { CW(  6, 1), 0x00, 0xCC }, /// CW6   [15:8]   204
  324.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  325.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  326.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  327. //#if defined   REF_CLK_32K //==============================================
  328.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  329. /*#elif defined REF_CLK_13M
  330.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  331. #elif defined REF_CLK_26M
  332.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  333. #endif*/ //=================================================================
  334.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  335.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  336.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0: reset CW1_0
  337.    { CW( 99, 0), 0x00, 0x00 }, /// CW99  [7:0]    0
  338. //#if defined   REF_CLK_32K //==============================================
  339.    { CW( 25, 0), 0x00, 0x22 }, /// CW25  [7:0]    34
  340. /*#elif defined REF_CLK_13M
  341.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  342. #elif defined REF_CLK_26M
  343.    { CW( 25, 0), 0x00, 0x11 }, /// CW25  [7:0]    17
  344. #endif*/ //=================================================================
  345.    { CW(  6, 1), 0x0F, 0xD0 }, /// CW6   [15:12]  13   
  346.    { CW(  7, 1), 0x00, 0x03 }, /// CW7   [15:8]   3
  347.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  348.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  349. //#if defined   REF_CLK_32K //==============================================
  350.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  351. /*#elif defined REF_CLK_13M
  352.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  353. #elif defined REF_CLK_26M
  354.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  355. #endif *///=================================================================
  356.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  357.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  358.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0: reset CW1_0
  359. };
  360. #define CAL_PILOT_COMMAND_COUNT 37
  361. const ctrl_word_operation code CalPilotProcess[CAL_PILOT_COMMAND_COUNT] = {
  362.    { CW( 10, 1), 0xFB, 0x00 }, /// CW10  [10:10]  0
  363.    { CW( 10, 0), 0x6F, 0x80 }, /// CW10  [7:7]    1, [4:4]    0
  364.    { CW( 11, 1), 0xDF, 0x00 }, /// CW11  [13:13]  0
  365.    { CW( 11, 1), 0xDF, 0x20 }, /// CW11  [13:13]  1
  366.    { CW(  1, 1), 0xDF, 0x00 }, /// CW1   [13:13]  0
  367.    { CW( 10, 0), 0xF7, 0x00 }, /// CW10  [3:3]    0
  368.    { CW(  8, 1), 0xF7, 0x00 }, /// CW8   [11:11]  0
  369.    { CW(  8, 1), 0xFE, 0x01 }, /// CW8   [8:8]    1
  370.    { CW(  9, 1), 0xFE, 0x01 }, /// CW9   [8:8]    1
  371.    { CW( 10, 0), 0xBF, 0x00 }, /// CW10  [6:6]    0
  372.    { CW( 10, 0), 0xBF, 0x40 }, /// CW10  [6:6]    1
  373. //#ifdef   REF_CLK_32K //==============================================
  374.    { CW(  3, 0), 0x1C, 0x22 }, /// CW3   [7:5]    1, /// CW3   [1:0]    2
  375. /*#elif REF_CLK_13M
  376.    { CW(  3, 0), 0x1C, 0x42 }, /// CW3   [7:5]    2, /// CW3   [1:0]    2
  377. #elif  REF_CLK_26M
  378.    { CW(  3, 0), 0x1C, 0xC2 }, /// CW3   [7:5]    6, /// CW3   [1:0]    2
  379. #endif *///=================================================================
  380.    { CW(  3, 1), 0xDF, 0x20 }, /// CW3   [13:13]  1
  381.    { CW( 12, 1), 0xFD, 0x00 }, /// CW12  [9:9]    0
  382.    { CW( 12, 0), 0xFE, 0x00 }, /// CW12  [0:0]    0
  383.    { CW(  6, 1), 0x00, 0x1E }, /// CW6   [15:8]   30
  384.    { CW(  7, 1), 0xFC, 0x00 }, /// CW7   [9:8]    0
  385.    { CW( 97, 1), 0xE0, 0x00 }, /// CW97  [12:8]   0
  386.    { CW( 97, 0), 0xF0, 0x00 }, /// CW97  [3:0]    0
  387.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  388.    { CW(  6, 0), 0xFC, 0x01 }, /// CW6   [1:0]    1
  389.    { CW(  6, 1), 0x00, 0xEE }, /// CW6   [15:8]   238
  390.    { CW( 25, 1), 0x00, 0x03 }, /// CW25  [15:8]   3
  391. //#if defined   REF_CLK_32K //==============================================
  392.    { CW( 25, 0), 0x00, 0x7A }, /// CW25  [7:0]    122
  393. /*#elif defined REF_CLK_13M
  394.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  395. #elif defined REF_CLK_26M
  396.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  397. #endif *///=================================================================
  398.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  399. //#if defined   REF_CLK_32K //==============================================
  400.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  401. /*#elif defined REF_CLK_13M
  402.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  403. #elif defined REF_CLK_26M
  404.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  405. #endif *///=================================================================
  406.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  407.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  408.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0, reset CW1_0
  409. //#if defined   REF_CLK_32K //==============================================
  410.    { CW( 25, 0), 0x00, 0x7A }, /// CW25  [7:0]    122
  411. /*#elif defined REF_CLK_13M
  412.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  413. #elif defined REF_CLK_26M
  414.    { CW( 25, 0), 0x00, 0x5E }, /// CW25  [7:0]    94
  415. #endif *///=================================================================
  416.    { CW(  6, 1), 0x0F, 0xF0 }, /// CW6   [15:12]  15
  417.    { CW(  7, 1), 0xFC, 0x03 }, /// CW7   [9:8]    3
  418.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0
  419. //#if defined   REF_CLK_32K //==============================================
  420.    { CW(  5, 0), 0xEF, 0x10 }, /// CW5   [4:4]    1
  421. /*#elif defined REF_CLK_13M
  422.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  423. #elif defined REF_CLK_26M
  424.    { CW(  5, 0), 0xEF, 0x00 }, /// CW5   [4:4]    0
  425. #endif *///=================================================================
  426.    { CW(  6, 1), 0xFE, 0x01 }, /// CW6   [8:8]    1
  427.    { CW(127, 1), 0x00, 0x01 }, /// <----------------- polling SARIFG
  428.    { CW(  1, 0), 0x00, 0x00 }, /// CW1   [7:0]    0, reset CW1_0
  429. };
  430. /*--------------------------------------------------------------------------
  431. Desciption:
  432. Write 5 bytes to TEA5767HN chip ,no subaddress byte is needed
  433. Arguments:
  434. void
  435. Global arguments:
  436. xbFmWriteData[]: Data write to TEA5767 chip
  437. Returns:
  438. TRUE or FALSE
  439. --------------------------------------------------------------------------*/
  440. /* M5181 does not support sequential write. */
  441. BOOL M5181_WriteByte(BYTE CW, BYTE bData) large
  442. {
  443. BYTE bI, dataRead;
  444. BYTE i = 0;
  445.    if (CW == 255) 
  446.    {
  447.       do {
  448.          kal_sleep_task(I2C_WRITE_SPEED);
  449.          M5181_ReadByte(CW(1,0), &dataRead);
  450.          if (i++ == 50) //error terminate
  451.           return FALSE;
  452. //            ASSERT(0);
  453.       } while ((dataRead & bData)==0);
  454.       return TRUE;
  455.    }
  456. #if(USE_I2C)
  457. obCLKI2CMCTRL |= 0x80; //clock Enable //Renshuo050322#A
  458. obMODSEL2 |= 0x08; //I2CM Enable
  459. obI2CMAADDR = M5181_WRITE; // device ID
  460. obI2CSLADDR = CW; // control word
  461. obI2CFIFO = bData; // data to be written
  462. obI2CMACMD = (I2C_CMD_SINGLE | I2C_CMD_CURRENT | I2C_CMD_WRITE_MODE | I2C_CMD_DATA_LEN(1));
  463. bI = I2cWaitBusy();  
  464. obMODSEL2 &= 0xF7; //I2CM Disable
  465. obCLKI2CMCTRL &= 0x7F; //clock Disable
  466. #elif defined USE_3_WIRE
  467.    SerialCommTxByte(CW, bData);
  468. #else
  469. //#error "Must define USE_I2C or USE_3_WIRE"
  470. #endif
  471.    return bI;
  472. }
  473. /*--------------------------------------------------------------------------
  474. Desciption:
  475. Read 5 bytes from TEA5767HN chip ,no subaddress byte is needed
  476. Arguments:
  477. void
  478. Global arguments:
  479. void
  480. Returns:
  481. TRUE or FALSE
  482. --------------------------------------------------------------------------*/
  483. BOOL M5181_ReadByte(BYTE CW, BYTE *bData) large
  484. {
  485.    if (CW == 255) {
  486.       *bData = 0;
  487.       return TRUE;
  488.    }
  489. #if(USE_I2C)
  490. //Renshuo050322#A    
  491. obCLKI2CMCTRL |= 0x80; //clock Enable
  492. obMODSEL2 |= 0x08; //I2CM Enable
  493. obI2CMAADDR = M5181_WRITE;
  494. obI2CSLADDR = CW; // control word
  495.      obI2CMACMD = ( I2C_CMD_SINGLE | I2C_CMD_RANDOM | I2C_CMD_READ_MODE | I2C_CMD_DATA_LEN(1));
  496. if(I2cWaitBusy())
  497. {
  498. *bData=obI2CFIFO;
  499. obMODSEL2 &= 0xF7; //I2CM Disable
  500. obCLKI2CMCTRL &= 0x7F; //clock Disable
  501. //Renshuo050322#A    
  502. //   obCLKI2CMCTRL |= 0x80; //clock Enable
  503. // obMODSEL2 |= 0x08; //I2CM Enable
  504. return TRUE;
  505. }
  506. else
  507. {
  508. obMODSEL2 &= 0xF7; //I2CM Disable
  509. obCLKI2CMCTRL &= 0x7F; //clock Disable
  510. return FALSE;
  511. }
  512. #elif defined USE_3_WIRE
  513.    SerialCommRxByte(CW, bData);
  514. #else
  515. //#error "Must define USE_I2C or USE_3_WIRE"
  516. #endif
  517.  
  518. }
  519. void FMDrv_PowerOnReset(void) large
  520. {  
  521.    BYTE tmp_reg;
  522. //   int16 i;
  523.     BYTE i;
  524. /*   /// Rey: fix the Top 6227 noise affected by GPIO 54.
  525.    GPIO_WriteIO(0, 54);
  526.    
  527.    SerialCommInit();
  528.    SerialCommCryClkOn();*/
  529. //---------------------------------------------------------
  530. /*======================================
  531. //Setting the M5181 Power to pull low, then pull high
  532. ======================================*/
  533. /*
  534. PowerOffOn();
  535. //---------------------------------------------------------
  536. */
  537.    /// Power On
  538.    for (i=0; i<POWER_ON_COMMAND_COUNT; i++) {
  539.       M5181_WriteByte(PowerOnSetting[i].addr, PowerOnSetting[i].value);
  540.    }
  541.    for (i=0; i<POWER_ON_COMMAND_COUNT; i++) {
  542.       M5181_ReadByte(PowerOnSetting[i].addr, &tmp_reg);
  543.    }   
  544.    /// Calibrate PLL
  545.    for (i=0; i<CAL_PLL_COMMAND_COUNT; i++) {
  546.       M5181_ReadByte(CalPLLProcess[i].addr, &tmp_reg);
  547.       tmp_reg &= CalPLLProcess[i].and;
  548.       tmp_reg |= CalPLLProcess[i].or;
  549. M5181_WriteByte(CalPLLProcess[i].addr, tmp_reg);
  550. /*
  551.   WrTrFa=M5181_WriteByte(CalPLLProcess[i].addr, tmp_reg);  
  552. kk++;
  553. if(WrTrFa==FALSE)
  554. /// j = 1;
  555. while(1) j=j;
  556. */
  557.    }
  558.    /// Calibrate demod I
  559.    for (i=0; i<CAL_DEMOD_I_COMMAND_COUNT; i++) {
  560.       M5181_ReadByte(CalDemodIProcess[i].addr, &tmp_reg);
  561.       tmp_reg &= CalDemodIProcess[i].and;
  562.       tmp_reg |= CalDemodIProcess[i].or;
  563.       M5181_WriteByte(CalDemodIProcess[i].addr, tmp_reg);
  564.    }
  565.    /// Calibrate demod Q
  566.    for (i=0; i<CAL_DEMOD_Q_COMMAND_COUNT; i++) {
  567.       M5181_ReadByte(CalDemodQProcess[i].addr, &tmp_reg);
  568.       tmp_reg &= CalDemodQProcess[i].and;
  569.       tmp_reg |= CalDemodQProcess[i].or;
  570.       M5181_WriteByte(CalDemodQProcess[i].addr, tmp_reg);
  571.    }
  572.    
  573.    /// Calibrate Pilot
  574.    {
  575.       BYTE k;
  576.       for (i=0; i<CAL_PILOT_COMMAND_COUNT; i++) {
  577.          M5181_ReadByte(CalPilotProcess[i].addr, &tmp_reg);
  578.          tmp_reg &= CalPilotProcess[i].and;
  579.          tmp_reg |= CalPilotProcess[i].or;
  580.        M5181_WriteByte(CalPilotProcess[i].addr, tmp_reg);
  581.       }
  582.       M5181_ReadByte(CW( 97, 0), &tmp_reg);
  583.       if (tmp_reg < 14)
  584.          k = tmp_reg+1;
  585.       else
  586.          k = 15;
  587.       M5181_ReadByte(CW( 6, 1), &tmp_reg);
  588.       tmp_reg &= 0x0F;
  589.       tmp_reg |= 0x10;
  590.       M5181_WriteByte(CW( 6, 1), tmp_reg);
  591.       M5181_WriteByte(CW( 7, 1), 0);
  592.       M5181_WriteByte(CW( 97, 0), k);
  593.       M5181_ReadByte(CW( 3, 0), &tmp_reg);
  594.       tmp_reg &= 0x1F;
  595. //#if defined   REF_CLK_32K
  596.       tmp_reg |= 0x20;
  597. /*#elif defined REF_CLK_13M
  598.       tmp_reg |= 0x40;
  599. #elif defined REF_CLK_26M
  600.       tmp_reg |= 0xC0;
  601. #endif
  602. */
  603.       M5181_WriteByte(CW( 3, 0), tmp_reg);
  604. //TEST
  605.       M5181_ReadByte(CW( 3, 0), &tmp_reg);
  606. //------------------------------------
  607.       M5181_ReadByte(CW( 3, 1), &tmp_reg);
  608.       tmp_reg &= 0xFB;
  609.       M5181_WriteByte(CW( 3, 1), tmp_reg);
  610.    }
  611.    M5181_ReadByte(CW(8, 1), &tmp_reg);
  612.    tmp_reg &= 0xFE;
  613.    M5181_WriteByte(CW(8, 1), tmp_reg);
  614.    M5181_ReadByte(CW(9, 1), &tmp_reg);
  615.    tmp_reg &= 0xFE;
  616.    M5181_WriteByte(CW(9, 1), tmp_reg);
  617. /*
  618.    M5181_ReadByte(CW( 18, 1), &tmp_reg);
  619.    tmp_reg |= 0x10;
  620.    M5181_WriteByte(CW(18, 1), tmp_reg);   /// CW14  [10:10]  0
  621. */
  622.   //FMDrv_SetVolumeLevel(0xFF);
  623.    /// Calibrate VCO
  624. //   ASSERT(M5181_SetFreq(97500, HI_INJECTION));
  625. //M5181_SetFreq(97500, FM_HI_INJEC);
  626. // SettingFM();
  627.    kal_sleep_task(FM_POWERON_DELAY);
  628.  }
  629. #if 0 //Chris change from #if(0) ->#if 0 for Source Insight view
  630. void ReadRssiIFCnt(void) large
  631. {
  632. //   BYTE tmp_reg;
  633.    OledShowNumber(M5181_GetCurRSSI(), 3, 1, 4);
  634. OledShowNumber(M5181_GetCurIFCnt(IF_MEASURE_COUNT_EXP), 3, 96, 4);
  635. // M5181_ReadByte(CW(16, 0), &tmp_reg);
  636. // M5181_WriteByte(CW(16, 0), tmp_reg+1);
  637. //   OledShowNumber(tmp_reg, 3, 1, 4);
  638. // M5181_ReadByte(CW(16, 1), &tmp_reg);
  639. // M5181_WriteByte(CW(16, 1), tmp_reg+1);
  640. //   OledShowNumber(tmp_reg, 3, 96, 4);
  641. // M5181_ReadByte(CW(18, 1), &tmp_reg);
  642. //  OledShowNumber(tmp_reg, 3, 96, 4);
  643. }
  644. #endif //(_C_MODE_)
  645. #endif