sys_res vk321x_UartSend(uint_t nChl, const void *pData, uint_t nLen) { int nSR; uint_t i, n; const uint8_t *p = (const uint8_t *)pData; vk321x_Lock(); for (; nLen; nLen -= n, p += n) { //wait tx fifo empty for (i = 600 / OS_TICK_MS; i; i--) { if ((nSR = vk321x_RegRead(nChl, VK321X_SSR)) == -1) { vk321x_Unlock(); return SYS_R_TMO; } if (nSR & BITMASK(2)) break; os_thd_Slp1Tick(); } if (i == 0) break; n = MIN(nLen, 16); nSR = 0xC0 | (nChl << 4) | (n - 1); uart_Send(vk321x_port, &nSR, 1); uart_Send(vk321x_port, p, n); } vk321x_Unlock(); if (nLen) return SYS_R_ERR; return SYS_R_OK; }
static int vk321x_RegRead(uint_t nChl, uint_t nReg) { nReg |= (nChl << 4); uart_Send(vk321x_port, &nReg, 1); return arch_UartGetChar(VK321X_COMID); }
static sys_res vk321x_RegWrite(uint_t nChl, uint_t nReg, uint_t nData) { nReg |= ((nData << 8) | 0x80 | (nChl << 4)); uart_Send(vk321x_port, &nReg, 2); return SYS_R_OK; }
void BitButton12OnClick(tWidget *pWidget) { //--- Close the existing handle --- if(hOpen>=0) { uart_Close(hOpen); hOpen = -1; } //--- Establish a new handle --- if(hOpen<0) { hOpen = uart_Open("COM1,9600,N,8,1"); } //--- If success, display current COM Port settings on screen --- if(hOpen>=0) { LabelTextSet(&Label8, "COM1,9600,N,8,1"); uart_SetTimeOut(hOpen, 300); } if(hOpen>=0) { BOOL ret; char Buffer[1000]; //char buf[]="AA 55 04 01 03 19 20"; //char *test = strtok(buf, " "); unsigned char buf[]={0xAA, 0x55, 0x04, 0x01, 0x03, 0x19, 0x20}; //int str_len = strlen(buf); char *ends=(char*)buf; ends[7]='\0'; /* for(int i=0;i<str_len;i++) { if(buf[i]!=' ') { Buffer[i] = strtol(buf[i], &ends, 16); } } Buffer[str_len]=""; */ //LabelTextSet(&Label8, (char*)10); //for(int nBytes=0;nBytes<str_len;nBytes++) //Buffer[nBytes] = strtol(test[nBytes], &ends, 16); //char* buf="p"; //ByteToChar(Buffer, buf, 7); //char *s = "70", *ends; //char c = (char)strtol(s, &ends, 16); ret = uart_Send(hOpen, ends); } }
static int vk321x_RegRead(uint_t nChl, uint_t nReg) { uint_t i; int res = -1; buf b = {0}; nReg |= (nChl << 4); for (i = VK321X_TIMEOUT / 200; i; i--) { if (uart_Send(vk321x_port, &nReg, 1) == SYS_R_OK) { if (uart_RecData(vk321x_port, b, 200) == SYS_R_OK) { res = b->p[0]; buf_Release(b); break; } } } return res; }
static void _vk321x_ItHandler() { p_dev_uart p; int res; uint_t i, nLen, nGIR, nReg; while(1) { if ((res = vk321x_RegRead(0, VK321X_GIR)) == -1) return; nGIR = res; if ((nGIR & 0x0F) == 0) break; for (i = 0; i < ARR_SIZE(vk321x_uart_dev); i++) { p = vk321x_uart_dev[i]; if (nGIR & BITMASK(p->def->id)) { while (1) { //Rx Fifo Not Empty if ((res = vk321x_RegRead(p->def->id, VK321X_SSR)) == -1) return; if (res & BITMASK(0)) break; //Get rx fifo num if ((res = vk321x_RegRead(p->def->id, VK321X_SFSR)) == -1) return; nLen = (res - 1) & 0x0F; nReg = 0x40 | (p->def->id << 4) | nLen++; uart_Send(vk321x_port, &nReg, 1); for (; nLen; nLen--) { res = arch_UartGetChar(VK321X_COMID); #if IO_BUF_TYPE == BUF_T_BUFFER buf_Push(p->bufrx, &res, 1); #else dque_Push(dqueue, p->parent->id | UART_DQUE_RX_CHL, &res, 1); #endif } } } } } }
static void _vk321x_ItHandler() { p_dev_uart pUart; p_uart_def pDef; int res; uint_t i, nLen, nGIR, nReg; buf b = {0}; if ((res = vk321x_RegRead(0, VK321X_GIR)) == -1) return; nGIR = res; for (pDef = tbl_bspUartDef, i = 0; pDef < ARR_ENDADR(tbl_bspUartDef); pDef++, i++) { if (pDef->type != UART_T_VK321X) continue; pUart = uart_Dev(i); if (nGIR & BITMASK(pDef->id)) { while (1) { //Rx Fifo Not Empty if ((res = vk321x_RegRead(pDef->id, VK321X_SSR)) == -1) return; if (res & BITMASK(0)) break; //Get rx fifo num if ((res = vk321x_RegRead(pDef->id, VK321X_SFSR)) == -1) return; nLen = (res - 1) & 0x0F; nReg = 0x40 | (pDef->id << 4) | nLen; if (uart_Send(vk321x_port, &nReg, 1) == SYS_R_OK) if (uart_RecLength(vk321x_port, b, nLen + 1, VK321X_TIMEOUT) == SYS_R_OK) { #if IO_BUF_TYPE == BUF_T_BUFFER buf_Push(pUart->bufrx, b->p, nLen + 1); #else dque_Push(dqueue, pUart->parent->id | UART_DQUE_RX_CHL, b->p, nLen + 1); #endif buf_Release(b); } } } } }