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

📄 ch.c

📁 一个比较好用的TW2835音视频芯片开发板的程序,
💻 C
📖 第 1 页 / 共 2 页
字号:
#include	"hdr.h"

//==================================================================================
//						Channel definition & variable description
//==================================================================================


//==================================================================================
//						Channel property(position & size, scale, ... ) function description
//==================================================================================
void	SetSclH(U8 _pth, U8 _dvc, U8 _ch, U16 _scl_h)
{
//	SetSclHValue(_pth,_dvc,_ch,_scl_h);
//	SetSclHFilter(_pth,_dvc,_ch);
	U8 _t1_;
	U8 _rdat_;
	
	if(BitSet(_pth,PTH_X)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch);
		
		_scl_h >>= 8;
		if(_scl_h > 191){											//	HSCLMSB > 192(0xc0)
			_t1_ = 0;
		}
		else if(_scl_h > 111){										// 112(0x70) < HSCLMSB < 191(0xbf)
			_t1_ = 1;
		}
		else if(_scl_h > 79){										// 80(0x50) < HSCLMSB < 111(0x6f)
			_t1_ = 2;
		}
		else{																//	HSCLMSB < 79(0x4f)
			_t1_ = 3;
		}
		WriteAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch,(_rdat_&0xfc)+_t1_);			//... filter data
		WriteAsicByte(_dvc,DVC_PG0,0x83+0x10*_ch,(U8)_scl_h);						//... scale data (MSB)
	}
	if(BitSet(_pth,PTH_PB)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch);
		
		_scl_h >>= 8;
		if(_scl_h > 191){											//	HSCLMSB > 192(0xc0)
			_t1_ = 0;
		}
		else if(_scl_h > 111){										// 112(0x70) < HSCLMSB < 191(0xbf)
			_t1_ = 1;
		}
		else if(_scl_h > 79){										// 80(0x50) < HSCLMSB < 111(0x6f)
			_t1_ = 2;
		}
		else{																//	HSCLMSB < 79(0x4f)
			_t1_ = 3;
		}
		WriteAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch,(_rdat_&0xfc)+_t1_);			//... filter data
		WriteAsicByte(_dvc,DVC_PG0,0x88+0x10*_ch,(U8)_scl_h);						//... scale data (MSB)
	}
	if(BitSet(_pth,PTH_Y)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch);
		
		_scl_h >>= 8;
		if(_scl_h > 0x7f)	_t1_ = 0;
		else	_t1_ = BIT4|1;

		WriteAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch,(_rdat_&0xec)+_t1_);			//... filter data
	}
}
//==================================================================================
void	SetSclV(U8 _pth, U8 _dvc, U8 _ch, U16 _scl_v)
{
//	SetSclVValue(_pth,_dvc,_ch,_VSCL);
//	SetSclVFilter(_pth,_dvc,_ch);
	U8 _t1_;
	U8 _rdat_;
	
	if(BitSet(_pth,PTH_X)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch);
		
		_scl_v >>= 8;
		if(_scl_v > 191){											//	HSCLMSB > 192(0xc0)
			_t1_ = 0;
		}
		else if(_scl_v > 111){										// 112(0x70) < HSCLMSB < 191(0xbf)
			_t1_ = 0;
		}
		else if(_scl_v > 79){										// 80(0x50) < HSCLMSB < 111(0x6f)
			_t1_ = 1;
		}
		else{																//	HSCLMSB < 79(0x4f)
			_t1_ = 2;
		}
		WriteAsicByte(_dvc,DVC_PG0,0x80+0x10*_ch,(_rdat_&0xf3)+(_t1_<<2));			//... filter data
		WriteAsicByte(_dvc,DVC_PG0,0x81+0x10*_ch,(U8)_scl_v);						//... scale data (MSB)
		
		if((b_cmn_jp_vdo == VDO_PAL)&&(_scl_v > 191))
//			WriteAsicByte(_dvc,DVC_PG0,0xc5,0x0f);
			SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT0<<_ch,BIT0<<_ch);
		else
//			WriteAsicByte(_dvc,DVC_PG0,0xc5,0x00);
			SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT0<<_ch,0x00);
	}
	if(BitSet(_pth,PTH_PB)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch);
		
		_scl_v >>= 8;
		if(_scl_v > 191){											//	HSCLMSB > 192(0xc0)
			_t1_ = 0;
		}
		else if(_scl_v > 111){										// 112(0x70) < HSCLMSB < 191(0xbf)
			_t1_ = 0;
		}
		else if(_scl_v > 79){										// 80(0x50) < HSCLMSB < 111(0x6f)
			_t1_ = 1;
		}
		else{																//	HSCLMSB < 79(0x4f)
			_t1_ = 2;
		}
		WriteAsicByte(_dvc,DVC_PG0,0x85+0x10*_ch,(_rdat_&0xf3)+(_t1_<<2));			//... filter data
		WriteAsicByte(_dvc,DVC_PG0,0x86+0x10*_ch,(U8)_scl_v);						//... scale data (MSB)
	}
	if(BitSet(_pth,PTH_Y)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch);

		_scl_v >>= 8;
		if(_scl_v > 0x7f)	_t1_ = 0;
		else	_t1_ = BIT5;

		WriteAsicByte(_dvc,DVC_PG0,0x8a+0x10*_ch,(_rdat_&0xd3)+_t1_);			//... filter data
		
		if((b_cmn_jp_vdo == VDO_PAL)&&(_scl_v > 191))
//			WriteAsicByte(_dvc,DVC_PG0,0xc5,0xf0);
			SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT4<<_ch,BIT4<<_ch);
		else
