io_sdram.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:8k
源码类别:

DVD

开发平台:

Others

  1. #include "config.h"
  2. #include "Includesysdefs.h"
  3. #include "Decoderlow_levelDEC_LL_Api.h"
  4. #include "PlaycoreCoremainCoreGDef.h"
  5. #include "cpucpu_api.h"
  6. #include "DecoderDEC_Set_DVP_Gen_Regs.h"
  7. #include "PlaycoreCaptureLogompeg_encenc.h"
  8. #ifdef SUPPORT_CAPTURE_LOGO
  9. #define MEM_ADDR(x) (UINT32)(x<<9)
  10. #define field_size() (UINT32)FB_FIELD_SIZE_DVD
  11. #define ref1_ytop_addr() MEM_ADDR((LONG)(OSD_BUFFER_SIZE_DVD + VCB_SIZE_DVD + ACB_SIZE_DVD + SPB_SIZE_DVD + APP_BUFFER_SIZE_DVD + NAV_BUFFER_SIZE_DVD))
  12. #define ref1_ybot_addr() (ref1_ytop_addr()+field_size()*512)
  13. #define ref1_ctop_addr() (ref1_ybot_addr()+field_size()*512)
  14. #define ref1_cbot_addr() (ref1_ctop_addr()+(field_size()+1)/2*512)
  15. #define ref2_ytop_addr() MEM_ADDR((LONG)(OSD_BUFFER_SIZE_DVD + VCB_SIZE_DVD + ACB_SIZE_DVD + SPB_SIZE_DVD + APP_BUFFER_SIZE_DVD + NAV_BUFFER_SIZE_DVD + R1FB_SIZE_DVD))
  16. #define ref2_ybot_addr() (ref2_ytop_addr()+field_size()*512)
  17. #define ref2_ctop_addr() (ref2_ybot_addr()+field_size()*512)
  18. #define ref2_cbot_addr() (ref2_ctop_addr()+(field_size()+1)/2*512)
  19. #define b_ytop_addr(x) (x? ref2_cbot_addr():(ref2_cbot_addr()+(field_size()+1)/2*512))
  20. #define b_ybot_addr() (b_ytop_addr(0)+field_size()*512)
  21. #define b_ctop_addr(x) (x? (b_ytop_addr(x)+field_size()*512):(b_ybot_addr()+field_size()*512))
  22. #define b_cbot_addr() (b_ctop_addr(0)+(field_size()+1)/2*512)
  23. static BYTE bIsFlashSpaceWriteable = FALSE;
  24. BOOL write_2_sdram( unsigned short x);  
  25. typedef enum
  26. {
  27. REF1_BUFFER = 1,
  28. REF2_BUFFER = 2,
  29. B_BUFFER = 3
  30. }BUFFER_TYPE;
  31. /**********************************************************************************
  32.  Purpose          : read from Y buffer in SDRAM
  33.  Input Parameters : buff - buffer to fill with read data
  34. offset - offset from start addr of the Y buffer ( top or bot ) in SDRAM
  35. num_of_pix - number of pixels to read
  36.  Return Value     :
  37.  Comment:   :
  38. **********************************************************************************/
  39. void read_Y_data( UINT16 *buff , unsigned long offset, int num_of_pixs )
  40. {
  41. UINT32 addr;
  42. offset = offset /2;
  43.     num_of_pixs = num_of_pixs/2;
  44. if( pLogoCapture->TopFld )
  45. {
  46. switch( pLogoCapture->CurrDispBuff )
  47. {
  48. case REF1_BUFFER:
  49. addr = (UINT32)ref1_ytop_addr() + (UINT32)offset;
  50. break;
  51. case REF2_BUFFER:
  52. addr = (UINT32)ref2_ytop_addr() + (UINT32)offset;
  53. break;
  54. case B_BUFFER:
  55. addr = (UINT32)b_ytop_addr(pLogoCapture->bSingleField) + (UINT32)offset;
  56. }
  57. }
  58. else
  59. {
  60. switch( pLogoCapture->CurrDispBuff )
  61. {
  62. case REF1_BUFFER:
  63. addr = (UINT32)ref1_ybot_addr() + (UINT32)offset;
  64. break;
  65. case REF2_BUFFER:
  66. addr = (UINT32)ref2_ybot_addr() + (UINT32)offset;
  67. break;
  68. case B_BUFFER:
  69. addr = (UINT32)b_ybot_addr() + (UINT32)offset;
  70. break;
  71. }
  72. }
  73. wai_sem(SEM_DRAM_ID);
  74. I49_ReadDRAMData( addr, buff, num_of_pixs );
  75. sig_sem(SEM_DRAM_ID);
  76. #ifdef _DEBUG
  77. if(0 == offset)
  78. tr_printf(("Y addr: %lx, CurrDispBuff:%xn", addr, pLogoCapture->CurrDispBuff));
  79. #endif
  80. }
  81. /**********************************************************************************
  82.  Purpose          : read from C buffer in SDRAM
  83.  Input Parameters : buff - buffer to fill with read data
  84. offset - offset from start addr of the C buffer ( top or bot ) in SDRAM
  85. num_of_pix - number of pixels to read
  86.  Return Value     :
  87.  Comment:   :
  88. **********************************************************************************/
  89. void read_C_data( UINT16 *buff , unsigned long offset, int num_of_pixs )
  90. {
  91. UINT32 addr;
  92. offset = offset/2;
  93. num_of_pixs = num_of_pixs/2;
  94. if( pLogoCapture->TopFld )
  95. {
  96. switch( pLogoCapture->CurrDispBuff )
  97. {
  98. case REF1_BUFFER:
  99. addr = ref1_ctop_addr() + offset;
  100. break;
  101. case REF2_BUFFER:
  102. addr = ref2_ctop_addr() + offset;
  103. break;
  104. case B_BUFFER:
  105. addr = b_ctop_addr(pLogoCapture->bSingleField) + offset;
  106. }
  107.     }
  108. else
  109. {
  110.    switch( pLogoCapture->CurrDispBuff )
  111.    {
  112. case REF1_BUFFER:
  113. addr = ref1_cbot_addr() + offset;
  114. break;
  115. case REF2_BUFFER:
  116. addr = ref2_cbot_addr() + offset;
  117. break;
  118. case B_BUFFER:
  119. addr = b_cbot_addr() + offset;
  120. }
  121. }
  122. wai_sem(SEM_DRAM_ID);
  123. I49_ReadDRAMData( addr, buff, num_of_pixs );
  124. sig_sem(SEM_DRAM_ID);
  125. #ifdef _DEBUG
  126. if(0 == offset)
  127. tr_printf(("C addr: %lx, CurrDispBuff:%xn", addr, pLogoCapture->CurrDispBuff));
  128. #endif
  129. }
  130. /**********************************************************************************
  131.  Purpose          :  initializations for capture logo IO
  132.  Input Parameters :  none
  133.  Return Value     :
  134.  Comment:   :
  135. **********************************************************************************/
  136. void init_io(void)
  137. {
  138. int i;
  139. int status;
  140. //ui_tmp_string("wait");
  141. if ( !CheckAddressWritable((unsigned short far *) MK_FP(LOGO_SEG , 0x0000)))
  142. {
  143. {
  144. unsigned short far* sectorAddr = MK_FP( LOGO_SEG , 0  ); 
  145. Erase_One_Sector(sectorAddr);
  146. }
  147. for( i=1 ; i<LOGO_SIZE_IN_BLOCKS; i++) 
  148. {
  149. unsigned short far* sectorAddr = MK_FP( SEG_LOGO_BLOCK2 + (i - 1)*SIZE_LOGO_BLOCK2, 0); 
  150. Erase_One_Sector(sectorAddr);
  151. }
  152. bIsFlashSpaceWriteable = FALSE;
  153. }else
  154. bIsFlashSpaceWriteable = TRUE;
  155.       
  156. if(IS_CLIPS_TYPE_JPG)//LeonH_0829_2003_a
  157. {
  158. pLogoCapture->CurrDispBuff = REF2_BUFFER;  // on jpeg always displayed ref2
  159. }
  160. else
  161. {
  162. // I49_SetPar_bits( DVP_GEN2_ADDR, DVPGEN2_PSO_ON_MASK, DVPGEN2_PSO_ON_MASK );
  163. DEC_Set_DVP_Gen_For_PSO_OnOff(TRUE);
  164. status = I49_ReadStatus(I64_STATUS_2) & 0x300;
  165. switch( status )
  166. {
  167. case 0x100:
  168. pLogoCapture->CurrDispBuff = REF1_BUFFER;
  169. break;
  170. case 0x200:
  171. pLogoCapture->CurrDispBuff = REF2_BUFFER;
  172. break;
  173. default:
  174. pLogoCapture->CurrDispBuff = B_BUFFER;
  175. }
  176. //printf("buff = %xn", status );
  177. }
  178. #ifdef _DEBUG
  179. tr_printf(("I49_STATUS_2:%xn", status));
  180. #endif
  181. if(576 == pLogoCapture->Vsize && B_BUFFER == pLogoCapture->CurrDispBuff) // Jerry CAI, a temp fix as SDRAM config for pal DVD is unknown. 
  182. pLogoCapture->CurrDispBuff = REF1_BUFFER;
  183. pLogoCapture->FlashADDR = LOGO_ADDR;
  184. gps->captureLogoKWords =-1;
  185. }
  186. /**********************************************************************************
  187.  Purpose          :
  188.  Input Parameters :
  189.  Output Parameters:
  190.  Return Value     :
  191.  Comment:   :
  192. **********************************************************************************/
  193. void io_end()
  194. {
  195. if( !IS_CLIPS_TYPE_JPG)//LeonH_0829_2003_a
  196. {
  197. if( gps->prog_inter_select )   // set back force progressiv bit to DVP
  198. // I49_SetPar_bits( DVP_GEN2_ADDR, DVPGEN2_PSO_ON_MASK, DVPGEN2_PSO_ON_MASK );
  199. DEC_Set_DVP_Gen_For_PSO_OnOff(TRUE);
  200. else
  201. // I49_SetPar_bits( DVP_GEN2_ADDR, 0, DVPGEN2_PSO_ON_MASK );
  202. DEC_Set_DVP_Gen_For_PSO_OnOff(FALSE);
  203. }
  204. }
  205. /**********************************************************************************
  206.  Purpose          :  output bitstream to flash
  207.  Input Parameters :
  208.  Output Parameters:
  209.  Return Value     :
  210.  Comment:   :
  211. **********************************************************************************/
  212. void output(unsigned short x)
  213. {
  214. if(pLogoCapture->sectors_cnt < LOGO_SIZE_IN_DVD_SECTORS)
  215. {
  216. if ( bIsFlashSpaceWriteable )
  217. write_2_sdram( x);
  218. else
  219. write_2_flash( x);
  220. }
  221. }
  222. /**********************************************************************************
  223.  Purpose          :
  224.  Input Parameters :
  225.  Output Parameters:
  226.  Return Value     :
  227.  Comment:   :
  228. **********************************************************************************/
  229. #ifdef _DEBUG
  230. #define WRITE_2_SRAM
  231. #endif
  232. BOOL write_2_sdram( unsigned short x)
  233. {
  234.    
  235.    static int first_time = 1;
  236.    
  237.    *(pLogoCapture->FlashADDR) = (x<<8)|(x>>8);
  238.    pLogoCapture->FlashADDR ++;
  239.    return 1;
  240. }
  241. /**********************************************************************************
  242.  Purpose          :
  243.  Input Parameters :
  244.  Output Parameters:
  245.  Return Value     :
  246.  Comment:   :
  247. **********************************************************************************/
  248. int write_2_flash( unsigned short x )
  249. {
  250.    int ret;
  251.    x = (x<<8)|(x>>8);
  252.    ret = Nor_Write(pLogoCapture->FlashADDR,
  253.                                        (unsigned char far *)&x, 2);
  254.    pLogoCapture->FlashADDR ++;
  255.    //if( ret != 1 )
  256.    // ui_tmp_string("Fail");
  257.    return ret;
  258. }
  259. #endif