📄 cclarion.c
字号:
/********************************************************************************************//* cclarion.c : specific code for CLARION board* REALmagic Quasar Hardware Library* Created by Aurelia Popa-Radu* Copyright Sigma Designs Inc* Sigma Designs Proprietary and confidential* Created on 8/7/01* Description:/********************************************************************************************//****h* HwLib/CClarion_Implementation * DESCRIPTION * CClarion implementation of the IDecoderBoard interface. * CLARION board uses EM840X, Pcm1723 components to implement TV output. * Identified by HwLib reading MD5,MD4,MD3,MD2 pins = 0000 (MDCFG_REFERENCE). * PIO0 - IIC Clock for Eeprom * PIO1 - IIC Data for Eeprom * PIO2 - * PIO3 - * PIO4 - * PIO5 - MC for Pcm1723 * PIO6 - MD for Pcm1723 * PIO7 - ML for Pcm1723 * Implementation based on CVE2000. * Specific implementation: * QRESULT CClarion__VidSetVGATV(IDecoderBoard* pIDecoderBoard, * DWORD VideoRunning, DWORD TvOut) * QRESULT CClarion__AudioSetSampleRate(IDecoderBoard* pIDecoderBoard, DWORD Rate)/******************************************************************************/#include "pch.h"#if defined CLARION_BRD#include "cqsrbrd.h"QRESULT CClarion__VidSetVGATV(IDecoderBoard* pIDecoderBoard, DWORD VideoRunning, DWORD TvOut){ CQuasarBoard *this = (CQuasarBoard*) pIDecoderBoard; if (TvOut == SET_TV) { this->TvOut = TvOut; ITvEncoder_SetCurrentYcYuvRgb(this->m_pITvEncoder, this->ReqYcYuvRgb); CVE2000__VidSetTV(pIDecoderBoard, VideoRunning); return Q_OK; } return E_NOT_SUPPORTED;}QRESULT CClarion__AudioSetSampleRate(IDecoderBoard* pIDecoderBoard, DWORD Rate){ CQuasarBoard *this = (CQuasarBoard*) pIDecoderBoard; BYTE j; WORD Pcm1723[4]; if( (!(this->BoardAudioRate & FORCED_HW_UPDATE)) && (this->BoardAudioRate == Rate) ) return Q_OK; this->BoardAudioRate = Rate & ~FORCED_HW_UPDATE; // use most significant bit to force programming QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT(" CQB__AudioSetSampleRate= %lu"), this->BoardAudioRate)); IDecoder_SetAudioSampleRate(this->m_pIDecoder, this->BoardAudioRate);// Pcm1723 is the only DAC that generates by it self the audio clock Pcm1723[0] = 0x000 | 0x1FF; // 0x1FF left attenuation// Pcm1723[1] = 0x200 | 0x1FF; // 0x3FF right attenuation Pcm1723[1] = 0x200 | 0x100; // right attenuation controlled by left register if bit2 in reg3 is set// Pcm1723[2] = 0x400 | 0x130; // 0x530 stereo, 24 bits// Pcm1723[2] = 0x400 | 0x120; // 0x520 stereo, 16 bits Pcm1723[2] = 0x400 | 0x0D0; // L/R channels reversed// Pcm1723[2] |= 4; // operational control// Pcm1723[2] |= 2; // de-emphasis// Pcm1723[2] |= 1; // soft mute Pcm1723[3] = (this->BoardAudioRate == 32000) ? 0x80 : ((this->BoardAudioRate == 44100) ? 0x00 : 0x40); Pcm1723[3] |= 0x600 | 0x08; // 0x649 for 48kHz, 256 divider, normal Pcm1723[3] |= 1; // I2S / normal Pcm1723[3] |= 0x100; // IZD - zero detection Pcm1723[3] |= 0x4; // attenuation control from reg0 to both left and right// Pcm1723[3] |= 2; // LRP - left, right polarity // PIO7 - ML, PIO5 - MC, PIO6 - MD for (j=0;j<sizeof(Pcm1723)/sizeof(WORD);j++) WritePcmDacReg(pIDecoderBoard, j, Pcm1723[j], PIO7, PIO5, PIO6); return Q_OK;}void CClarion__InitVtable(IDecoderBoard* pIDecoderBoard){ CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard; this->lpVtbl->UpdateOverlay = CQuasarBoard__TVVMIUpdateVideoWindow; this->lpVtbl->HwReset = CVE2000__HwReset; this->lpVtbl->SetCustomTvHdtv = CVE2000__SetCustomTvHdtv; this->lpVtbl->VidSetVGATV = CClarion__VidSetVGATV; this->lpVtbl->AudioSetSampleRate = CClarion__AudioSetSampleRate;}QRESULT CClarion__SpecificCreateInstance(IDecoderBoard* pIDecoderBoard, DWORD dwInstance){ CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard; this->pRegistry->Ccir_656 = CCIR_656; this->pRegistry->SyncEnable = 0; // by default disable VS,HS,VVLD for 656 this->pRegistry->TvOut = SET_TV | SET_NTSC | SET_ONETOONE; this->TvOut = SET_TV; // overwrite necessary values CClarion__InitVtable(pIDecoderBoard); this->DeviceId = VENTURA2000_DEVICEID; this->BoardVersion = CLARION; this->SubId = (this->BoardVersion>>8); if( (IDecoder_ReadReg(this->m_pIDecoder, DRAM_startup) & 0x3C) != MDCFG_CLARION ) QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("\n\nERROR: Create CLARION is FORCED !") )); { DWORD Value = I2SInv_SCkinSCIN_Jda1CkinGCK_ScinIN_DamckIN; IDecoder_SetProperty(this->m_pIDecoder, DECODER_SET, edecAudioInOutConfig, 0, &Value, sizeof(DWORD), NULL); Value = 24; IDecoder_SetProperty(this->m_pIDecoder, DECODER_SET, edecAudioDacBitsPerSample, 0, &Value, sizeof(DWORD), NULL); } return Q_OK;}#endif // CLARION_BRD#if defined CLARION_BRD && !defined ANY_BRDQRESULT CreateInstance(DWORD* pInstance, void* pHwLibConf){ QRESULT qr = CommonCreateInstance(pInstance, pHwLibConf); if( QSUCCEEDED(qr) ) qr = CClarion__SpecificCreateInstance(g_pIDecoderBoard[*pInstance], *pInstance); if( QFAILED(qr) ) { CQuasarBoard__DeleteObjects(g_pIDecoderBoard[*pInstance]); g_pIDecoderBoard[*pInstance] = 0; return E_CREATE_INSTANCE_FAILED; } return Q_OK;}#endif // CLARION_BRD && !ANY_BRD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -