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

📄 prtcl.c

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

//==================================================================================
//						standard I2C function description
//==================================================================================
//#define	DVC_PG0		0
//#define	DVC_PG1		1
//#define	DVC_PG2		2
//
//#define	TW2835		(0x80|0x35)	// [7]:I2C_ASIC_SDA = 1, [6:1]:Slave Address of TW2824 = 0x40
//#define	TW9901		0x44    // Slave Address of TW9901 (SIAD1/SIAD0 : GND)
//#define	KS0123		0x0c    // Slave Address of KS0123


//==================================================================================
//						standard I2C function description
//==================================================================================
//*
#if defined(__WTH_VGA__)
void SetI2CStart(void)
{
	I2C_SDA = 1;
	I2C_SCL = 1;
	I2C_SDA = 0;
	I2C_SCL = 0;
}
//==================================================================================
void SetI2CStop(void)
{
	I2C_SDA = 0;
	I2C_SCL = 1;
	I2C_SDA = 1;
}
//==================================================================================
void SetI2CAck(U8 _tgl)
{
	U8 _t1_;

	if(_tgl){							//... drive ack signal(control both SCL and SDA)
		I2C_SDA = 0;
		for(_t1_=0;_t1_<1;_t1_++);
		I2C_SCL = 1;
		for(_t1_=0;_t1_<1;_t1_++);
		I2C_SCL = 0;
		for(_t1_=0;_t1_<1;_t1_++);
		I2C_SDA = 1;		//... SDA input mode
	}
	else{									//... just provide SCL signal
		I2C_SDA = 1;		//... SDA input mode
		I2C_SCL = 1;
		for(_t1_=0;_t1_<1;_t1_++);
		I2C_SCL = 0;
	}
}
//==================================================================================
void SetI2CP2S(U8 _wdat)
{
	U8 _t1_;//, _t2_;

	for(_t1_=0;_t1_<8;_t1_++){
		(_wdat&BIT7) ?  (I2C_SDA=1) : (I2C_SDA=0);
//		for(_t2_=0;_t2_<3;_t2_++);
		I2C_SCL = 1;
		_wdat<<=1;
		I2C_SCL = 0;
	}
}
//==================================================================================
//void WriteI2CByte(U8 _dvc, U8 _addr, U8 _wdat)
//{
//#if	defined(__EN_ISR__)
//	EA = 0;
//#endif
//
//	SetI2CStart();
//	SetI2CP2S(_dvc<<1);			// I2C write mode
//	SetI2CAck(0);
//	SetI2CP2S(_addr);
//	SetI2CAck(0);
//	SetI2CP2S(_wdat);
//	SetI2CAck(0);
//	SetI2CStop();
//
//#if	defined(__EN_ISR__)
//	EA = 1;
//#endif
//}
//==================================================================================
//void WriteI2CTable(U8 _dvc, U8 _addr, U8 code *_tbl_ptr, U8 _tbl_cnt)
//{
//	U8 _cnt_;
//
//#if	defined(__EN_ISR__)
//	EA = 0;
//#endif
//
//	SetI2CStart();
//	SetI2CP2S(_dvc<<1);			// I2C write mode
//	SetI2CAck(0);
//	SetI2CP2S(_addr);
//	SetI2CAck(0);
//	for(_cnt_=0;_cnt_<_tbl_cnt;_cnt_++){
//		SetI2CP2S(_tbl_ptr[_cnt_]);
//		SetI2CAck(0);
//	}
//	SetI2CStop();
//
//#if	defined(__EN_ISR__)
//	EA = 1;
//#endif
//}
//==================================================================================
U8 GetI2CS2P(void)
{
	U8 _rdat_=0, _t1_;//, _t2_;

	I2C_SDA = 1;		// ... SDA input mode
	for(_t1_=1;_t1_<=8;_t1_++){
//		for(_t2_=0;_t2_<10;_t2_++);
		I2C_SCL = 1;
		if(I2C_SDA == 1)	_rdat_ |= 0x01;
		I2C_SCL = 0;
		if(_t1_==8) continue;		// 8锅掳俊急 shift 扒呈盾.
		_rdat_<<=1;
	}
	return _rdat_;
}
////==================================================================================
//U8 ReadI2CByte(U8 _dvc, U8 _addr)
//{
//	U8 _rdat_=0;
//
//#if	defined(__EN_ISR__)
//	EA = 0;
//#endif
//
//	SetI2CStart();
//	SetI2CP2S(_dvc<<1);			// I2C write mode
//	SetI2CAck(0);
//	SetI2CP2S(_addr);
//	SetI2CAck(0);
//	
//	SetI2CStart();				// write -> read 困秦 restart
//	SetI2CP2S((_dvc<<1)|0x01);	// I2C read mode
//	SetI2CAck(0);
//	_rdat_ = GetI2CS2P();
//	SetI2CAck(0);
//
//	SetI2CStop();
//
//#if	defined(__EN_ISR__)
//	EA = 1;
//#endif
//
//	return _rdat_;
//}
//==================================================================================
void WriteI2CWord(U8 _dvc, U16 _addr, U16 _wdat)
{
#if	defined(__EN_ISR__)
	EA = 0;
#endif

	SetI2CStart();
	SetI2CP2S(_dvc<<1);			// I2C write mode
	SetI2CAck(0);
	SetI2CP2S(_addr>>8);
	SetI2CAck(0);
	SetI2CP2S(_addr&0xff);
	SetI2CAck(0);

	SetI2CStart();
	SetI2CP2S(_dvc<<1);			// I2C write mode
	SetI2CAck(0);
	SetI2CP2S(_wdat>>8);
	SetI2CAck(0);
	SetI2CP2S(_wdat&0xff);
	SetI2CAck(0);

	SetI2CStop();

#if	defined(__EN_ISR__)
	EA = 1;
#endif
}
//==================================================================================
U16 ReadI2CWord(U8 _dvc, U16 _addr)
{
	U16 _rdat_=0;

#if	defined(__EN_ISR__)
	EA = 0;
#endif

	SetI2CStart();
	SetI2CP2S(_dvc<<1);			// I2C write mode
	SetI2CAck(0);
	SetI2CP2S(_addr>>8);
	SetI2CAck(0);
	SetI2CP2S(_addr&0xff);
	SetI2CAck(0);

	SetI2CStart();				// write -> read 困秦 restart
	SetI2CP2S((_dvc<<1)|0x01);	// I2C read mode
	SetI2CAck(0);
	_rdat_ = GetI2CS2P();
	_rdat_ <<= 8;
	SetI2CAck(1);
	_rdat_ |= GetI2CS2P();
	SetI2CAck(0);

	SetI2CStop();

#if	defined(__EN_ISR__)
	EA = 1;
#endif

	return _rdat_;
}
#endif
//	*/

