原创 FPGA uart输出

2007-6-22 01:40 1965 2 2 分类: FPGA/CPLD

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。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /4 下一条