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

📄 dsploader.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :
Desc :
*/
#include "DSPLoader.h"

#define DMEM_ADDR_AHB0          0x30000000

void DspWriteSec(DSPSec* Sec, char* buf)
{
    UINT32 BaseAddr = IMEM_ADDR_AHB0;
    unsigned long len = Sec->Len;

    if ('D' == Sec->SecName[0])
        BaseAddr = DMEM_ADDR_AHB0;

    // 保证memcpy 的长度4 byte 对齐
    if (len % 4 != 0)
    {
        len += 2;
    }

    RKmemcpy((char *)(BaseAddr + (Sec->Start*2)), buf, len);
    /**/
}
void GetNextSec(MY_FILE* hFw, DSPSec* Sec)
{
    char* buf;
    //RKFSFileSeek(hFw,Sec->Len,SEEK_CUR);
    RKFSFileRead(Sec, sizeof(DSPSec), hFw);
    buf = (char*)RKmalloc(Sec->Len);
    if (Sec->Len == RKFSFileRead(buf, Sec->Len, hFw))
        DspWriteSec(Sec, buf);
    RKfree(buf);
}

// Load 代码到DSP RAM 里
// 0: 成功;1: 失败
int DSPLoader(DSP_MOUDLE m)
{
    DSPSec Sec;
    char * pClearBuf;
    char moudles[][64] =
    { 
#if ROCK_CAMERA 
        DSP_MOUDLE_JPG,
        DSP_MOUDLE_JPGENC,	//DC 编码
        DSP_MOUDLE_DVENC	//DV 编码
#else
        DSP_MOUDLE_JPG
#endif
    };
    UINT32 fsize = 0;
    
    
    MY_FILE* hFw = (MY_FILE*)RKFSFileOpen(moudles[m], "rb");
    if (hFw == NULL)
        return 1;

    ClrRegBit32(SCU_CPU0_BASE + SCU_REG_CHIPCFG, 18);  //disable

    fsize = RKFSFileGetSize(hFw);
    RKmemset(&Sec, 0, sizeof(DSPSec));

    //将DSP DRAM 清0
#if (ROCK_CAMERA == 0)    
    RKmemset((char *)DMEM_ADDR_AHB0, 0, sizeof(short)*0x8000);
#else
    if ( m == DSP_JPG )
    {
        RKmemset((char *)DMEM_ADDR_AHB0, 0, sizeof(short)*0x8000);
    }
    else
    {
        pClearBuf = (char*)RKmalloc(sizeof(short)*0x8000);
        RKmemset(pClearBuf, 0, 32*1024);
        RKmemcpy((char *)DMEM_ADDR_AHB0, pClearBuf,sizeof(short)*0x8000);
        RKfree(pClearBuf);
    }    
#endif

    while (fsize >= 0xc)
    {
        GetNextSec(hFw, &Sec);
        fsize -= Sec.Len;
        fsize -= 0xc;
    }
    RKFSFileClose(hFw);

#if ROCK_CAMERA
    if ( m == DSP_JPG )
#endif    	
        Scu_ModuleReset(DSP_C_RESET, FALSE);

    return 0;
}


⌨️ 快捷键说明

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