コード例 #1
0
void UART1_IRQHandler(void)
{
    while ((itid = UART_GetPendingITID(UART0)) != UART_ITID_None) {
        if (itid == UART_ITID_RxLineStatus) {
            tmp = UART_GetLineStatus(UART);
            if (tmp & UART_BI) { /* BREAK */
            } else if (tmp & (UART_OE | UART_PE | UART_FE)) {
                /* Overflow / Parity / Framing Error */
            }
            
            UART_Recv(UART0);
            continue;
        } else if ((itid == UART_ITID_RxDataAvailable) 
                || (itid == UART_ITID_CharacterTimeout))
        {
            tmp = UART_Recv(UART);
        } else if (itid == UART_ITID_TxEmpty) {
        } else if (itid == UART_ITID_ModemStatus) {
        } else {
            /* UART_ITID_CharacterTimeOut */
        }
        
        
    }
}
コード例 #2
0
/** @brief  Initialize a UART for communication.
  *
  * @param  [in]  uart     The UART to initialize
  * @param  [in]  baud     Baud rate to configure on the UART
  *
  * @return None.
  */
void init_uart(UART_Type *uart, uint32_t baud)
{
    uint32_t uart_divisor;
    uint32_t apb_clock;
    
    
    /* Determine the UART divisor for the given baud rate. */
    apb_clock = SystemCoreClock / SYSCON_GetAPBClockDivider();
    uart_divisor = ((apb_clock / 16) + (baud / 2)) / baud;

#if (LPC2XXX_MODEL == 2148) || (LPC2XXX_MODEL == 2138) || (LPC2XXX_MODEL == 2106) \
    || (LPC2XXX_MODEL == 2103)

    /* Configure IO pins & power on the given UART */
    
    if (uart == UART0) {
        /* Configure pins for UART0 use */
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_0_TXD0);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_1_RXD0);

        /* Power on UART0 */
        SYSCON_EnablePeriphPowerLines(SYSCON_PeriphPowerLine_UART0);
    } else if (uart == UART1) {
        /* Configure pins for UART1 use */
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_8_TXD1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_9_RXD1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_10_RTS1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_11_CTS1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_12_DSR1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_13_DTR1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_14_DCD1);
        PINSEL_SetPinConfig(PINSEL_PinConfig_0_15_RI1);

        /* Power on UART1 */
        SYSCON_EnablePeriphPowerLines(SYSCON_PeriphPowerLine_UART1);
    }

#else
#error No current definition set up for the given microcontroller model.
#endif

    /* Configure baud rate & terminal settings (given baud @ 8n2) */
    UART_SetDivisor(uart, uart_divisor);
    UART_SetWordLength(uart, UART_WordLength_8b);
    UART_SetStopBits(uart, UART_StopBits_2);
    UART_SetParity(UART, UART_Parity_No);
    
    /* Enable FIFOs (necessary) and flush them */
    UART_EnableFifos(UART);
    UART_FlushRxFifo(UART);
    UART_FlushTxFifo(UART);
    
    /* Enable transmitting on the UART */
    UART_EnableTx(UART);

    /* Clear the receive buffer register */
    UART_Recv(uart);
}
コード例 #3
0
/** @brief  Receive a character via UART
  *
  * @param  [in]  uart     The UART on which to receive the character
  *
  * @return The received character
  *
  * Blocks until the UART has a character available to read.
  */
