mtv23x_new_high_speed.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. /******************************************************************************
  2. * (c) COPYRIGHT 2013 RAONTECH, Inc. ALL RIGHTS RESERVED.
  3. *
  4. * TITLE : MTV23x services source file.
  5. *
  6. * FILENAME : mtv23x_new_high_speed.c
  7. *
  8. * DESCRIPTION :
  9. * Library of routines to initialize, and operate on the RAONTECH T-DMB demod.
  10. *
  11. ******************************************************************************/
  12. /******************************************************************************
  13. * REVISION HISTORY
  14. *
  15. * DATE NAME REMARKS
  16. * ---------- ------------- ------------------------------------------------
  17. * 03/03/2013 Yang, Maverick Created.
  18. ******************************************************************************/
  19. #include "mtv23x_rf.h"
  20. #include "mtv23x_internal.h"
  21. U8 g_bRtvIntrMaskReg;
  22. U8 g_bRtvPage;
  23. UINT g_nRtvThresholdSize;
  24. /* #define INTERFACE_TEST */
  25. /* #define CHECK_REV_NUM */
  26. INT rtv_InitSystem(void)
  27. {
  28. int i;
  29. U8 read0, read1;
  30. U8 rev_num;
  31. U8 ALDO_OUT = 0, DLDO_OUT = 0;
  32. #ifdef RTV_DUAL_DIVERISTY_ENABLE
  33. U8 S_ALDO_OUT = 0, S_DLDO_OUT = 0;
  34. #endif
  35. g_bRtvIntrMaskReg = 0x3F;
  36. #if defined(RTV_IF_SPI) || defined(RTV_IF_SPI_TSIFx) || defined(RTV_IF_EBI2)
  37. #define WR27_VAL (0x50|SPI_INTR_POL_ACTIVE)
  38. #define WR29_VAL 0x10
  39. for (i = 0; i < 100; i++) {
  40. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  41. RTV_REG_SET(0x29, WR29_VAL); /* BUFSEL first! */
  42. RTV_REG_SET(0x27, WR27_VAL);
  43. read0 = RTV_REG_GET(0x27);
  44. read1 = RTV_REG_GET(0x29);
  45. #if defined(RTV_SPI_HIGH_SPEED_ENABLE)
  46. RTV_REG_MAP_SEL(RF_PAGE);
  47. #if (RTV_SRC_CLK_FREQ_KHz == 19200)
  48. RTV_REG_SET(0xB6, 0x04);
  49. RTV_REG_SET(0xB6, 0x24); /* DIV8 */
  50. #else
  51. RTV_REG_SET(0xB6, 0x05);
  52. RTV_REG_SET(0xB6, 0x25); /* DIV8 */
  53. #endif
  54. #endif
  55. RTV_REG_MAP_SEL(TOP_PAGE);
  56. RTV_REG_SET(0x0C, 0xC3);
  57. RTV_DBGMSG2("read0(0x%02X), read1(0x%02X)\n", read0, read1);
  58. if ((read0 == WR27_VAL) && (read1 == WR29_VAL)) {
  59. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  60. RTV_REG_SET(0x21, 0x87);
  61. RTV_REG_SET(0x22, 0x00);
  62. goto RTV_POWER_ON_SUCCESS;
  63. }
  64. RTV_DBGMSG1("[rtv_InitSystem] Power On wait: %d\n", i);
  65. RTV_DELAY_MS(5);
  66. }
  67. #else
  68. RTV_REG_MAP_SEL(TOP_PAGE);
  69. RTV_REG_SET(0x0C, 0xC3);
  70. for (i = 0; i < 100; i++) {
  71. read0 = RTV_REG_GET(0x00);
  72. read1 = RTV_REG_GET(0x01);
  73. RTV_DBGMSG2("read0(0x%02X), read1(0x%02X)\n", read0, read1);
  74. if ((read0 == 0xC6))
  75. goto RTV_POWER_ON_SUCCESS;
  76. RTV_DBGMSG1("[rtv_InitSystem] Power On wait: %d\n", i);
  77. RTV_DELAY_MS(5);
  78. }
  79. #endif
  80. RTV_DBGMSG1("rtv_InitSystem: Power On Check error: %d\n", i);
  81. return RTV_POWER_ON_CHECK_ERROR;
  82. RTV_POWER_ON_SUCCESS:
  83. #if 1
  84. RTV_REG_MAP_SEL(RF_PAGE);
  85. rev_num = (RTV_REG_GET(0x10) & 0xF0) >> 4 ;
  86. #ifdef CHECK_REV_NUM
  87. RTV_DBGMSG1("[rtv_InitSystem] REV number (%d)\n", rev_num);
  88. #endif
  89. if (rev_num >= 0x04) {
  90. RTV_REG_MASK_SET(0x3B, 0x01, 0x01);
  91. RTV_REG_MASK_SET(0x32, 0x01, 0x01);
  92. }
  93. #endif
  94. #ifdef INTERFACE_TEST
  95. #if defined(RTV_IF_SPI) || defined(RTV_IF_SPI_TSIFx) || defined(RTV_IF_EBI2)
  96. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  97. for (i = 0; i < 100; i++) {
  98. RTV_REG_SET(0x22, 0x55);
  99. read0 = RTV_REG_GET(0x22);
  100. RTV_REG_SET(0x22, 0xAA);
  101. read1 = RTV_REG_GET(0x22);
  102. RTV_DBGMSG2("Before Power Setup :readSPI22_55(0x%02X), readSPI22_AA(0x%02X)\n",
  103. read0, read1);
  104. }
  105. RTV_REG_MAP_SEL(RF_PAGE);
  106. for (i = 0; i < 100; i++) {
  107. RTV_REG_SET(0x20, 0x55);
  108. read0 = RTV_REG_GET(0x20);
  109. RTV_REG_SET(0x20, 0xAA);
  110. read1 = RTV_REG_GET(0x20);
  111. RTV_DBGMSG2("Before Power Setup :readRF20_55(0x%02X), readRF20_AA(0x%02X)\n",
  112. read0, read1);
  113. }
  114. #else
  115. RTV_REG_MAP_SEL(RF_PAGE);
  116. for (i = 0; i < 100; i++) {
  117. RTV_REG_SET(0x20, 0x55);
  118. read0 = RTV_REG_GET(0x20);
  119. RTV_REG_SET(0x20, 0xAA);
  120. read1 = RTV_REG_GET(0x20);
  121. RTV_DBGMSG2("Before Power Setup :readRF20_55(0x%02X), readRF20_AA(0x%02X)\n",
  122. read0, read1);
  123. }
  124. #endif
  125. #endif /* INTERFACE_TEST */
  126. ALDO_OUT = 6;
  127. DLDO_OUT = 1;
  128. #ifdef RTV_DUAL_DIVERISTY_ENABLE
  129. S_ALDO_OUT = 6;
  130. S_DLDO_OUT = 1;
  131. #endif
  132. RTV_REG_MAP_SEL(RF_PAGE);
  133. #ifdef RTV_DUAL_DIVERISTY_ENABLE
  134. if (rtvMTV23x_Get_Diversity_Current_path() == DIVERSITY_MASTER) {
  135. #endif
  136. RTV_REG_MASK_SET(0xC8, 0x80, ((ALDO_OUT & 0x04) << 5));
  137. RTV_REG_MASK_SET(0xD1, 0x80, ((ALDO_OUT & 0x02) << 6));
  138. RTV_REG_MASK_SET(0xD2, 0x80, ((ALDO_OUT & 0x01) << 7));
  139. RTV_REG_MASK_SET(0xD3, 0x80, ((DLDO_OUT & 0x04) << 5));
  140. RTV_REG_MASK_SET(0xD5, 0x80, ((DLDO_OUT & 0x02) << 6));
  141. RTV_REG_MASK_SET(0xD6, 0x80, ((DLDO_OUT & 0x01) << 7));
  142. #ifdef RTV_DUAL_DIVERISTY_ENABLE
  143. } else {
  144. RTV_REG_MASK_SET(0xC8, 0x80, ((S_ALDO_OUT & 0x04) << 5));
  145. RTV_REG_MASK_SET(0xD1, 0x80, ((S_ALDO_OUT & 0x02) << 6));
  146. RTV_REG_MASK_SET(0xD2, 0x80, ((S_ALDO_OUT & 0x01) << 7));
  147. RTV_REG_MASK_SET(0xD3, 0x80, ((S_DLDO_OUT & 0x04) << 5));
  148. RTV_REG_MASK_SET(0xD5, 0x80, ((S_DLDO_OUT & 0x02) << 6));
  149. RTV_REG_MASK_SET(0xD6, 0x80, ((S_DLDO_OUT & 0x01) << 7));
  150. }
  151. #endif
  152. RTV_DELAY_MS(10);
  153. RTV_REG_MASK_SET(0xC9, 0x80, 0x80);
  154. #if defined(RTV_EXT_POWER_MODE)
  155. RTV_REG_SET(0xCD, 0xCF);
  156. #ifdef RTV_DUAL_DIVERISTY_ENABLE
  157. RTV_REG_SET(0xCE, 0x35);
  158. #else
  159. RTV_REG_SET(0xCE, 0xB5);
  160. #endif
  161. #else /* Internal LDO Mode */
  162. RTV_REG_SET(0xCD, 0x4F);
  163. RTV_REG_SET(0xCE, 0x35);
  164. #endif
  165. #ifdef INTERFACE_TEST
  166. #if defined(RTV_IF_SPI) || defined(RTV_IF_SPI_TSIFx) || defined(RTV_IF_EBI2)
  167. RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
  168. for (i = 0; i < 100; i++) {
  169. RTV_REG_SET(0x22, 0x55);
  170. read0 = RTV_REG_GET(0x22);
  171. RTV_REG_SET(0x22, 0xAA);
  172. read1 = RTV_REG_GET(0x22);
  173. RTV_DBGMSG2("After Power Setup :readSPI22_55(0x%02X), readSPI22_AA(0x%02X)\n",
  174. read0, read1);
  175. }
  176. RTV_REG_MAP_SEL(RF_PAGE);
  177. for (i = 0; i < 100; i++) {
  178. RTV_REG_SET(0x20, 0x55);
  179. read0 = RTV_REG_GET(0x20);
  180. RTV_REG_SET(0x20, 0xAA);
  181. read1 = RTV_REG_GET(0x20);
  182. RTV_DBGMSG2("After Power Setup :readRF20_55(0x%02X), readRF20_AA(0x%02X)\n",
  183. read0, read1);
  184. }
  185. #else
  186. RTV_REG_MAP_SEL(RF_PAGE);
  187. for (i = 0; i < 100; i++) {
  188. RTV_REG_SET(0x20, 0x55);
  189. read0 = RTV_REG_GET(0x20);
  190. RTV_REG_SET(0x20, 0xAA);
  191. read1 = RTV_REG_GET(0x20);
  192. RTV_DBGMSG2("After Power Setup :readRF20_55(0x%02X), readRF20_AA(0x%02X)\n",
  193. read0, read1);
  194. }
  195. #endif
  196. #endif /* INTERFACE_TEST */
  197. return RTV_SUCCESS;
  198. }