继续使用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;
}