FPGA串口部分程序,可以用片内ram,usleep()函数用于产生延时,连续发送n个数,最好加一小段延时,记得以前用c8051f的时候也有这个问题,往往得加一段延时,否则发10个数,可能只有2个或3个数。
总是看到很多得资料上全是用fopen等函数来做串口,很少见到这种直接对寄存器操作的东西,呵呵,就利用单片机的方式来使用吧。
#include <system.h>
#include <alt_types.h>
#include <altera_avalon_uart_regs.h>
void uart_send(unsigned char *p);
int alt_main()
{
alt_u32 uart_sta;
alt_u8 i;
unsigned char s[]="hello nios";
for(i=10;i>0;i--)
{
uart_sta=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if(uart_sta&ALTERA_AVALON_UART_STATUS_TRDY_MSK)
{
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,i);
usleep(1000);
}
}
uart_send(s);
while(1);
return 0;
}
void uart_send(unsigned char *p)
{
alt_u32 uart_sta;
while(*p)
{
uart_sta=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if(uart_sta&ALTERA_AVALON_UART_STATUS_TRDY_MSK)
{
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,*p);
usleep(1000);
}
p++;
}
}
呵呵,没有写注释,因为不知道怎么分行显示,大概说明下这段程序的功能吧,void uart_send(unsigned char *p)子程序是实现发送字符串的功能。前面的for()循环中的部分是用来发送数据,这里是发送10到1。
文章评论(0条评论)
登录后参与讨论