📄 interrupthandler.c
字号:
#include "Functions.h"
void
RTFCNDCL
SERCANS_ISR(PVOID pUnused)
{
USHORT usTimeout = 0;
USHORT usIntSrc;
USHORT usDrvNbr;
SHORT ret;
BOOL bret;
usIntSrc = (*(USHORT*)INT_SOURCE);
// RtPrintf("SERCANS_ISR usIntSrc=0x%08x\n",usIntSrc);
*(ULONG *)INT_ACK = 0;
switch(usIntSrc)
{
case 0x0100:
(*(USHORT*)NC_LIFECOUNTER) = (USHORT) (*(USHORT*)NC_LIFECOUNTER)++;
// RtPrintf("AT TIME 0x0100\n");
for (usDrvNbr = 1; usDrvNbr < 255; usDrvNbr++)
{
if (DriveExist[usDrvNbr] )
ReadCyclicData(usDrvNbr,
(T_CYC_DATA*)&(ipc_handles.CYCLE_DATA_AT[usDrvNbr-1]),
0x48);
//RtPrintf("SERCANS_ISR ipc_handles.CYCLE_DATA_AT[usDrvNbr]\n");
}
// synchronize_user_isr();//NC access time not using Y-6 starting time NC access
bret = RtReleaseSemaphore( ipc_handles.REAL_CNL, 1, NULL);
// if(usCount_NC_SERCOS_TAKT_SYNC_USER == 1)
// {
ret = RtWaitForSingleObject( ipc_handles.SOFT_SYNC, 1 );
// if(ret == WAIT_TIMEOUT)
// RtPrintf("WAIT_TIMEOUT\n");
for (usDrvNbr = 1; usDrvNbr < 255; usDrvNbr++)
{
if (DriveExist[usDrvNbr] )
WriteCyclicData(usDrvNbr,
(T_CYC_DATA*)&(ipc_handles.CYCLE_DATA_MDT[usDrvNbr-1]),
0x48);
}
// }
break;
case 0x0001:
break;
case 0x0004:
break;
}
while(((USHORT) *INT_SOURCE) && usTimeout < 5)
{
Sleep(4);
usTimeout++;
}
if (usTimeout >=5)
{
RtPrintf("usTimeout >=5\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -