Exemple #1
0
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;
}
Exemple #2
0
static int vk321x_RegRead(uint_t nChl, uint_t nReg)
{

	nReg |= (nChl << 4);
	uart_Send(vk321x_port, &nReg, 1);
	return arch_UartGetChar(VK321X_COMID);
}
Exemple #3
0
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;
}
Exemple #4
0
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);
      }
}
Exemple #5
0
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;
}
Exemple #6
0
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
					}
				}
			}			
		}
	}
}
Exemple #7
0
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);
					}
			}
		}
	}
}