📄 debi.cpp
字号:
return 0;
}
int CCard::Stop(int nChannel)
{
if(m_nBoardVersion==REVSS3000){
WriteByte(0x08, 0x05);
return 1;
}
SelectDSP();
if(nChannel==0)
SetDSPReg(DSP_COMMAND,CM_STOP);
else
SetDSPReg2(DSP_COMMAND,CM_STOP);
InformDSP(nChannel);
DisselectDSP();
if(WaitDSPInt(nChannel)){
//if(WaitDSPInt())
//return 2;
//else
return 1;
}
else
return 0;
}
void CCard::Release(int nChannel)
{
if(m_nBoardVersion==REVSS3000){
WriteByte(0x08, 0x09);
return ;
}
SelectDSP();
if(nChannel==0)
SetDSPReg(DSP_COMMAND,CM_RELEASE);
else
SetDSPReg2(DSP_COMMAND,CM_RELEASE);
InformDSP(nChannel);
DisselectDSP();
}
/*int TestAFGPIO(void)
{
SelectDSP();
SetDSPReg(GPIO_CNTL, 0x0f);
SetDSPReg(GPIO_OUT, 0x05);
SetDSPReg(DSP_COMMAND, CM_GPUPDATE);
InformDSP(0);
DisselectDSP();
if(WaitDSPInt(0))
return 1;
else
return 0;
}*/
int CCard::Reset(int nChannel)
{
if(m_nBoardVersion==REVSS3000){
WriteByte(0x0b, 0x00);
Sleep(1);
if(WaitDSPInt(nChannel, 0x40))
return 1;
else
return 0;
}
else{
SelectDSP();
if(nChannel==0)
SetDSPReg(DSP_COMMAND, CM_RESET);
else
SetDSPReg2(DSP_COMMAND, CM_RESET);
InformDSP(nChannel);
DisselectDSP();
}
if(WaitDSPInt(nChannel))
return 1;
else
return 0;
}
int CCard::WaitDSPInt(int nChannel)
{
int i=0;
SelectDSP();
while(i<50){
if(GetDSPInt(nChannel)){
ClearDSPInt(nChannel);
DisselectDSP();
return 1;
}
Sleep(1);
i++;
}
DisselectDSP();
return 0;
}
int CCard::WaitDSPInt(int nChannel, int nWant)
{
int i=0;
while(i<5){
if(GetDSPInt(nChannel)==nWant){
ClearDSPInt(nChannel);
return 1;
}
Sleep(1);
i++;
}
return 0;
}
/*
void CCard::ReadDSPRegisters(void)
{
int i;
unsigned int u;
SelectDSP();
for(i=0; i<0x37; ){
u=GetDSPReg(i);
i++;
}
u=GetDSPReg(0x68);
//DisselectDSP();
}
*/
int CCard::ConfigMPEG(int nVideoMode, int nAudioRate,int nStereo, int nChannel)
{
if(m_nBoardVersion==REVSS3000){
WriteByte(0x0c, 0x03);
WriteByte(0x10, 0x20);//threshold
WriteByte(0x11, 0x05);//work mode
if(nVideoMode==VIDEO_PAL)
WriteByte(0x12, 0x09);//video format
else
WriteByte(0x12, 0x01);//video format
WriteByte(0x13, 0x5c);//venc control
WriteByte(0x14, 0x16);//vframe_pattern
//WriteByte(0x18, 0x13);//vbv_initial
WriteByte(0x1a, 0x01);//Vslice_header+Repeat_B
WriteByte(0x1b, 0x11);//Vgop_header
WriteByte(0x1c, 0);//Vit_hour
WriteByte(0x1d, 0);//Vit_minute
WriteByte(0x1e, 0);//Vit_second
WriteByte(0x1f, 0);//Vit_frame
WriteByte(0x20, 0);//Vin_offset
WriteByte(0x21, 0xac);//Vin_control
WriteByte(0x22, 0x00);//Vin_picture
WriteByte(0x24, 0x19);//I2sin_confa
WriteByte(0x25, 0x24);//I2sin_confb!!!
WriteByte(0x26, 0x19);//I2sout_confa
WriteByte(0x27, 0x23);//I2sout_confb !! bit2=master
WriteByte(0x28, 0x0b);//audio bitrte
WriteByte(0x29, 0x01);//audio_control
WriteByte(0x2d, 0x00);//CD_formating
WriteByte(0x2e, 0x00);//sys_config
WriteByte(0x2f, 0x19);//active_ports!!!
WriteByte(0x30, 0x04);//buffer_min
WriteByte(0x31, 0);//initial_minute
WriteByte(0x32, 0);//initial_second
WriteByte(0x33, 0);//initial_sector
WriteByte(0x34, 0x04);//pause_length
WriteByte(0x35, 0x01);//Link_length
return 1;
}
SelectDSP();
if(nChannel==0){
SetDSPReg(WORK_MODE, WORK_AV);
if(nVideoMode==VIDEO_PAL)
SetDSPReg(VIDEO_FORMAT, VF_PAL);
else
SetDSPReg(VIDEO_FORMAT, VF_NTSC);
SetDSPReg(VENC_CNTL, SCDETECT_EN);
SetDSPReg(VFRAME_PATTERN, 0x16);
SetDSPReg(VSLICE_HEADER, 1);
SetDSPReg(VGOP_HEADER, (1<<4)|3); //sequency_hdr<<4+gop_hdr
SetDSPReg(VIN_OFFSET, 0);
SetDSPReg(VIN_CNTL, 0x0c);
SetDSPReg(VIN_PICTURE, BITMAP_NONE);
SetDSPReg(I2SIN_CONFA, 0x19);
SetDSPReg(I2SOUT_CONFA, 0x19);
SetDSPReg(I2SOUT_CONFB, OUT_SLAVE);
if(nAudioRate<ARATE_32 || nAudioRate>ARATE_384)
return 0;
SetDSPReg(ARATE, nAudioRate);
if(nAudioRate<ARATE_96)
nStereo=AUDIO_MONO;
if(nAudioRate>ARATE_224)
nStereo=AUDIO_STEREO;
if(nStereo==AUDIO_MONO)
SetDSPReg(AUDIO_CNTL, 0x31);
else
SetDSPReg(AUDIO_CNTL, 0x01);
SetDSPReg(CD_FORMATTING,INSERTHEADER);
SetDSPReg(INIT_MINUTE,0);
SetDSPReg(INIT_SECOND,0);
SetDSPReg(INIT_SECTOR,0);
SetDSPReg(PAUSE_LENGTH, 0x01);
SetDSPReg(LINK_LENGTH, 0);
SetDSPReg(REAR_MARGIN, 0x0f);
//SetDSPReg(SECTOR_NUM_M, 0);
//SetDSPReg(SECTOR_NUM_L, 0);
}
else{
SetDSPReg2(WORK_MODE, WORK_AV);
if(nVideoMode==VIDEO_PAL)
SetDSPReg2(VIDEO_FORMAT, VF_PAL);
else
SetDSPReg2(VIDEO_FORMAT, VF_NTSC);
SetDSPReg2(VENC_CNTL, SCDETECT_EN);
SetDSPReg2(VFRAME_PATTERN, 0x16);
SetDSPReg2(VSLICE_HEADER, 1);
SetDSPReg2(VGOP_HEADER, (1<<4)|3); //sequency_hdr<<4+gop_hdr
SetDSPReg2(VIN_OFFSET, 0);
SetDSPReg2(VIN_CNTL, 0x0c);
SetDSPReg2(VIN_PICTURE, BITMAP_NONE);
SetDSPReg2(I2SIN_CONFA, 0x19);
SetDSPReg2(I2SOUT_CONFA, 0x19);
SetDSPReg2(I2SOUT_CONFB, OUT_SLAVE);
if(nAudioRate<ARATE_32 || nAudioRate>ARATE_384)
return 0;
SetDSPReg2(ARATE, nAudioRate);
if(nAudioRate<ARATE_96)
nStereo=AUDIO_MONO;
if(nAudioRate>ARATE_224)
nStereo=AUDIO_STEREO;
if(nStereo==AUDIO_MONO)
SetDSPReg2(AUDIO_CNTL, 0x31);
else
SetDSPReg2(AUDIO_CNTL, 0x01);
SetDSPReg2(CD_FORMATTING,INSERTHEADER);
SetDSPReg2(INIT_MINUTE,0);
SetDSPReg2(INIT_SECOND,0);
SetDSPReg2(INIT_SECTOR,0);
SetDSPReg2(PAUSE_LENGTH, 0x01);
SetDSPReg2(LINK_LENGTH, 0);
SetDSPReg2(REAR_MARGIN, 0x0f);
//SetDSPReg2(SECTOR_NUM_M, 0);
//SetDSPReg2(SECTOR_NUM_L, 0);
}
DisselectDSP();
return 1;
}
#define HPIC_WRITE 0x00
#define HPIC_READ 0x08
#define HPIA_WRITE 0x04
#define HPIA_READ 0x0c
#define HPID_WRITE 0x06
#define HPID_READ 0x0e
#define HPIC2_WRITE 0x10
#define HPIC2_READ 0x18
#define HPIA2_WRITE 0x14
#define HPIA2_READ 0x1c
#define HPID2_WRITE 0x16
#define HPID2_READ 0x1e
#define XPORT 0xf0
#define WriteHPIC(wData) WriteWord(HPIC_WRITE, wData)
#define ReadHPIC() ReadWord(HPIC_READ)
#define WriteHPIA(wData) WriteWord(HPIA_WRITE, wData)
#define ReadHPIA() ReadWord(HPIA_READ)
#define WriteHPID(wData) WriteWord(HPID_WRITE, wData)
#define ReadHPID() ReadWord(HPID_READ)
#define WriteHPIC2(wData) WriteWord(HPIC2_WRITE, wData)
#define ReadHPIC2() ReadWord(HPIC2_READ)
#define WriteHPIA2(wData) WriteWord(HPIA2_WRITE, wData)
#define ReadHPIA2() ReadWord(HPIA2_READ)
#define WriteHPID2(wData) WriteWord(HPID2_WRITE, wData)
#define ReadHPID2() ReadWord(HPID2_READ)
void CCard::InformDSP(int nChannel)
{
if(nChannel==0)
WriteHPIC(0x0404);
else
WriteHPIC2(0x0404);
}
void CCard::WriteChipMemory(unsigned int nAddress, unsigned int wData)
{
WriteHPIA(nAddress);
WriteHPID(wData);
}
unsigned int CCard::ReadChipMemory(unsigned int nAddress)
{
WriteHPIA(nAddress);
return ReadHPID();
}
void CCard::WriteChipMemory2(unsigned int nAddress, unsigned int wData)
{
WriteHPIA2(nAddress);
WriteHPID2(wData);
}
unsigned int CCard::ReadChipMemory2(unsigned int nAddress)
{
WriteHPIA2(nAddress);
return ReadHPID2();
}
void CCard::InitDSPHpi()
{
WriteHPIC(0x0808);//clear interrupt and set BOB=0 (high byte first)
// int hpic=ReadHPIC();
}
void CCard::InitDSPHpi2()
{
WriteHPIC2(0x0808);//clear interrupt and set BOB=0 (high byte first)
// int hpic=ReadHPIC();
}
void CCard::ClearDSPInt(int nChannel)
{
int n;
if(m_nBoardVersion==REVSS3000){
//ReadByte(0x0e);
n=ReadByte(0x0d);
WriteByte(0x0f, 0xff);
n=ReadByte(0x0d);
ASSERT(n==0);
}
else{
if(nChannel==0)
WriteHPIC(0x0808);//clear interrupt and set BOB=0 (high byte first)
else
WriteHPIC2(0x0808);//clear interrupt and set BOB=0 (high byte first)
}
}
int CCard::GetDSPInt(int nChannel)
{
int nStatus;
if(m_nBoardVersion==REVSS3000){
return ReadByte(0x0d);
}
else{
if(nChannel==0)
nStatus=ReadHPIC();
else
nStatus=ReadHPIC2();
if(nStatus&0x0808)
return 1;
else
return 0;
}
}
void CCard::WriteWord(int nAddress, unsigned int wData)
{
nAddress&=0xfffe;//forced align
WriteByte(nAddress, (wData>>8)&0xff);//high byte first
WriteByte(nAddress+1, wData&0xff);
//WriteByte(nAddress, (wData)&0xff);//low byte first
//WriteByte(nAddress+1, (wData>>8)&0xff);
}
unsigned int CCard::ReadWord(int nAddress)
{
unsigned int nResult=0;
nAddress&=0xfffe;//forced align
nResult |=ReadByte(nAddress)<<8; //high byte first
nResult |=ReadByte(nAddress+1);
//nResult |=ReadByte(nAddress); //low byte first
//nResult |=ReadByte(nAddress+1)<<8;
return nResult;
}
void CCard::WriteByte(int nAddress, unsigned char byData)
{
WriteReg(DEBI_COMMAND, (1l<<17)|DEBI_WRITE|nAddress);//0x0f;//(blocklength<<17)|(writen<<16)|address;
WriteReg(DEBI_AD, byData|(byData<<8)|(byData<<16)|(byData<<24));//data to be out
//WriteReg(DEBI_AD, byData);//data to be out
UploadDebi();
}
unsigned char CCard::ReadByte(int nAddress)
{
WriteReg(DEBI_COMMAND, (1l<<17)|DEBI_READ|nAddress);//0x0f;//(blocklength<<17)|(writen<<16)|address;
UploadDebi();
return (UCHAR)((ReadReg(DEBI_AD))&0xff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -