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

📄 hdevice.c

📁 ct952 source code use for Digital Frame Photo
💻 C
字号:
#include "winav.h"#include "ctkav.h"#include "ctkav_mcu.h"#include "hio.h"#include "hdevice.h"#include "spflash.h"#include "disp.h"    // because of DISP_TVMODE define#include "romld.h"typedef enum tagSET_REG_ID {    SET_TVE_GAIN_YC,    SET_TVE_GAIN_CAV,} SET_REG_ID;BOOL    _blDisableSVideo = FALSE;// LLY2.77, porting Chuan's code to keep if force disable TV output offBYTE    _bForce_TVOut_Off = FALSE;DWORD   __dwREG_TVE_MV0 = 0x00000000; //kevin1.02, set MV0[4] within V-SYNC; otherwise, TVE output is abnormal (CT909S IC will fix it)DWORD   __dwOffset ;void    _ProgramACLK(BYTE bSampleFreq);void    _ProgTVEGain(SET_REG_ID bSetID, DWORD dwRegValue, int nGainOffset);// LLY2.55, declare the table for different solution's GAIN_YC & GAIN_CAV value.// Notice: the layout must be same as following.// Interlace mode// { {NTSC-SVideo, NTSC-YUV, NTSC-RGB},//   {PAL-SVideo,  PAL-YUV,  PAL-RGB },//   {PALM-SVideo, PALM-YUV, PALM-RGB},//   {PALN-SVideo, PALN-YUV, PALN-RGB} }// P-Scan mode// { {NTSC-SVideo, NTSC-YUV, NTSC-RGB, NTSC-VGA},//   {PAL-SVideo,  PAL-YUV,  PAL-RGB , PAL-VGA },//   {PALM-SVideo, PALM-YUV, PALM-RGB, PALM-VGA},//   {PALN-SVideo, PALN-YUV, PALN-RGB, PALM-VGA} }//  *******************************************************************************//  Function    :   HAL_InitSerialFlash//  Description :   Initialize serial flash to find the desired bank location.//  Arguments   :   None//  Return      :   None//*********************************************************************************void    HAL_InitSerialFlash(void){    BYTE    *pbTmp;    PSECTION_ENTRY ENTRY;    // LLY2.17, remove it since it's only to slow speed for parallel flash    //REG_PLAT_PROMCFG = 0x24D08;//    SPF_ReadID(4);    SPF_INFO *pSPF_INFO1;    pSPF_INFO1 = (SPF_INFO*)(*((DWORD*)8)); //wingwu 7/28 for support no ID check    SPF_INFO1 = *pSPF_INFO1;    ENTRY= ROMLD_GetSectionByName (0,"SETD");    dwROM_RANGE_START  =  ENTRY->dwRMA;    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "SETD[%lx]",dwROM_RANGE_START);    switch  (SPF_INFO1.bBoot)    {        case BOOT_ALL: //address is 4k *n             if(dwROM_RANGE_START%0x1000)             {                 dwROM_RANGE_START = NOT_SUPPORT_FLASH ;             }            break;        case BOOT_NO: //not  support            dwROM_RANGE_START = NOT_SUPPORT_FLASH ;            break;        case BOOT_BOTTOM :             if(dwROM_RANGE_START != 0x01000)             {                dwROM_RANGE_START = NOT_SUPPORT_FLASH ;             }            break;        case BOOT_TOP:            switch  (SPF_INFO1.bSize)            {                case FLASH_SIZE_8M : //8M FLASH                    if(dwROM_RANGE_START  != 0x0FF000 )                    {                       dwROM_RANGE_START = NOT_SUPPORT_FLASH ;                    }                   break;                case FLASH_SIZE_4M : // 4M FLASH                    if( dwROM_RANGE_START != 0x07F000 )                    {                       dwROM_RANGE_START = NOT_SUPPORT_FLASH ;                    }                   break;                default :                      dwROM_RANGE_START = NOT_SUPPORT_FLASH ;                    break;            }            break;        default :            dwROM_RANGE_START = NOT_SUPPORT_FLASH ;            break;    }    if(ENTRY->dwLSize == 0x1000)    {//do check    4K size        __dwOffset = dwROM_RANGE_START;        dwROM_RANGE_START = dwROM_RANGE_START;        dwROM_RANGE_MID = dwROM_RANGE_START+0x1000;        dwROM_RANGE_END =dwROM_RANGE_START+0x1000;    }    else if(ENTRY->dwLSize == 0x2000)    {//do check    8K size        __dwOffset = dwROM_RANGE_START;        dwROM_RANGE_START = dwROM_RANGE_START;        dwROM_RANGE_MID = dwROM_RANGE_START+0x1000;        dwROM_RANGE_END =dwROM_RANGE_MID+0x1000;    }    else    {        dwROM_RANGE_START = NOT_SUPPORT_FLASH;         __dwOffset = dwROM_RANGE_START;        dwROM_RANGE_START = dwROM_RANGE_START;        dwROM_RANGE_MID = dwROM_RANGE_START+0x1000;        dwROM_RANGE_END =dwROM_RANGE_MID+0x1000;    }    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Flash ad[%lx,%lx,%lx]",dwROM_RANGE_START,dwROM_RANGE_MID,dwROM_RANGE_END);    pbTmp  =  (BYTE *)__dwOffset;    for(;pbTmp<(BYTE *) dwROM_RANGE_END ;pbTmp+=ROM_BANK_SIZE)    {        if(pbTmp[0] != 0xff)        {            for(pbTmp += ROM_BANK_SIZE            		;pbTmp< (BYTE *)dwROM_RANGE_END            				;pbTmp += ROM_BANK_SIZE)            {                if(pbTmp[0] == 0xff)                {                    // LLY2.53, porting Wing's code to support > 256 bytes setup info.                    //__dwOffset= pbTmp - (BYTE*)ROM_BANK_SIZE;                    __dwOffset=(DWORD) pbTmp - (DWORD) ROM_BANK_SIZE;                    //DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "last data<%lx> \n",__dwOffset);                    // LLY2.35, porting Wing's code to fix data can't find in SPI sometime.                    //pbTmp = (BYTE *) dwROM_RANGE_END ; //end find                    //break;                    return;                }            }        }    }    // LLY2.35, porting Wing's code to fix data can't find in SPI sometime.    __dwOffset= dwROM_RANGE_END - ROM_BANK_SIZE;    //DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "last data<%lx> \n",__dwOffset);    return;}// LLY2.51, porting Wing's code to add a API to write data to SPI Flash//  *********************************************************************//  Function    :   HAL_WriteSPF//  Description :   Write data to serial flash//  Arguments   :   dwAddr: desired serial flash adress//                  pbValue: ptr to the to be written value//                  dwCnt: # of bytes, can't exceed 64K bytes//  Return      :   TRUE : write OK//              :   FALSE : wrute faile//  Notice      :   dwAddr must be 64K byte align.//*********************************************************************BYTE HAL_WriteSPF(DWORD dwAddr, BYTE* pbVal, DWORD dwCnt){    BYTE bBuff;//    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF,//        "Addr: %lx, pbVal: %lx, dwCnt: %lx\n", dwAddr, pbVal, dwCnt);    // check dwAddr if 64K bytes align    if((dwAddr%0x10000) !=0)    {        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Err: WriteSPF fail since desired address not 64K align\n");         return FALSE;    }    // check if desired count > 64K bytes    if(dwCnt > 0x10000)    {        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Err: WriteSPF fail since desired size exceed 64K byte\n");        return FALSE;    }    // Must turn on TFT mode and delay two vsync before SPI Flash action    // Since, SPI Flash Erase/ Write action will disable all interrupt    //DISP_DisplayCtrl(DISP_TFT_MODE, TRUE);    //DISP_DelayVSYNC(2);    if(SPF_INFO1.bBoot == BOOT_ALL)    {        for( bBuff =0 ;bBuff < 16 ;bBuff++)        {            SPF_EraseSector(dwAddr+0x1000*bBuff);        }    }    else    {        SPF_EraseSector(dwAddr);    }//    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF,//        "%lx, %lx, %lx, %lx\n", pbVal[0], pbVal[1], pbVal[2], pbVal[3]);    //糶

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -