📄 debug365.c
字号:
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 + -