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

📄 debug365.c

📁 南京沁恒电子有限公司USB通用设备接口芯片资料
💻 C
📖 第 1 页 / 共 2 页
字号:
			MessageBox(hDialog,"请输入能存储双字的起始地址!","提示",MB_OK|MB_ICONSTOP);
			return;
		}
		//选中I/O端口读操作
		if (IsDlgButtonChecked(hDialog,IDC_RADIOREAD) == BST_CHECKED)	
		{
			if(iAddrLen)
			{
				if(IsDlgButtonChecked(hDialog,IDC_RADOFF) == BST_CHECKED)	//偏移地址
				{
					//从I/O端口读取一个双字
					if(CH365mReadIoDword( mIndex, &mBaseAddr->mCh365IoPort[mAddr], &oDword ))
					{
						UCHAR sByte[12];
						sprintf( sByte,"%02X%02X%02X%02X\x0", oDword & 0xFF, (oDword>>8) & 0xFF, (oDword>>16) & 0xFF, (oDword>>24) & 0xFF );
						SetDlgItemText( hDialog, IDC_EDTIODATA, sByte );	//输出值
					}
					else
						MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);
				}
				else if(IsDlgButtonChecked(hDialog,IDC_RADIME) == BST_CHECKED)	//直接地址
				{
					//从I/O端口读取一个双字
					if(CH365mReadIoDword( mIndex,(PVOID)mAddr, &oDword ))
					{
						UCHAR sByte[12];
						sprintf( sByte,"%02X%02X%02X%02X\x0", oDword & 0xFF, (oDword>>8) & 0xFF, (oDword>>16) & 0xFF, (oDword>>24) & 0xFF );
						SetDlgItemText( hDialog, IDC_EDTIODATA, sByte );	//输出值
					}
					else
						MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);
				}
			}
			else		//取地址
				MessageBox(hDialog,"请输入端口地址!","提示",MB_OK);
		}
		//选中I/O端口写操作
		else if(IsDlgButtonChecked(hDialog,IDC_RADIOWRITE) == BST_CHECKED)
		{
			num = GetDlgItemText(hDialog,IDC_EDTIODATA,cDword,9);	//取数据	
			if( iAddrLen &&	num)	//取地址
			{
				mVAR_TYPE mTypeDword;
				mTypeDword = mCharToVar(cDword,num,1);
				oDword = mTypeDword.lVar;
				if(IsDlgButtonChecked(hDialog,IDC_RADOFF) == BST_CHECKED)	//偏移地址
				{
					if(CH365mWriteIoDword(mIndex, &mBaseAddr->mCh365IoPort[mAddr], oDword))	//向I/O端口写一个双字
						MessageBox(hDialog,"写数据成功!","提示",MB_OK);
					else
						MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
				}
				else if(IsDlgButtonChecked(hDialog,IDC_RADIME) == BST_CHECKED)	//直接地址
				{
					if(CH365mWriteIoDword(mIndex, (PVOID)mAddr, oDword))	//向I/O端口写一个双字
						MessageBox(hDialog,"写数据成功!","提示",MB_OK);
					else
						MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
				}
			}
			else
				MessageBox(hDialog,"请输入数据!","提示",MB_OK);
		}									
	}
	else
	{
		MessageBox(hDialog,"请选择写入字节、字还是双字!","提示",MB_OK);
	}
}

//取I/O基址存储器基址和中断号
void AddrRefresh(HWND hDialog,int iIndex)
{
	ULONG oIntLine;
	//取中断号
//	mPCH365_IO_REG  mBase=NULL;
	if(CH365mGetIntLine(iIndex, &oIntLine)) {
		UCHAR sByte[12];
		sprintf( sByte,"%02X\x0", oIntLine );
		SetDlgItemText(hDialog,IDC_EDTINTLINE,sByte);
	}
	else
	{
		MessageBox(hDialog,"获得中断号失败!","提示",MB_OK|MB_ICONSTOP);
		SetDlgItemText(hDialog,IDC_EDTINTLINE,"");
	}
	//取I/O基址
	if(CH365mGetIoBaseAddr(iIndex, &mBaseAddr))
	{
		UCHAR sByte[12];
		sprintf( sByte,"%04X\x0", mBaseAddr );
		SetDlgItemText(hDialog,IDC_EDTBASEADDR,sByte);
	}
	else
	{
		MessageBox(hDialog,"获得I/O基址失败!","提示",MB_OK|MB_ICONSTOP);
		SetDlgItemText(hDialog,IDC_EDTBASEADDR,"");
	}
	//取存储器基址
	if(CH365GetMemBaseAddr( &mMemAddr ))
	{
		UCHAR sByte[12];
		sprintf( sByte,"%04X\x0", mMemAddr );
		SetDlgItemText(hDialog,IDC_EDTMEM,sByte);
	}
	else
	{
		MessageBox(hDialog,"获得寄存器基址失败!","提示",MB_OK|MB_ICONSTOP);
		SetDlgItemText(hDialog,IDC_EDTMEM,"");
	}

}

