From 7d8ba5df7d883c86c24aa38449c4a6dd126e920f Mon Sep 17 00:00:00 2001
From: QuakeGod <quakegod@sina.com>
Date: 星期二, 06 八月 2024 14:41:31 +0800
Subject: [PATCH] Radio_LLCC68 1.15, Stable version

---
 ComLib/Src/functions.c |   93 +++++++++++++++++++++++++++++-----------------
 1 files changed, 59 insertions(+), 34 deletions(-)

diff --git a/ComLib/Src/functions.c b/ComLib/Src/functions.c
index 64bc59e..72467c5 100644
--- a/ComLib/Src/functions.c
+++ b/ComLib/Src/functions.c
@@ -9,7 +9,7 @@
 #include "string.h"
 #include "stm32f0xx_hal.h"
 #if (BOARD_TYPE == 14)
-#include "fp0.h"
+#include "fpx.h"
 #endif
 extern __IO uint32_t uwTick;
 //#include "Myprotocol.h"
@@ -23,6 +23,22 @@
 //volatile unsigned int TotalRunTime=0; 	//鎬诲紑鏈烘椂闂�
 //volatile unsigned int PwrCount=0;				//寮�鏈烘鏁�
 unsigned short ClkuS;				//姣忎釜Clk鐨刵S鏁帮紝
+
+unsigned char SPI1RecvBuf[64]; 
+unsigned char SPI1SendBuf[64];
+
+volatile unsigned char bSPI1Recving=0;
+volatile unsigned char bSPI1RecvDone =0;
+
+volatile unsigned char nSPI1RecvPos =0;
+volatile unsigned char nSPI1RecvLenInBuf=0;
+
+volatile unsigned char nSPI1ToSendLen=0;
+volatile unsigned char nSPI1SentLen=0;
+
+volatile unsigned char bSPI1Sending=0;
+volatile unsigned char bSPI1SendDone=0;
+
 
 int InituS(int TickFreq1)
 {
@@ -57,10 +73,11 @@
 
 void logData(unsigned char d)
 {
-			KMem.WDB[128+KMem.WDT[123]] = d;
-			KMem.WDT[123]++; 	 if (KMem.WDT[123]>=100) {KMem.WDT[123]=81;}			
+			KMem.WDB[128+KMem.WDT[7]] = d;
+			KMem.WDT[7]++; 	 if (KMem.WDT[7]>=100) {KMem.WDT[7]=81;}			
 }
 
+/*
 const unsigned short crc16_table[256] = {
 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
@@ -132,7 +149,7 @@
 	}
 	return(crc);
 }
- 
+ */
 /* Table of CRC values for high-order byte */
 const uint8_t crctablehi[] = {
 	0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
@@ -175,7 +192,7 @@
 	0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
 	0x40
 };
- 
+ /*
 uint16_t crc16table(const uint8_t *ptr, uint16_t len)
 {
 	uint8_t crchi = 0xff;
@@ -189,7 +206,28 @@
 	}
 	return (crchi << 8 | crclo);
 }
+*/
+const uint16_t crctalbeabs[] = { 
+	0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 
+	0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 
+};
+
+uint16_t crc16tablefast(const uint8_t *ptr, uint16_t len) 
+{
+	uint16_t crc = 0xffff; 
+	uint16_t i;
+	uint8_t ch;
  
+	for (i = 0; i < len; i++) {
+		ch = *ptr++;
+		crc = crctalbeabs[(ch ^ crc) & 15] ^ (crc >> 4);
+		crc = crctalbeabs[((ch >> 4) ^ crc) & 15] ^ (crc >> 4);
+	} 
+	
+	return crc;
+}
+
+ /*
 void modbuscrc16test()
 {
 	printf("\n");
@@ -200,12 +238,12 @@
 //	printf(" modbus crc16tablefast test, expected value : 0xd825, calculate value : 0x%x\n", crc16tablefast(crc16_data, sizeof(crc16_data)));
 	printf(" modbus crc16bitbybit test, expected value : 0xd825, calculate value : 0x%x\n", crc16bitbybit(crc16_data, sizeof(crc16_data)));
 }
-
+*/
 int InitUartstat(stUartStat * pUartstat,void * pBufRx, int nSizeRx, void * pBufTx, int nSizeTx)
 {
 	memset(pUartstat,sizeof(stUartStat),0);
-	initQueue(&pUartstat->QRx,pBufRx,nSizeRx);
-	initQueue(&pUartstat->QTx,pBufTx,nSizeTx);
+	if (pBufRx) initQueue(&pUartstat->QRx,pBufRx,nSizeRx);
+	if (pBufTx) initQueue(&pUartstat->QTx,pBufTx,nSizeTx);
 	return 0;
 }
 
@@ -297,26 +335,6 @@
 	  SCB->ICSR=SCB_ICSR_PENDSVSET_Msk; //1<<SCB_ICSR_PENDSVSET_Pos;
 }
 
-void PendSvCallBack()
-{
-#if (BOARD_TYPE == 14)
-///*	
-		if (bSPI1RecvDone)
-		{
-			bSPI1RecvDone=0;
-			ParseFP0Pkg(SPI1RecvBuf,nSPI1RecvLenInBuf);
-		}
-//*/	
-#endif		
-	if (Uart2Stat.bPacketRecved)
-	{
-		KBusParsePacket(2, (pKBPacket)Uart2RecvBuf1, Uart2RecvBuf1DataLen);		
-		Uart2RecvBuf1DataLen=0;
-		Uart2Stat.bPacketRecved=0;
-		Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));		
-	}
-}
-
 void SPI1_IRQ_CallBack()
 {
 		uint8_t value;
@@ -360,7 +378,7 @@
 				 bSPI1SendDone=1;
 				 bSPI1Recving=1;
 				 nSPI1RecvPos=0;
-				 SetFP0DEPin_0();
+				 SetFPxDEPin_0();
 			 }
 			 else {
 				 value = SPI1SendBuf[nSPI1SentLen];
@@ -368,7 +386,9 @@
 				logData(value);
 			 }
 		 }
-#endif		 
+#else
+			UNUSED(value);
+#endif
 	 }	 
 }
 
@@ -390,6 +410,7 @@
 //	  SCB->ICSR=SCB_ICSR_PENDSVSET_Msk; //1<<SCB_ICSR_PENDSVSET_Pos;
 //		KLParsePacket(Uart1RecvBuf1,Uart1RecvBuf1DataLen);
 //		Uart1RecvBuf1DataLen=0;
+		TriggerPendSV();		
 	}
 }
 
@@ -400,6 +421,8 @@
 #else
 Uart2UnsetDE();
 #endif
+	Uart2Stat.bSendDone = 1;
+	TriggerPendSV();
 }
 void Uart2RecvDone()
 {
@@ -427,6 +450,7 @@
 //	LL_USART_EnableIT_TXE(USART1);   
 //	LL_USART_EnableIT_TC(USART1); 	
 	Uart1TriggerSendDMA();
+	Uart1Stat.SentPacket++;
 	return len1;
 }
 int PutStr2(char * str1, int len1)
@@ -436,6 +460,7 @@
 //	LL_USART_EnableIT_TXE(USART1);   
 //	LL_USART_EnableIT_TC(USART1); 	
 //	Uart2TriggerSendDMA();
+		Uart2Stat.SentPacket++;			
 	return len1;
 }
 
@@ -445,12 +470,12 @@
 		PutStr1((char *)pBuf,len1);
 //	PushIn(&Uart1Stat.QTx,p1,len1);
 //	Uart1TriggerSendDMA();
-		Uart1Stat.SentPacket++;		
+
 	}else if (nChn==2){
 		PutStr2((char *)pBuf,len1);	
 //	PushIn(&Uart2Stat.QTx,p1,len1);
 //	Uart2TriggerSendDMA();	
-		Uart2Stat.SentPacket++;		
+
 	}
 		return len1;
 }
@@ -653,7 +678,7 @@
 		case 13:
 						return Input165_R(16);
 		case 14:
-						return 0;	//FP0
+						return 0;	//FPx
 		case 15:
 						return Input165_R(16);
 		case 16:
@@ -748,7 +773,7 @@
 		case 13:
 					 return ReadConfig_5();
 		case 14:
-					 return (~(LL_GPIO_ReadInputPort(GPIOA)>>4))&0x0f;	//FP0
+					 return (~(LL_GPIO_ReadInputPort(GPIOA)>>4))&0x0f;	//FPx
 		case 15:
 		case 16:
 					 return ReadConfig_5();	//Wireless Master Slave 8 in 8 o

--
Gitblit v1.9.1