| | |
| | | |
| | | 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, |
| | |
| | | } |
| | | 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, |
| | |
| | | 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; |
| | |
| | | } |
| | | 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"); |
| | |
| | | // 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; |
| | | } |
| | | |
| | |
| | | logData(value); |
| | | } |
| | | } |
| | | #endif |
| | | #else |
| | | UNUSED(value); |
| | | #endif |
| | | } |
| | | } |
| | | |
| | |
| | | // SCB->ICSR=SCB_ICSR_PENDSVSET_Msk; //1<<SCB_ICSR_PENDSVSET_Pos; |
| | | // KLParsePacket(Uart1RecvBuf1,Uart1RecvBuf1DataLen); |
| | | // Uart1RecvBuf1DataLen=0; |
| | | TriggerPendSV(); |
| | | } |
| | | } |
| | | |
| | |
| | | #else |
| | | Uart2UnsetDE(); |
| | | #endif |
| | | Uart2Stat.bSendDone = 1; |
| | | TriggerPendSV(); |
| | | } |
| | | void Uart2RecvDone() |
| | | { |