void mMemReadWrite(HWND hDialog)
{
	UCHAR iAddr[12];    //地址
	USHORT mAddr=0;
	USHORT MemAddrLen;
	mVAR_TYPE mVarType;
	MemAddrLen = GetDlgItemText(hDialog,IDC_EDTMEMADDR,iAddr,5);
	mIndex = GetDevIndex(hDialog);
	//取地址并转换
	mVarType = mCharToVar(iAddr,MemAddrLen,0);
	mAddr = mVarType.sVar;
	//选中对字节操作
	if(IsDlgButtonChecked(hDialog,IDC_RADMEMBYTE) == BST_CHECKED)   
	{
		UCHAR cByte;
		if (IsDlgButtonChecked(hDialog,IDC_RADMEMREAD) == BST_CHECKED)	//选中读操作
		{
			if(MemAddrLen)
			{
				if(CH365mReadMemByte( mIndex, &mMemAddr->mCh365MemPort[mAddr], &cByte ))   // 从存储器读取一个字节
				{
					UCHAR sByte[8];
					sprintf( sByte,"%02X\x0", cByte );
					SetDlgItemText(hDialog,IDC_EDTMEMDATA,sByte);
				}
				else
					MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);					
			}
			else
				MessageBox(hDialog,"请输入地址!","提示",MB_OK|MB_ICONSTOP);					
		}
		else if(IsDlgButtonChecked(hDialog,IDC_RADMEMWRITE) == BST_CHECKED)	//选中写操作
		{
			UCHAR oByte[8];
			UINT oByteLen;
			mVAR_TYPE mVarByte;
			oByteLen = GetDlgItemText(hDialog,IDC_EDTMEMDATA,oByte,3);
			mVarByte = mCharToVar(oByte,oByteLen,3);
			cByte = mVarByte.cVar;
			if(oByteLen && MemAddrLen)		//取数据
			{
				//oByte=0x00;
				if(CH365mWriteMemByte(mIndex,&mMemAddr->mCh365MemPort[mAddr],cByte))	//向配置空间写一个字节
					MessageBox(hDialog,"写数据成功!","提示",MB_OK);
				else
					MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
			}
			else
				MessageBox(hDialog,"请输入地址和数据!","提示",MB_OK);
		}
	}
	//选中对双字操作
	else if(IsDlgButtonChecked(hDialog,IDC_RADMEMDWORD) == BST_CHECKED)		
	{
		ULONG oDword = 0;
		char cDword[12];      //数据
		ULONG num;
		//检测是否是双字地址开头	
		if(!mCheckWord((PVOID)mAddr,8))
		{
			MessageBox(hDialog,"请输入能存储双字的起始地址","提示",MB_OK|MB_ICONSTOP);
			return;
		}
		if (IsDlgButtonChecked(hDialog,IDC_RADMEMREAD) == BST_CHECKED)	//选中读操作
		{
			if(CH365mReadMemDword( mIndex, &mMemAddr->mCh365MemPort[mAddr], &oDword ))	//从存储器读一个双字
			{
				UCHAR sByte[12];
				sprintf( sByte,"%02X%02X%02X%02X\x0", oDword & 0xFF, (oDword>>8) & 0xFF, (oDword>>16) & 0xFF, (oDword>>24) & 0xFF );
				SetDlgItemText(hDialog,IDC_EDTMEMDATA,sByte);		//输出读取的值
			}
			else
				MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);
		}
		else if(IsDlgButtonChecked(hDialog,IDC_RADMEMWRITE) == BST_CHECKED)	//选中写操作
		{
			mVAR_TYPE mVarDword;
			num = GetDlgItemText(hDialog,IDC_EDTMEMDATA,cDword,9);
			mVarDword = mCharToVar(cDword,num,1);
			oDword = mVarDword.lVar;
			if(num && MemAddrLen)	//取数据		
			{
				if(CH365mWriteMemDword(mIndex, &mMemAddr->mCh365MemPort[mAddr], oDword))	//向存储器写一个双字
					MessageBox(hDialog,"写数据成功!","提示",MB_OK);
				else
					MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
			}
			else
				MessageBox(hDialog,"请输入数据!","提示",MB_OK);
		}
	}
	else
		MessageBox(hDialog,"请选择写入字节还是双字!","提示",MB_OK);
}