uint8_t uart_getchar(UART_Type *uart)
{
    uint8_t c;
    
    
    /* Wait for a character to be ready */
    while ((UART_GetLineStatus(uart) & UART_LineStatus_RxData) == 0);
    
    /* Receive it */
    c = UART_Recv(uart);
    
    return c;
}
コード例 #4
0
ファイル: comm.c プロジェクト: chalot/360
int main(int argc, char **argv)
{
	int serial_fd = 0;

    UART_Init();

    char buf[]="hello world";
    char buf1[10];
    UART_Send(serial_fd, buf, 10);
    printf("\n");

    UART_Recv(serial_fd, buf1, 10);

    printf("uart receive %s\n", buf1);
    close(serial_fd);
    return 0;
}
コード例 #5
0
int main(int argc, char **argv)
{
    int fd = FALSE;
    int ret;
    char rcv_buf[512];
	char send_buf[512];
    int i;
    if(argc != 2){
	    printf("Usage: %s /dev/ttySn \n",argv[0]);
	    return FALSE;
    }
    fd = UART_Open(fd,argv[1]);
    if(FALSE == fd){
	    printf("open error\n");
	    exit(1);
    }
    ret  = UART_Init(fd,9600,0,8,1,'N');
    if (FALSE == fd){
	    printf("Set Port Error\n");
	    exit(1);
    }
    strcpy(send_buf,"ff0161\n");
    ret  = UART_Send(fd,send_buf,strlen(send_buf));
    if(FALSE == ret){
	    printf("write error!\n");
	    exit(1);
    }
    printf("command: %s\n",send_buf);
    memset(rcv_buf,0,sizeof(rcv_buf));
    for(i=0;;i++)
    {
	    ret = UART_Recv(fd, rcv_buf,512);
    	if( ret > 0){
	    	rcv_buf[ret]='\0';
	    	printf("%s",rcv_buf);
	    } else {
	    	printf("cannot receive data1\n");
            //break;
	    }
	  	if('\n' == rcv_buf[ret-1]) break;
    }
    UART_Close(fd);
    return 0;
}
コード例 #6
0
ファイル: rfid.c プロジェクト: andyhui/android
static int RFID_Response(int fd, void *infostruct, unsigned int blocktime,
		unsigned int *err) {
	int len = 0;
	unsigned char rcv_buf[1024];
	len = UART_Recv(fd, rcv_buf, blocktime, err);
	if (len == -1 || len == 's') {
		goto end;
	}
	if (rcv_buf[0] != 0xBB) {
		*err = ERR_CODE_FRAME_HEAD;
		len = -1;
		goto end;
	} else if (rcv_buf[len - 1] != 0x0A) {
		*err = ERR_CODE_FRAME_TAIL_2ND;
		len = -1;
		goto end;
	} else if (rcv_buf[len - 2] != 0x0D) {
		*err = ERR_CODE_FRAME_TAIL_1ST;
		len = -1;
		goto end;
	}
#ifdef DEBUG
	int i=0;
	printf("recv %d:",len);
	for(i=0; i<len; i++)
	{
		printf("%.2X ",rcv_buf[i]);
	}
	printf("\n");
#endif // DEBUG
	LOGD("type:%x", rcv_buf[1]);
	switch (rcv_buf[1]) {
	case 0x80:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x81:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x82:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x83:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x87:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x88:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x89:
		my_setstate((unsigned char*) infostruct, rcv_buf);
		break;
	case 0x8A:
		gethardware((prfid) infostruct, rcv_buf);
		break;
	case 0x8B:
		getfirmware((prfid) infostruct, rcv_buf);
		break;
	case 0x8C:
		gettxpower((prfid) infostruct, rcv_buf);
		break;
	case 0x8D:
		getradiostate((prfid) infostruct, rcv_buf);
		break;
	case 0x8E:
		getrflinkprofile((prfid) infostruct, rcv_buf);
		break;
	case 0x90:
		getcurrentantenna((prfid) infostruct, rcv_buf);
		break;
	case 0x91:
		gethzzone((prfid) infostruct, rcv_buf);
		break;
	case 0x92:
		getcurrenttemperature((prfid) infostruct, rcv_buf);
		break;
	case 0x93:
		getgpiostate((char *) infostruct, rcv_buf);
		break;
	case 0x94:
		getgen2((prfid) infostruct, rcv_buf);
		break;
	case 0x96:
		getepcsingle((pepc) infostruct, rcv_buf);
		break;
	case 0x97:
		getepcmulti((pepc) infostruct, rcv_buf);
		break;
	case 0x98:
		//my_setstate((unsigned char *) infostruct, rcv_buf);
		len = -8;
		break;
	case 0x99:
		getlabeldata((plabeldata) infostruct, rcv_buf);
		break;
	case 0x9A:
		my_setstate((unsigned char *) infostruct, rcv_buf);
		break;
	case 0x9B:
		my_setstate((unsigned char *) infostruct, rcv_buf);
		break;
	case 0x9C:
		my_setstate((unsigned char *) infostruct, rcv_buf);
		break;
	case 0x9D:
		my_setstate((unsigned char *) infostruct, rcv_buf);
		break;
	case 0x9E:
		getmlabertimer((unsigned short*) infostruct, rcv_buf);
		break;
	case 0x9F:
		my_setstate((unsigned char *) infostruct, rcv_buf);
		break;
	case 0xA0:
		getantandwaittime((unsigned short *) infostruct, rcv_buf);
		break;
	case 0xFF:
		geterrorinfo(err, rcv_buf);
		len = -1;
		break;
	default:
		*err = ERR_CODE_FRAME_CMD;
		len = -1;
		break;
	}
	end: return len;
}
コード例 #7
0
ファイル: nav.cpp プロジェクト: YufengYU/EwayRobot
int main(int argc, char **argv)
{
	ros::init(argc, argv, "nav");
	ros::NodeHandle n;
	//ros::Publisher chatter_pub = n.advertise<mini::naviLoc>("navmsg", 1);
	tf::TransformBroadcaster br;
	tf::Transform transform_v2c,transform_w2v;
	tf::Quaternion q(-sqrt(2)/2,0,0,sqrt(2)/2); //need calibration
	transform_v2c.setOrigin(tf::Vector3(-0.025,0.125,0.23)); //need calibration
	transform_v2c.setRotation(q);	
	transform_v2c = transform_v2c.inverse();

	int fd = -1;
	fd = UART_Open(fd,"/dev/ttyS4");
	UART_Init(fd,115200,0,8,1,'N');	

	int data_len = 10;
	char rcv_buf[100];
	//FILE* fp = fopen("/home/haha/catkin_ws/odom.txt","w");

	int ret;

	while (ros::ok())
	{
		mini::naviLoc msg;	
		struct timeval tv;	

		while(1)
		{
			//ROS_INFO(" ");
			ret = UART_Recv(fd, rcv_buf,1);
			//ROS_INFO("[%d]",ret);
			//usleep(10000);
			if(ret==1)
			{
				//ROS_INFO("[%02X]",rcv_buf[0]);
			}
			if(ret==1 && rcv_buf[0]==char(0xA2))
			{
				break;
			}
		}
		int counter = 1;
		while(counter<data_len)
		{
			//ROS_INFO(" ");
			ret = UART_Recv(fd, &rcv_buf[counter],1);
			//ROS_INFO("[%d]",ret);
			/*for(int i=0;i<ret;i++)
			{
				printf("%02X ",rcv_buf[i]);
			}
			printf("\n");*/
			if(ret==-1)
			{
				continue;
			}
			counter++;
		}
 		gettimeofday(&tv,0);
		if(rcv_buf[data_len-1]!=char(0x2A))
		{
			continue;
		}
		unsigned int timeStamp = tv.tv_sec%100000*1000+tv.tv_usec/1000;
		SerialData2Msg(timeStamp, rcv_buf, data_len, msg);
		
		ros::Time ros_time = ros::Time::now();
		transform_w2v.setOrigin(tf::Vector3(msg.x,msg.y,0.0)); 
		q.setRPY(0.0,0.0,msg.theta);
		transform_w2v.setRotation(q);
		transform_w2v = transform_w2v.inverse();
		
		br.sendTransform(tf::StampedTransform(transform_w2v, ros_time, "/base_frame","/odom_frame"));
		br.sendTransform(tf::StampedTransform(transform_v2c, ros_time, "/camera_rgb_optical_frame","/base_frame"));
    	//chatter_pub.publish(msg);
		ROS_INFO("[%d],[%f],[%f],[%f]",msg.timestamp,msg.x,msg.y,msg.theta);
		//fprintf(fp,"%d %f %f %f\n",msg.timestamp,msg.x,msg.y,msg.theta);
		
		//fflush(fp);
    	ros::spinOnce();
	}
	UART_Close(fd);
	//fclose(fp);
	return 0;
}
コード例 #8
0
ファイル: ser_pub.c プロジェクト: superlikex/openwrt-mqtt
int main(int argc, char *argv[])
{
	/******MQTT*******/
	MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
	int rc = 0;
	char buf[200];
	int buflen = sizeof(buf);
	int mysock = 0;
	MQTTString topicString = MQTTString_initializer;
	char* payload = "mypayload";
	int payloadlen = strlen(payload);
	int len = 0;
	char *host = "192.168.8.241";
	int port = 1883;

	/******UART*******/
	int fd = FALSE;
	int ret;
	char rcv_buf[512];
 	int i;
	if(argc < 2){
		printf("Usage: %s /dev/ttySn \n",argv[0]);
		return FALSE;
	}

	if (argc > 2)
		host = argv[2];

	if (argc > 3)
		port = atoi(argv[3]);
	
	fd = UART_Open(fd,argv[1]);
	if(FALSE == fd){
		printf("open error\n");
		exit(1);
	}
	ret  = UART_Init(fd,9600,0,8,1,'N');
	if (FALSE == fd){
		printf("Set Port Error\n");
		exit(1);
	}

	ret  = UART_Send(fd,"*IDN?\n",6);
	if(FALSE == ret){
		printf("write error!\n");
		exit(1);
	}
	printf("command: %s\n","*IDN?");
	memset(rcv_buf,0,sizeof(rcv_buf));

	/**************MQTT tansport*************/

	mysock = transport_open(host,port);
	if(mysock < 0)
		return mysock;

	printf("Sending to hostname %s port %d\n", host, port);

	data.clientID.cstring = "me";
	data.keepAliveInterval = 20;
	data.cleansession = 1;
	data.username.cstring = "testuser";
	data.password.cstring = "testpassword";
	data.MQTTVersion = 4;


	for(i=0;;i++)
	{
	   	ret = UART_Recv(fd, rcv_buf,512);	
		if(ret > 0)
		{
			rcv_buf[ret]='\0';
			printf("%s",rcv_buf);

			len = MQTTSerialize_connect((unsigned char *)buf, buflen, &data);
			topicString.cstring = "mytopic";
		
			len += MQTTSerialize_publish((unsigned char *)(buf + len), buflen - len, 0, 0, 0, 0, topicString, (unsigned char *)rcv_buf, ret+1);
			len += MQTTSerialize_disconnect((unsigned char *)(buf + len), buflen - len);
			rc = transport_sendPacketBuffer(mysock, buf, len);
			if (rc == len)
				printf("Successfully published\n");
			else
				printf("Publish failed\n");
		}
		else
		{
			printf("cannot receive data1\n");
			break;
		}
	}

exit:
	UART_Close(fd);
	transport_close(mysock);

	return 0;
}