📄 dsploader.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 + -