void mConReadWrite(HWND hDialog)
{
	UCHAR iAddr[8];
	USHORT mAddr;
	UCHAR oByte[8];
	UCHAR cByte;
	UINT iAddrLen;
	mVAR_TYPE mVarType;
	mIndex = GetDevIndex(hDialog);
	iAddrLen = GetDlgItemText(hDialog,IDC_EDTCONBYTEADDR,iAddr,5);	//取地址
	mVarType = mCharToVar(iAddr,iAddrLen,0);
	mAddr = mVarType.sVar;
	if (IsDlgButtonChecked(hDialog,IDC_RADCONBYTEREAD) == BST_CHECKED)	//选中从配置空间读一个字节的操作
	{
		if(iAddrLen)		//取地址
		{
			if(CH365mReadConfig( mIndex,(PVOID) mAddr, &cByte ))	//从配置空间读一个字节
			{
				UCHAR sByte[8];
				sprintf( sByte,"%02X\x0", cByte );
				SetDlgItemText(hDialog,IDC_EDTCONBYTEDATA,sByte);
			}
			else
				MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);
		}
		else
			MessageBox(hDialog,"请输入地址!","提示",MB_OK);
	}
	else if(IsDlgButtonChecked(hDialog,IDC_RADCONBYTEWRITE) == BST_CHECKED)	//选中向配置空间写字节操作
	{
		UINT oByteLen = 0;
		mVAR_TYPE mVarByte;
		oByteLen = GetDlgItemText(hDialog,IDC_EDTCONBYTEDATA,oByte,3);	//取数据
		mVarByte = mCharToVar(oByte,oByteLen,3);
		cByte = mVarByte.cVar;
		if( iAddrLen && oByteLen )	
		{
			if(CH365mWriteConfig(mIndex, (PVOID)mAddr, cByte))	//向配置空间写一个字节
				MessageBox(hDialog,"写数据成功!","提示",MB_OK);
			else
				MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
		}
		else
			MessageBox(hDialog,"请输入地址和数据!","提示",MB_OK);
	}
}

//设置A15_A8
void mSetA15(HWND hDialog)
{
	UCHAR iA15_A8[12];
	UCHAR mA15_A8 = 0;
	UINT iA15_A8Len;
	int i;
	mIndex = GetDevIndex(hDialog);
	iA15_A8Len = GetDlgItemText(hDialog,IDC_EDTA15,iA15_A8,7);
	//控制输入长度为6
	if(iA15_A8Len != 0x06)
		MessageBox(hDialog,"请输入六位二进制!","提示",MB_OK|MB_ICONSTOP);
	
	//判断输入是否是二进制
	for(i=0;i<6;i++)		
		if( ( iA15_A8[i] != '0' ) && (iA15_A8[i] != '1') )
		{
			MessageBox(hDialog,"请输入二进制!","提示",MB_OK|MB_ICONSTOP);
			return;
		}
	//二进制转换成相应数值
	for(i=0;i<6;i++)
		mA15_A8 += (mCharToBcd(iA15_A8[i])<<(7-i));
	if(iA15_A8Len)
	{
		if(!CH365mSetA15_A8(mIndex,mA15_A8))
			MessageBox(hDialog,"","",MB_OK|MB_ICONSTOP);
	}
	else
	{
		MessageBox(hDialog,"请输入设置值!","提示",MB_OK);
	}
}

