From 9bb88037ae08b3a1d1bcc155bfbe0665f3a899e2 Mon Sep 17 00:00:00 2001 From: QuakeGod <QuakeGod@sina.com> Date: 星期一, 17 十月 2022 03:20:54 +0800 Subject: [PATCH] Merge branch 'dev1' of file://hasee-k680e/GitBase/F030C8xx_KLink into dev1 --- Src/KBus.c | 269 ++++++++++++++++++++++++++--------------------------- 1 files changed, 134 insertions(+), 135 deletions(-) diff --git a/Src/KBus.c b/Src/KBus.c index ab4b3ff..cc34e0f 100644 --- a/Src/KBus.c +++ b/Src/KBus.c @@ -9,7 +9,7 @@ #include "string.h" #include "stm32f0xx.h" -unsigned char bMaster=0,bSlave=0,bRepeater=0;; +unsigned char bKBusMaster=0,bKBusSlave=0,bKBusRepeater=0;; unsigned char PacketBuf1[128]; unsigned char PacketBuf2[128]; @@ -56,136 +56,6 @@ k^=((unsigned char *)pData)[i]; } return k; -} - -int RepeaterFunc(int nChn) -{ - KMem.WY[0]=KMem.WX[0]; - if ((KMem.nRunCount &0x7f) == 88) - { - nCount2++; - ToggleRunLed(); -// int len1=sprintf(str1,"%d %d Cfg %02X Input %02X \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1); -// PutStr(str1,len1); - } - return 0; -} - -int MasterFunc(int nChn) -{ - uint32_t tick1=HAL_GetTick(); - uint32_t thisuS=GetuS(); - - int len1=0; - - if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1500u) - { - if (!MasterRecvOK) - { - TimeOutCount++; - Uart2Stat.TimeOutErr++; - ChnStats[nCurPollId].LostPackets++; - ChnStats[nCurPollId].CtnLstPkts++; - if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;} - if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts) - {ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;} - if (ChnStats[nCurPollId].CtnLstPkts>3) - { - ChnStats[nCurPollId].Stat=0; - KMem.ErrStat=200; - - {BufferIn[nCurPollId]=0;} - } - // LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7); - }else - { - ChnStats[nCurPollId].Stat=1; - - KMem.RunStat=100; - } - nCurPollId ++; - if (nCurPollId > nChilds) - { - CircleTime=thisuS-LastCircleStartTime; - LastCircleStartTime=thisuS; - nSeq++; - nCurPollId=1; - } -#if (BOARD_TYPE == 12) - if (KMRunStat.WorkMode==0) - { - // KMem.WX[0]= GetInput(); - // KMem.WY[1]=KMem.WX[0]&0xff; - // KMem.WY[2]=(KMem.WX[0]>>8)&0xff; - } - // BufferOut[1]=KMem.WY[1]; - // BufferOut[2]=KMem.WY[2]; -#else - if (KMRunStat.WorkMode==0) - { - KMem.WX[0]= GetInput(); - KMem.WY[1]=KMem.WX[0]&0xff; - KMem.WY[2]=(KMem.WX[0]>>8)&0xff; - } - BufferOut[1]=KMem.WY[1]; - BufferOut[2]=KMem.WY[2]; -#endif - - Datas[0]=BufferOut[nCurPollId]; - Datas[1]=BufferOut[nCurPollId+1];; - Datas[2]=ChnStats[nCurPollId].Stat; - Datas[3]=0; - Datas[4]=tick1&0xff; - Datas[5]=(tick1>>8)&0xff; - Datas[6]=(tick1>>16)&0xff; - Datas[7]=(tick1>>24)&0xff; - - SendTimeuS=thisuS; - len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas); - SendPacket(nChn, (pPacket)PacketBuf1, len1); - ChnStats[nCurPollId].SendPackets++; - ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS; - ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS; - PacketLength = len1; - SendTime=tick1; - - MasterRecved=0; - MasterRecvOK=0; - // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5); - //ToggleErrLed(); -// ToggleOut8(); - - } - - Clk3=SysTick->VAL; - // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4); - // HAL_Delay(1); - return 0; -} - -int SlaveFunc(int nChn) -{ - int ThisuS=GetuS(); - int thisRecvTime=RecvTimeuS; - if (SlaveRecved) - { - KMem.RunStat=8000; - SlaveRecved=0; - }else if ((ThisuS - thisRecvTime) >12000u) - { - KMem.ErrStat=8000; - KMem.SDD[17]=1; - KMem.SDD[18]=ThisuS; - KMem.SDD[19]=RecvTimeuS; - }else if ( ThisuS > (thisRecvTime + 12000u)) - { - KMem.ErrStat=8000; - KMem.SDD[17]=2; - KMem.SDD[18]=ThisuS; - KMem.SDD[19]=RecvTimeuS; - } - - return 0; } int MakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData ) @@ -431,7 +301,7 @@ DelayuS=ThisuS-SendTimeuS; if (DelayuS > MaxDelayuS) MaxDelayuS = DelayuS; -#if (BOARD_TYPE==12) +#if (BOARD_TYPE == 14) BufferIn[ChildId]=p1->data[0]; KMem.WXB[ChildId-1]=BufferIn[ChildId]; if (KMRunStat.WorkMode==0) { @@ -530,7 +400,7 @@ case cmdExChgData: BufferIn[0]=p1->data[0]; nSlaveTick=p1->data[4]+(p1->data[5]<<8);//+(p1->data[6]<<16)+(p1->data[7]<<24); -#if (BOARD_TYPE == 12) +#if (BOARD_TYPE == 14) // PutOutput(BufferIn[0]); //PutOutput(outputvalue); //memcpy(DispBuf,p1->data+2,8); @@ -582,7 +452,7 @@ { ThisuS=GetuS(); int Result=0; - if (bMaster) + if (bKBusMaster) { MasterRecved=1; Result=CheckPacket(nChn, p1, Len1); @@ -594,7 +464,7 @@ Result=MasterParsePacket(nChn, p1, Len1); return Result; } - if (bSlave) + if (bKBusSlave) { ChnStats[0].ClientRecvPkts++; Result=SlaveCheckPacket(nChn, p1, Len1); @@ -654,3 +524,132 @@ return S_OK; } +int KBusRepeaterFunc(int nChn) +{ + KMem.WY[0]=KMem.WX[0]; + if ((KMem.nRunCount &0x7f) == 88) + { + nCount2++; + ToggleRunLed(); +// int len1=sprintf(str1,"%d %d Cfg %02X Input %02X \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1); +// PutStr(str1,len1); + } + return 0; +} + +int KBusMasterFunc(int nChn) +{ + uint32_t tick1=HAL_GetTick(); + uint32_t thisuS=GetuS(); + + int len1=0; + + if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1000u) + { + if (!MasterRecvOK) + { + TimeOutCount++; + Uart2Stat.TimeOutErr++; + ChnStats[nCurPollId].LostPackets++; + ChnStats[nCurPollId].CtnLstPkts++; + if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;} + if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts) + {ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;} + if (ChnStats[nCurPollId].CtnLstPkts>3) + { + ChnStats[nCurPollId].Stat=0; + KMem.ErrStat=200; + + {BufferIn[nCurPollId]=0;} + } + // LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7); + }else + { + ChnStats[nCurPollId].Stat=1; + + KMem.RunStat=100; + } + nCurPollId ++; + if (nCurPollId > nChilds) + { + CircleTime=thisuS-LastCircleStartTime; + LastCircleStartTime=thisuS; + nSeq++; + nCurPollId=1; + } +#if (BOARD_TYPE == 14) + if (KMRunStat.WorkMode==0) + { + // KMem.WX[0]= GetInput(); + // KMem.WY[1]=KMem.WX[0]&0xff; + // KMem.WY[2]=(KMem.WX[0]>>8)&0xff; + } + // BufferOut[1]=KMem.WY[1]; + // BufferOut[2]=KMem.WY[2]; +#else + if (KMRunStat.WorkMode==0) + { + KMem.WX[0]= GetInput(); + KMem.WY[1]=KMem.WX[0]&0xff; + KMem.WY[2]=(KMem.WX[0]>>8)&0xff; + } + BufferOut[1]=KMem.WY[1]; + BufferOut[2]=KMem.WY[2]; +#endif + + Datas[0]=BufferOut[nCurPollId]; + Datas[1]=BufferOut[nCurPollId+1];; + Datas[2]=ChnStats[nCurPollId].Stat; + Datas[3]=0; + Datas[4]=tick1&0xff; + Datas[5]=(tick1>>8)&0xff; + Datas[6]=(tick1>>16)&0xff; + Datas[7]=(tick1>>24)&0xff; + + SendTimeuS=thisuS; + len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas); + SendPacket(nChn, (pPacket)PacketBuf1, len1); + ChnStats[nCurPollId].SendPackets++; + ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS; + ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS; +// PacketLength = len1; + SendTime=tick1; + + MasterRecved=0; + MasterRecvOK=0; + // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5); + //ToggleErrLed(); +// ToggleOut8(); + + } + +// Clk3=SysTick->VAL; + // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4); +// HAL_Delay(1); + return 0; +} + +int KBusSlaveFunc(int nChn) +{ + int ThisuS=GetuS(); + int thisRecvTime=RecvTimeuS; + if (SlaveRecved) + { + KMem.RunStat=8000; + SlaveRecved=0; + }else if ((ThisuS - thisRecvTime) >12000u) + { + KMem.ErrStat=8000; + KMem.SDD[17]=1; + KMem.SDD[18]=ThisuS; + KMem.SDD[19]=RecvTimeuS; + }else if ( ThisuS > (thisRecvTime + 12000u)) + { + KMem.ErrStat=8000; + KMem.SDD[17]=2; + KMem.SDD[18]=ThisuS; + KMem.SDD[19]=RecvTimeuS; + } + + return 0; +} -- Gitblit v1.9.1