| 
 
新手入门 
 
	积分10金钱10 注册时间2020-8-27在线时间2 小时 | 
 
3金钱 
| 我用串口调试助手发送11个字节的信息,开发板只能收到6个或7个,但是最后一个字节又会收到 例如发送:A5 5A 11 83 22 33 44 55 66 77 88
 收到的是:A5 5A 11 83 22  88
 我的代码就是在正点原子的源代码上修改的,实在发现不了原因,请高手指点
 
 源代码如下:
 
 
 
 #include <stdio.h>
 #include "unistd.h"
 #include "system.h"
 #include "alt_types.h"
 #include "altera_avalon_uart_regs.h"
 #include "sys\alt_irq.h"
 #include "stddef.h"
 #include "priv/alt_legacy_irq.h"
 static alt_u8 txdata = 0;
 static alt_u8 rxdata = 0;
 static alt_u16 status;
 void IRQ_UART_Interrupts();             //中断初始化函数
 void IRQ_init();                        //中断服务子程序
 
 int main()
 {
 printf("Hello from Nios II!\n");
 IRQ_init();
 return 0;
 }
 
 void IRQ_init()
 {
 //清除状态寄存器
 IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE,0);
 //使能接受准备好中断,给控制寄存器相应位写1
 IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE,0X80);
 // 注册ISR
 alt_ic_isr_register(
 UART_IRQ_INTERRUPT_CONTROLLER_ID,  // 中断控制器标号,从system.h 复制
 UART_IRQ                        ,  // 硬件中断号,从system.h 复制
 IRQ_UART_Interrupts             ,  // 中断服务子函数
 0x0                             ,  // 指向与设备驱动实例相关的数据结构体
 0x0);                              // flags,保留未用
 }
 
 //UART中断服务函数
 void IRQ_UART_Interrupts()
 {while(1)
 {
 
 IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80 | 0x40);    //使能发送中断
 status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);      //读状态寄存器
 if(status & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
 {
 
 
 {
 
 
 
 rxdata=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
 printf("rxdata= %x %x\n", rxdata);
 IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE,0x0);//清接收寄存器
 
 IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE,0x00);
 }
 }
 }
 }
 
 
 
 | 
 |