//I2C控制输入输出
void mSetI2C(HWND hDialog,int iIndex)
{
	UCHAR iAddr[8];
	USHORT iAddrLen;
	UCHAR dAddr[8];
	USHORT dAddrLen;
	UCHAR imAddr;			//设备地址
	UCHAR idAddr;			//数据单元地址
	UCHAR oByte[8];
	UCHAR cByte;
	mVAR_TYPE mVarTypei,mVarTyped;
	//判断时钟线是A15还是SYS_EX
	if(IsDlgButtonChecked(hDialog,IDC_RADI2CA15) == BST_CHECKED) {  // A15
		CH365mReadIoByte(iIndex,&mBaseAddr->mCh365IoCtrl,&cByte);  // 检查A15的状态,因为当A15为高电平时I2C不工作
		if ( cByte & 0x01 ) CH365mWriteIoByte(iIndex,&mBaseAddr->mCh365IoCtrl,(UCHAR)(cByte&0xfe));  // 设置A15=0,也可由数据线D0下拉电阻进行模式设置
		CH365mWriteIoByte(iIndex,&mBaseAddr->mCh365I2cCtrl,0);  // 选择A15作为SCL,默认值
	}
	else if(IsDlgButtonChecked(hDialog,IDC_RADI2CSYS) == BST_CHECKED)  // SYS_EX
		CH365mWriteIoByte(iIndex,&mBaseAddr->mCh365I2cCtrl,0x80);  // 选择SYS_EX作为SCL
	iAddrLen = GetDlgItemText(hDialog,IDC_EDTDEVADDR,iAddr,3);	//取设备地址
	dAddrLen = GetDlgItemText(hDialog,IDC_EDTDATADDR,dAddr,3) ;	//取数据单元地址
	mVarTypei = mCharToVar(iAddr,iAddrLen,3);
	imAddr = mVarTypei.cVar;
	mVarTyped = mCharToVar(dAddr,dAddrLen,3);
	idAddr = mVarTyped.cVar;
	if (IsDlgButtonChecked(hDialog,IDC_RADI2CREAD) == BST_CHECKED)	//读字节
	{
		if( iAddrLen && dAddrLen )	//取数据单元地址
		{
			if(CH365mReadI2C( iIndex, imAddr, idAddr, &cByte ))		//从I2C接口读一个字节
			{
				UCHAR sByte[8];
				sprintf( sByte,"%02X\x0", cByte );
				SetDlgItemText(hDialog,IDC_EDTI2CDATA,sByte);
			}
			else
				MessageBox(hDialog,"读数据失败!","提示",MB_OK|MB_ICONSTOP);
		}
		else
			MessageBox(hDialog,"请输入地址!","提示",MB_OK);
	}
	else if(IsDlgButtonChecked(hDialog,IDC_RADI2CWRITE) == BST_CHECKED)		//选中向I2C中写操作
	{
		UINT oByteLen;
		UCHAR cByte;
		mVAR_TYPE mVarByte;
		oByteLen = GetDlgItemText(hDialog,IDC_EDTI2CDATA,oByte,3);	//取待写入数据
		mVarByte = mCharToVar(oByte,oByteLen,0);
		cByte = mVarByte.cVar;
		if( iAddrLen && dAddrLen && oByteLen )	
		{
			if(CH365mWriteI2C(iIndex, imAddr, idAddr, cByte))		//向I2C中写入一个字节
				MessageBox(hDialog,"写数据成功!","提示",MB_OK);
			else
				MessageBox(hDialog,"写数据失败!","提示",MB_OK|MB_ICONSTOP);
		}
		else
			MessageBox(hDialog,"请输入地址和数据!","提示",MB_OK);
	}
}

//取设备号
int GetDevIndex(HWND hDialog)
{
	char index[8];
	int mIndexLen;
	mIndexLen = GetDlgItemText(hDialog,IDC_EDTINDEX,index,2);
	if(mIndexLen)
		mIndex = atoi(index); 
	else
		mIndex = 0;
	return mIndex;
}

//检测地址是否能存储字或双字
BOOL mCheckWord(PVOID mWord,int dFlag)
{
	if(dFlag == 4)
	{	
		if(((USHORT)mWord % 2)  == 0)
			return TRUE;
		else
			return FALSE;
	}
	else if(dFlag == 8)
	{
		if(((USHORT)mWord % 4)  == 0)
			return TRUE;
		else
			return FALSE;
	}
	return FALSE;
}

//初始化默认单选框
void mInitCheckBox(HWND hDialog)
{
	CheckDlgButton(hDialog,IDC_RADOFF,BST_CHECKED);         	//设置直接地址为默认选项
	CheckDlgButton(hDialog,IDC_RADIOBYTE,BST_CHECKED);    		//设置I/O 字节操作为默认选项
	CheckDlgButton(hDialog,IDC_RADIOREAD,BST_CHECKED); 		//设置I/O 写操作为默认选项
	CheckDlgButton(hDialog,IDC_RADCONBYTEREAD,BST_CHECKED);	//设置配置空间写字节为默认操作
	CheckDlgButton(hDialog,IDC_RADI2CREAD,BST_CHECKED);		//设置I2C中写操作为默认选项
	CheckDlgButton(hDialog,IDC_RADMEMBYTE,BST_CHECKED);			//设置存储器中对字节操作为默认选项
	CheckDlgButton(hDialog,IDC_RADMEMREAD,BST_CHECKED);		//设置存储器中写操作为默认选项
	CheckDlgButton(hDialog,IDC_RADI2CSYS,BST_CHECKED);			//设置SYS_EX为默认时钟线
}

//获得DLL版本号
void mShowDllVer(HWND hDialog)
{
	ULONG ver = 0;
	char vers[8];
	ver = CH365GetVersion();  
	_ltoa(ver,vers,16);
	if(!SetDlgItemText(hDialog,IDC_EDTDLLVER,vers))
		MessageBox(hDialog,"未能成功获得DLL版本号!","提示",MB_ICONSTOP | MB_OK);
}

//获得驱动版本号
void mShowDevVer(HWND hDialog)
{
	ULONG ver = 0;
	char vers[8];
	ver = CH365GetDrvVersion();  
	_ltoa(ver,vers,16);
	if(!SetDlgItemText(hDialog,IDC_EDTDEVVER,vers))
		MessageBox(hDialog,"未能成功获得驱动版本号!","提示",MB_ICONSTOP | MB_OK);
}

⌨️ 快捷键说明

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