新手入门
- 积分
- 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);
}
}
}
}
|
|