//==================================================================================
//==================================================================================
//==================================================================================
//==================================================================================
/*
void SetAsicI2CStart(void)
{
	I2C_ASIC_SDA = 1;
	I2C_ASIC_SCL = 1;
	I2C_ASIC_SDA = 0;
	I2C_ASIC_SCL = 0;
}
//==================================================================================
void SetAsicI2CStop(void)
{
	I2C_ASIC_SDA = 0;
	I2C_ASIC_SCL = 1;
	I2C_ASIC_SDA = 1;
}
//==================================================================================
void SetAsicI2CAck(void)
{
	U8 _t1_;
	
	I2C_ASIC_SDA = 1;		//... SDA input mode
	I2C_ASIC_SCL = 1;
	for(_t1_=0;_t1_<1;_t1_++);
	I2C_ASIC_SCL = 0;
}
//==================================================================================
void SetAsicI2CP2S(U8 _wdat)
{
	U8 _t1_;//,  _t2_;

	for(_t1_=0;_t1_<8;_t1_++){
		(_wdat&BIT7) ?  (I2C_ASIC_SDA=1) : (I2C_ASIC_SDA=0);
//		for(_t2_=0;_t2_<3;_t2_++);
		I2C_ASIC_SCL = 1;
		_wdat<<=1;
		I2C_ASIC_SCL = 0;
	}
}
//==================================================================================
void WriteAsicI2CByte(U8 _dvc, U8 _pg, U8 _addr, U8 _wdat)
{
//	U8 _t1_;
	
#if	defined(__EN_ISR__)
	EA = 0;
#endif

	HSPB = 1;		//... I2C interface
//	for(_t1_=0;_t1_<100;_t1_++);
	HWRB = 0;
	HRDB = 0;
	HCSB1 = 0;
	
	P0 = TW2824;		//... slave addr[6:1]
//	P0_7 = 1;
	HCSB0 = 0;		//... slave addr[0]

	SetAsicI2CStart();
	SetAsicI2CP2S(TW2824<<1);			// I2C write mode
	SetAsicI2CAck();
	SetAsicI2CP2S(_pg);
	SetAsicI2CAck();
	SetAsicI2CP2S(_addr);
	SetAsicI2CAck();
	SetAsicI2CP2S(_wdat);
	SetAsicI2CAck();
	SetAsicI2CStop();

//	HSPB = 0;		//... Parallel interface
//	for(_t1_=0;_t1_<100;_t1_++);

#if	defined(__EN_ISR__)
	EA = 1;
#endif
}
//==================================================================================
U8 GetAsicI2CS2P(void)
{
	U8 _rdat_=0, _t1_;//, _t2_;

	I2C_ASIC_SDA = 1;		// ... SDA input mode
	for(_t1_=1;_t1_<=8;_t1_++){
//		for(_t2_=0;_t2_<10;_t2_++);
		I2C_ASIC_SCL = 1;
		if(I2C_ASIC_SDA == 1)	_rdat_ |= 0x01;
		I2C_ASIC_SCL = 0;
		if(_t1_==8) continue;		// 8锅掳俊急 shift 扒呈盾.
		_rdat_<<=1;
	}
	return _rdat_;
}
//==================================================================================
U8 ReadAsicI2CByte(U8 _dvc, U8 _pg, U8 _addr)
{
	U8 _rdat_=0;

#if	defined(__EN_ISR__)
	EA = 0;
#endif

	HSPB = 1;		//... I2C interface
	HWRB = 0;
	HRDB = 0;
	HCSB1 = 0;
	
	P0 = TW2824;		//... slave addr[6:1]
//	P0_7 = 1;
	HCSB0 = 0;		//... slave addr[0]

	SetAsicI2CStart();
	SetAsicI2CP2S(TW2824<<1);			// I2C write mode
	SetAsicI2CAck();
	SetAsicI2CP2S(_pg);
	SetAsicI2CAck();
	SetAsicI2CP2S(_addr);
	SetAsicI2CAck();
	SetAsicI2CStart();				// write -> read 困秦 restart
	SetAsicI2CP2S((TW2824<<1)|0x01);	// I2C read mode
	SetAsicI2CAck();
	_rdat_=GetAsicI2CS2P();
	SetAsicI2CAck();
	SetAsicI2CStop();

#if	defined(__EN_ISR__)
	EA = 1;
#endif

	return _rdat_;
}
//	*/
//==================================================================================
/*
void WriteAsicI2CTable(U8 _dvc, U8 _pg, U8 _addr, U8 *_tbl_ptr, U8 _tbl_cnt)
{
	U8 _t1_;
	
#if	defined(__EN_ISR__)
	EA = 0;
#endif

	HSPB = 1;		//... I2C interface
	HWRB = 0;
	HRDB = 0;
	HCSB1 = 0;
	
	P0 = TW2824;		//... slave addr[6:1]
//	P0_7 = 1;
	HCSB0 = 0;		//... slave addr[0]

	SetAsicI2CStart();
	SetAsicI2CP2S(TW2824<<1);			// I2C write mode
	SetAsicI2CAck();
	SetAsicI2CP2S(_pg);
	SetAsicI2CAck();
	SetAsicI2CP2S(_addr);
	SetAsicI2CAck();
	for(_t1_=0;_t1_<_tbl_cnt;_t1_++){
		SetAsicI2CP2S(*_tbl_ptr);
		SetAsicI2CAck();
		_tbl_ptr++;
	}	
	SetAsicI2CStop();

#if	defined(__EN_ISR__)
	EA = 1;
#endif
}
//	*/