//			WriteAsicByte(_dvc,DVC_PG0,0xc5,0x00);
			SetAsicFlgType(_dvc,DVC_PG0,0xc5,BIT4<<_ch,0x00);
	}
}
//==================================================================================
//==================================================================================
void	SetSclRtoH(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x)
{
	U16 _scl_h_;
	U8 _rto1_, _rto2_;
	U8 _trgt_ch_;

	_rto1_ = (_rto_x&0xf0)>>4;
	_rto2_ = _rto_x&0x0f;
	if(_rto1_ > _rto2_)	_rto1_ = _rto2_;
	
	if(BitSet(_pth,PTH_X)){
//		_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x10+(_ch<<3))&0x03;		//... need to verify
		_trgt_ch_ = _ch;
		_scl_h_ = (0xffff/_rto2_)*_rto1_;
		SetSclH(PTH_X,_dvc,_trgt_ch_,_scl_h_);
	}
	if(BitSet(_pth,PTH_PB)){
//		_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x16+(_ch<<3))&0x0f;
		_trgt_ch_ = _ch;
		_scl_h_ = (0xffff/_rto2_)*_rto1_;
		SetSclH(PTH_PB,_dvc,_trgt_ch_,_scl_h_);
	}
	if(BitSet(_pth,PTH_Y)){
		if((_rto_x == 0x12)||(_rto_x == 0x11)){
//			_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x60+3*_ch)&0x03;
			_trgt_ch_ = _ch;
//			_scl_h_ = (0xffff/_rto2_)*_rto1_;
			if(_rto_x == 0x11)	_scl_h_ = 0xffff;
			else	_scl_h_ = 0x7fff;
			SetSclH(PTH_Y,_dvc,_trgt_ch_,_scl_h_);
		}
	}
}
//==================================================================================
void	SetSclRtoV(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_y)
{
	U16 _scl_v_;
	U8 _rto1_, _rto2_;
	U8 _trgt_ch_;

	_rto1_ = (_rto_y&0xf0)>>4;
	_rto2_ = _rto_y&0x0f;
	if(_rto1_ > _rto2_)	_rto1_ = _rto2_;

	if(BitSet(_pth,PTH_X)){
//		_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x10+(_ch<<3))&0x03;		//... need to verify
		_trgt_ch_ = _ch;
		_scl_v_ = (0xffff/_rto2_)*_rto1_;
		SetSclV(PTH_X,_dvc,_trgt_ch_,_scl_v_);
	}
	if(BitSet(_pth,PTH_PB)){
//		_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x16+(_ch<<3))&0x0f;
		_trgt_ch_ = _ch;
		_scl_v_ = (0xffff/_rto2_)*_rto1_;
		SetSclV(PTH_PB,_dvc,_trgt_ch_,_scl_v_);
	}
	if(BitSet(_pth,PTH_Y)){
		if((_rto_y == 0x12)||(_rto_y == 0x11)){
//			_trgt_ch_ = ReadAsicByte(_dvc,DVC_PG1,0x60+3*_ch)&0x03;
			_trgt_ch_ = _ch;
//			_scl_v_ = (0xffff/_rto2_)*_rto1_;
			if(_rto_y == 0x11)	_scl_v_ = 0xffff;
			else	_scl_v_ = 0x7fff;
			SetSclV(PTH_Y,_dvc,_trgt_ch_,_scl_v_);
		}
	}
}
//==================================================================================
void	SetSclRto(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x, U8 _rto_y)
{
	SetSclRtoH(_pth,_dvc,_ch,_rto_x);
	SetSclRtoV(_pth,_dvc,_ch,_rto_y);

//	SetScaleFilter(_pth,_dvc,_ch);
}
//==================================================================================
//==================================================================================
void	SetPicPos(U8 _pth, U8 _dvc, U8 _ch, U8 _pichl, U8 _picvt)
{
	U8 _rdat_, _picxx_;

//	if(_ch < 4){				//... main channel
//		_picxx_ = 0x30;
//	}
//	else{						//... dummy channel
//		_picxx_ = 0x40;
//		_ch &= 0x03;
//	}
//	
//	if(BitSet(_pth,PTH_X)){

	if(BitSet(_pth,PTH_X)||BitSet(_pth,PTH_PB)){
		if(BitSet(_pth,PTH_PB))		//... dummy channel
			_picxx_ = 0x40;
		else//if(_ch < 4){				//... main channel
			_picxx_ = 0x30;
			
		WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2),_pichl);
		WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+2,_picvt);

		if(BitSet(_pth,PTH_X)){
			//... SetPic..(..)窃荐甫 荤侩且版快,
			//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
			//... 2d box setting
			WriteAsicByte(_dvc,DVC_PG2,0x62+(_ch<<3),_pichl+1);
			WriteAsicByte(_dvc,DVC_PG2,0x64+(_ch<<3),_picvt);
		}
	}
	if(BitSet(_pth,PTH_Y)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG1,0x6d);
		if((_pichl == 90)||(_pichl == 0)){
			if(_pichl == 0)	ClearBit(_rdat_,BIT0<<(_ch<<1));
			else	SetBit(_rdat_,BIT0<<(_ch<<1));
		}
		if((_picvt == (cmn_bot>>1))||(_picvt == 0)){
			if(_picvt == 0)	ClearBit(_rdat_,BIT1<<(_ch<<1));
			else	SetBit(_rdat_,BIT1<<(_ch<<1));
		}
		WriteAsicByte(_dvc,DVC_PG1,0x6d,_rdat_);
	}
}
//==================================================================================
//void	SetPicSz(U8 _pth, U8 _dvc, U8 _ch, U8 v_PICHR, U8 v_PICVB)
//{
//	if(BitSet(_pth,PTH_X){
//		ary_picxx[_ch][1] = v_PICHR;
//		ary_picxx[_ch][3] = v_PICVB;
//		WriteAsicByte(_dvc,DVC_PG1,REG_PICHR+4*_ch,v_PICHR);
//		WriteAsicByte(_dvc,DVC_PG1,REG_PICVB+4*_ch,v_PICVB);
//	}
//	if(BitSet(_pth,PTH_Y){
//		WriteAsicByte(_dvc,DVC_PG1,REG_PICHR+7*_ch+0x30,v_PICHR);
//		WriteAsicByte(_dvc,DVC_PG1,REG_PICVB+7*_ch+0x30,v_PICVB);
//	}
//}
//	*/
//==================================================================================
void	SetPicSzRto(U8 _pth, U8 _dvc, U8 _ch, U8 _rto_x, U8 _rto_y)
{	// div_~ : ex) 0x14 -> 1/4, 0x23 -> 2/3, 0x13 -> 1/3, ...
	U8 _rto1_, _rto2_;
	U8 _pichr_, _picvb_, _picxx_;
	U8 _rdat_;
	
//	if(_ch < 4){				//... main channel
//		_picxx_ = 0x30;
//	}
//	else{						//... dummy channel
//		_picxx_ = 0x40;
//		_ch &= 0x03;
//	}
//	
//	if(BitSet(_pth,PTH_X)){

	if(BitSet(_pth,PTH_X)||BitSet(_pth,PTH_PB)){
		if(BitSet(_pth,PTH_PB))		//... dummy channel
			_picxx_ = 0x40;
		else//if(_ch < 4){				//... main channel
			_picxx_ = 0x30;
			
		_rto1_ = (_rto_x&0xf0)>>4;
		_rto2_ = _rto_x&0x0f;
		if(_rto1_ > _rto2_)	_rto1_ = _rto2_;
//		ary_picxx[_ch][1] = (180*_rto1_)/_rto2_;		// SAM87 micom (IAR C-compiler)
		_pichr_ = (180/_rto2_)*_rto1_;		// 8051 micom (Keil C-compiler)
		_rdat_ = ReadAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2));			//... PICHL
		_pichr_ += _rdat_;
		if(_pichr_ > 180)	_pichr_ = 180;
		WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+1,_pichr_);			//... PICHR

		if(BitSet(_pth,PTH_X)){
			//... SetPic..(..)窃荐甫 荤侩且版快,
			//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
			//... 2d box setting
			WriteAsicByte(_dvc,DVC_PG2,0x63+(_ch<<3),((_pichr_-_rdat_-(8>>_rto2_))>>3)-1);
			//... (HW + 1(md_bnd))*(16 / 2(resol)) = HR - HL - 1(ch_bnd) - pixel_offset(full:4,quad:2,pip:1... -> not contain)
		}

		_rto1_ = (_rto_y&0xf0)>>4;
		_rto2_ = _rto_y&0x0f;
		if(_rto1_ > _rto2_)	_rto1_ = _rto2_;
//		ary_picxx[_ch][3] = (cmn_bot*_rto1_)/_rto2_;		// SAM87 micom (IAR C-compiler)
		_picvb_ = (cmn_bot/_rto2_)*_rto1_;		// 8051 micom (Keil C-compiler)
		_rdat_ = ReadAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+2);		//... PICVT
		_picvb_ += _rdat_;
		if(_picvb_ > cmn_bot)	_picvb_ = cmn_bot;
		WriteAsicByte(_dvc,DVC_PG1,_picxx_+(_ch<<2)+3,_picvb_);		//... PICVB

		if(BitSet(_pth,PTH_X)){
			//... SetPic..(..)窃荐甫 荤侩且版快,
			//... motion box狼 potition鳖瘤 窃膊 官差骨肺 pb俊 措秦 control且 版快 live俊 措茄 motion box郴侩捞 官柴.
			//... 2d box setting
	//		if(BitSet(t_2dbox_ctl,_2DBOX_EN_X)
				WriteAsicByte(_dvc,DVC_PG2,0x65+(_ch<<3),((_picvb_-_rdat_)/6)-1);
		}
	}
	if(BitSet(_pth,PTH_Y)){
		_rdat_ = ReadAsicByte(_dvc,DVC_PG1,0x6c);
		if((_rto_x == 0x12)||(_rto_x == 0x11)){
			if(_rto_x == 0x11){
				SetBit(_rdat_,BIT0<<(_ch<<1));
				_pichr_ = 176;//180-4;
			}
			else{
				ClearBit(_rdat_,BIT0<<(_ch<<1));
				_pichr_ = 88;//90-2;
			}
		}
		if((_rto_y == 0x12)||(_rto_y == 0x11)){
			if(_rto_y == 0x11){
				SetBit(_rdat_,BIT1<<(_ch<<1));
				_picvb_ = cmn_bot;
			}
			else{
				ClearBit(_rdat_,BIT1<<(_ch<<1));

⌨️ 快捷键说明

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