继续使用nios II 4里边的例子改一下nios部分
1、如果要使用自己的串口驱动,查询的方式。切记要关闭系统的串口驱动,否则可能出现不能收发的情况

2、添加串口头文件。还要使用基地址,要讲system.h头文件也添加进来。


3、快速找到UART0 base,看手册找到怎么关闭中断
IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE,0x0000); //关闭所有中断



4、清状态寄存器
IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE,0x0000); //清状态寄存器
清空接收寄存器
data=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
设置波特率,其中UART_0_BASE,ALT_CPU_CPU_FREQ在 system.h中
IOWR_ALTERA_AVALON_UART_DIVISOR(UART_0_BASE,ALT_CPU_CPU_FREQ/115200-1); //设置波特率
5、要发送数据,写数据到txdata,首先要读TRDY,为1才可以写。所以
status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE); //读状态寄存器
if(status&0x0040) //如果TRDY为1可以写入数据
6、程序如下,实现了不停的发送10个字节
#include "sys/alt_stdio.h"
#include "altera_avalon_uart_regs.h"
#include "system.h"
int main()
{
alt_u8 rxdata;
alt_u16 status;
alt_u8 i;
alt_u32 j;
alt_u8 txdata[10];
for(i=0;i<10;i++)
{txdata[i]=i;}
IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE,0x0000); //关闭所有中断
IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE,0x0000); //清状态寄存器
rxdata=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE); //清空rxdata寄存器
IOWR_ALTERA_AVALON_UART_DIVISOR(UART_0_BASE,ALT_CPU_CPU_FREQ/115200-1); //设置波特率
while (1)
{
if(i<10)
{
status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE); //读状态寄存器
if(status&0x0040) //如果TRDY为1可以写入数据
{
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, txdata[i]);
i++;
}
}
else
{
j=0;
while(j<50000)
{j++;}
i=0;
}
}
return 0;
}
使用NiosII自定义串口驱动实践指南
本文档详细介绍了如何在NiosII系统中关闭默认串口驱动并实现自定义串口驱动。首先,需要关闭系统串口驱动以避免冲突;接着,添加串口头文件和系统头文件,通过基地址操作寄存器来配置和控制串口。重点讲述了关闭中断、清空状态和接收寄存器、设置波特率的步骤。然后,程序演示了如何在确保TRDY为1的情况下发送数据,实现连续发送10个字节的循环。这是一个实用的嵌入式系统串口驱动编程实例。
2383

被折叠的 条评论
为什么被折叠?



