请教版主,我想实现上下位机串口通讯,上位机向下位机发送数据,下位机可以接受到,能通过校验。我现在想要实现数据回传,就是上位机向下位机发送数据,下位机收到数据后,向上位机回程数据。不知道该怎么实现,如下局部程序段。我观察上位机接受寄存器,发现只能接收到打包数据的包头0x55,然后就是一个0xb2,这个数据不知道是哪来的。我发送的数据包是(0x55,0x01,1,0,crc) 我发送的数据包结构应该是,我看应该是发送中断设置不对,但是不知道怎么搞,那位高手给我帮帮忙呀。谢谢先 struct TX_MODE //发送结构体,用于数据打包 { char soi; //包头 char command; //信号 char data_l8; //数据低8位 char data_h8; //数据高8位 char chksum; //校验位 }; sub_receive() {省略部分程序 switch (temp2) { case 0x01: IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, 0xfe); sub_stu_send(0x1,1); //发送数据打包函数 control=ALTERA_AVALON_UART_CONTROL_TRDY_MSK| ALTERA_AVALON_UART_CONTROL_TMT_MSK; IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, control); for(i=0;i<5;i++) { IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, ALTERA_AVALON_UART_STATUS_TRDY_MSK); IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, tx_mode.txbuf); IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, 0); }
break; } void uart_interrupts() //串口中断函数 { int a; int uart_status; uart_status= IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE); if (IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE)&ALTERA_AVALON_UART_STATUS_RRDY_MSK) { a=COM_DSP_data[COM_DSP_data_cp]=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE); if(++COM_DSP_data_cp>=9000) COM_DSP_data_cp=0; } sub_receive(); //数据接收解包校验函数 IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE,0);
} static void inituart(void) { alt_u32 control; control=ALTERA_AVALON_UART_CONTROL_RRDY_MSK| ALTERA_AVALON_UART_CONTROL_TRDY_MSK| ALTERA_AVALON_UART_CONTROL_TMT_MSK;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, control); alt_irq_register(UART_0_IRQ,NULL,uart_interrupts);// 中断注册 }
[此贴子已经被作者于2009-4-4 11:03:30编辑过] |