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

📄 debi.cpp

📁 vc ad
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -