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

📄 drv_att7022.c

📁 Att7022 (power meter chip) driver for Philips LPC213X
💻 C
📖 第 1 页 / 共 2 页
字号:
	#endif
#endif	//#ifdef U1_ATT7022B
		return indata;
}

/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//// the return data shpuld be 24bits
int32 Read_Sp1_Hd(uint8 comx)
{
int32 indata=0;

#ifdef EN_U1_ON_LINE
uint8  i;
uint8  buff;

//	TimeElapseStart();
	IRQDisable();

//// start condition
	IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;
	IO0CLR = AT_SSCLK_P0o;//IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;
//	IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;		

	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;	//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	IO1SET = AT_CHCS1_P1o;//IO1SET = AT_CHCS1_P1o;  //IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
//	IO1SET = AT_CHCS1_P1o;	I01SET = AT_CHCS1_P1o;	//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	DLY_3us();

//// begin transfer
	IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;	//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;
	IO1CLR = AT_CHCS1_P1o;//IO1CLR = AT_CHCS1_P1o;	//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;
//	IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;	//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;

	buff=comx;
	for(i=0;i<8;i++){
		IO0SET = AT_SSCLK_P0o;	IO0SET = AT_SSCLK_P0o;	//IO0SET = AT_SSCLK_P0o;	IO0SET = AT_SSCLK_P0o;	//; Bring SCK high
		IO0SET = AT_SSCLK_P0o;	//IO0SET = AT_SSCLK_P0o;	//IO0SET = AT_SSCLK_P0o;	IO0SET = AT_SSCLK_P0o;	//; Bring SCK high
//		IO0SET = AT_SSCLK_P0o;	IO0SET = AT_SSCLK_P0o;	//IO0SET = AT_SSCLK_P0o;	IO0SET = AT_SSCLK_P0o;	//; Bring SCK high

		if((buff&0x80)==0x80){		//// sending address, msb first
			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;
			IO0SET=AT_CHDIN_P0o;	//IO0SET=AT_CHDIN_P0o;
//			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;			
		}else{
			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;
			IO0CLR=AT_CHDIN_P0o;	//IO0CLR=AT_CHDIN_P0o;
//			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;
		}
		buff=buff<<1;

		IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//; Bring SCK low
		IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//; Bring SCK low
//		IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//; Bring SCK low
//		IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//; Bring SCK low			
//		IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//; Bring SCK low			
	}
	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Read_Sp1_Hd()");
	DLY_3us();	//pause a short time
//	TimeElapseStart();
	IRQDisable();

//// read 24bits data
	indata=0;
	for(i=0;i<12;i++){
		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
		IO0SET=AT_SSCLK_P0o; //IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
//		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
				
		indata=indata<<1;
		if((IO1PIN&AT_DOUT1_P1i)==AT_DOUT1_P1i){
			indata = indata | 0x00000001;
		}else{
			indata = indata & 0xfffffffe;
		}

		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
		IO0CLR=AT_SSCLK_P0o; //IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
	}
////
	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Read_Sp1_Hd()");
	DLY_3us();	//pause a short time
//	TimeElapseStart();
	IRQDisable();
////
	for(i=12;i<24;i++){
		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
		IO0SET=AT_SSCLK_P0o; //IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
//		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
				
		indata=indata<<1;
		if((IO1PIN&AT_DOUT1_P1i)==AT_DOUT1_P1i){
			indata = indata | 0x00000001;
		}else{
			indata = indata & 0xfffffffe;
		}

		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
		IO0CLR=AT_SSCLK_P0o; //IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
	}

//// treatment the negative signal
	if((indata & 0x800000) == 0x800000){
		indata=indata|0xff000000;		//expand the negative signal
	}
	
//// ending the process
	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;		//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	IO1SET = AT_CHCS1_P1o;//IO1SET = AT_CHCS1_P1o;		//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
//	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;		//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;

	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Read_Sp1_Hd()");
#endif

	return indata;
}

//////////////////////////////////////////////////////////////////////////
void Write_Sp1(uint8 comx,uint8 dataxh,uint16 dataxl)
{
#ifdef EN_U1_ON_LINE

uint8  i;
uint8  buff1;
uint32 buff2;

//	TimeElapseStart();
	IRQDisable();

//// start condition
	IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;
	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;
//	IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;	//IO0CLR = AT_SSCLK_P0o;	IO0CLR = AT_SSCLK_P0o;
						
	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;			//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	IO1SET = AT_CHCS1_P1o;//IO1SET = AT_CHCS1_P1o;			//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
//	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;			//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	DLY_3us();

//// begin transfer
	IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;		//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;		//=0;
	IO1CLR = AT_CHCS1_P1o;//IO1CLR = AT_CHCS1_P1o;		//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;		//=0;
//	IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;		//IO1CLR = AT_CHCS1_P1o;	IO1CLR = AT_CHCS1_P1o;		//=0;
				
	buff1  = comx|0x80; 				//set bit7=1;
	for(i=0;i<8;i++){
		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;		//=1;
		IO0SET=AT_SSCLK_P0o; //IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;		//=1;
//		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;		//=1;
				
		if((buff1 & 0x80) == 0x80){
			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;
			IO0SET=AT_CHDIN_P0o;	//IO0SET=AT_CHDIN_P0o;
//			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;
		}else{
			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;
			IO0CLR=AT_CHDIN_P0o;	//IO0CLR=AT_CHDIN_P0o;
//			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;			
		}
		
		buff1=buff1<<1;
		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
		IO0CLR=AT_SSCLK_P0o; //IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
	}
	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Read_Sp1_Hd()");
	DLY_3us();	//pause a short time
//	TimeElapseStart();
	IRQDisable();

//// write 24bits data
	buff2 = (((uint32)dataxh)<<16)+(uint32)dataxl;
	for(i=0;i<12;i++){
		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
		IO0SET=AT_SSCLK_P0o; //IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
//		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
				
		if((buff2 & 0x800000) == 0x800000){	//// sending address, msb first
			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;
			IO0SET=AT_CHDIN_P0o;	//IO0SET=AT_CHDIN_P0o;
//			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;			
		}else{
			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;
			IO0CLR=AT_CHDIN_P0o;	//IO0CLR=AT_CHDIN_P0o;
//			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;			
		}

		buff2=buff2<<1;
		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
		IO0CLR=AT_SSCLK_P0o; //IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
	}
////
	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Read_Sp1_Hd()");
	DLY_3us();	//pause a short time
//	TimeElapseStart();
	IRQDisable();
////
	for(i=12;i<24;i++){
		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
		IO0SET=AT_SSCLK_P0o; //IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
//		IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//IO0SET=AT_SSCLK_P0o; IO0SET=AT_SSCLK_P0o;	//=1;
				
		if((buff2 & 0x800000) == 0x800000){	//// sending address, msb first
			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;
			IO0SET=AT_CHDIN_P0o;	//IO0SET=AT_CHDIN_P0o;
//			IO0SET=AT_CHDIN_P0o;	IO0SET=AT_CHDIN_P0o;			
		}else{
			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;
			IO0CLR=AT_CHDIN_P0o;	//IO0CLR=AT_CHDIN_P0o;
//			IO0CLR=AT_CHDIN_P0o;	IO0CLR=AT_CHDIN_P0o;			
		}

		buff2=buff2<<1;
		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
		IO0CLR=AT_SSCLK_P0o; //IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
//		IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//IO0CLR=AT_SSCLK_P0o; IO0CLR=AT_SSCLK_P0o;	//=0;		
	}

//// ending the process
	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;	//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
	IO1SET = AT_CHCS1_P1o;//IO1SET = AT_CHCS1_P1o;	//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;
//	IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;	//IO1SET = AT_CHCS1_P1o;	IO1SET = AT_CHCS1_P1o;				

	IRQEnable();				// 使能IRQ中断
//	TimeElapseStop("Write_Sp1()");
#endif
}

///////////////////////////////////////////////////////////////////////////////
void DLY_3us(void)
{
uint8 i;
	for(i=0;i<80;i++);
}
//////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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