//==================================================================================
//==================================================================================
//						Parallel function description
//==================================================================================
//==================================================================================
/*
void ChipSelAllOff(void)
{
	HCSB1 = 1;
	HCSB0 = 1;
}
//==================================================================================
void ChipSelPage0(void)
{
	ChipSelAllOff();

	HCSB0 = 0;		
	HCSB1 = 0;
}
//==================================================================================
void ChipSelPage1(void)
{
	ChipSelAllOff();

	HCSB0 = 1;
	HCSB1 = 0;
}
//==================================================================================
void ChipSelPage2(void)
{
	ChipSelAllOff();

	HCSB0 = 0;
	HCSB1 = 1;
}
//	*/
//==================================================================================
//void ChipSelAllOff(void)
//{
//	HCSB1 = 1;
//	HPSB_M = 1;
//
//	HCSB0 = 1;
//	HPSB_D = 1;
//}
////==================================================================================
//void ChipSelPage0(void)
//{
//	ChipSelAllOff();
//
//	HCSB0 = 0;		
//	HPSB_D = 0;
//
//	HCSB1 = 1;
//	HPSB_M = 1;
//}
////==================================================================================
//void ChipSelPage1(void)
//{
//	ChipSelAllOff();
//
//	HCSB0 = 1;
//	HPSB_D = 1;
//
//	HCSB1 = 1;
//	HPSB_M = 0;
//}
////==================================================================================
//void ChipSelPage2(void)
//{
//	ChipSelAllOff();
//
//	HCSB0 = 1;
//	HPSB_D = 1;
//
//	HCSB1 = 0;
//	HPSB_M = 1;
//}
//==================================================================================
void WriteAsicByteOSD(U8 _dvc, U8 _addr, U8 _wdat)
{
//	U8 _t1_;
	
//	if(_pg == DVC_PG0){
//		WriteI2CByte(0x28,_addr,_wdat);
//	}
//	else{
#if	defined(__EN_ISR__)
		EA = 0;
#endif

//		HCSB0=1;
//		HCSB1=1;
		P1 = 0xf6;					//... initial state
//		//... P[7:4]:INT[5:2], P1_3:HALE, P1_2:HRDB, P1_1:HWRB, P1_0:HSPB

#if	defined(__4CH__)
		_dvc = 0;			//... temporal
		HCSB0=0;
		HCSB1=1;
#elif	defined(__16CH__)
		P2 = (_dvc^0xff)|0xaa;
#endif













		MDATA =	_addr;

⌨️ 快捷键说明

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