首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uart串口接受如何给上位机回传数据

uart串口接受如何给上位机回传数据

请教版主,我想实现上下位机串口通讯,上位机向下位机发送数据,下位机可以接受到,能通过校验。我现在想要实现数据回传,就是上位机向下位机发送数据,下位机收到数据后,向上位机回程数据。不知道该怎么实现,如下局部程序段。我观察上位机接受寄存器,发现只能接收到打包数据的包头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编辑过]

版主帮忙看看呀
返回列表