nios ii串口通信

void uart_stm32_isr(void *context,alt_u32 id)//中断服务函数
{
    //i1=0;
  alt_u16 status9;
  do
  {
    status9 = IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);//等待发送完成
   }
  while (!(status9& ALTERA_AVALON_UART_STATUS_RRDY_MSK));
  
  read_temp[i2]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);//接收数据
  if (read_temp[0]==0xFF)
  {
    i2=i2+1;
  }
  //read_temp[0]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);//接收数据
  if (i2==5)
  {
    i2=0;
    stm32_flag_RF=1;//接收完一组,标志置为1
  }
    
  IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE, 0);//清除接收缓冲区
    
}



void uart_send(unsigned char data)//uart发送单个字节
{
    alt_u8 status;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);
    while(!(status&0x40))
        status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);//等待发送完成
    IOWR_ALTERA_AVALON_UART_TXDATA(UART_TTL_BASE,data);
}

void uart_send_n(unsigned char *ptr,unsigned char n)//uart发送多个字节
{
    for(;n>0;n++)
    {
        uart_send(*ptr);
        ptr++;
    }
}


void uart_stm32_init()//串口中断初始化
{
    i2=0;
    IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE,0x80);//接受中断使能
    IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE,0X00);//清状态标志   
    alt_u16 control11;    
    control11 =ALTERA_AVALON_UART_CONTROL_RRDY_MSK | ALTERA_AVALON_UART_CONTROL_E_MSK;
    IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE, control11);
    IOWR_ALTERA_AVALON_UART_DIVISOR(UART_422_BASE, 10416); 
    alt_irq_register(UART_TTL_IRQ,0,uart_stm32_isr);注册串口中断服务程序
}


void stm32_command_switch(void)//对读取到的数据进行处理
{   
    High=read_temp[1];
    Low=read_temp[2];
    
    Temp=(Low+High*256)/100;
    test1=read_temp[3];
    TEC_Flag=test1;
    
}

 

  • 2
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

kobesdu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值