龙芯1B:串口通信例程

62b32d3c69024b00a54fa06e78d88189.png

文章目录


前言

一、串口通信?

1.串口通信的基础与分类

2.波特率

3.单工、半双工和全双工

4.起始位、数据位、奇偶校验位、停止位

5.TXD,RXD,GND

二、龙芯UART串口介绍

三、程序代码

总结


前言

串口可以在某种程度来说,是一个单片机向外界传输信息的可靠途径,指的就是经过编码后的信息在某一可靠传输介质上传输的过程。这一期咱们就来讲讲龙芯1B的串口通信吧。
在此谢谢各位的关注了,大家的关注是我更新的持久动力!


一、串口通信?

1.串口通信的基础与分类

串口通信出现的时间比较早,速率低,距离近,干扰并不明显,当时使用的就是电平信号。后续经过不同的修改逐渐成为了差分信号传输。

串口通信每次都是同时只能传输1个二进制位。

首先我们可以把串口通信的分为TTL电平和RS232电平!不管哪种电平在工业上,TTL适合近距离且干扰小的情况。RS232电平传输适合于一种干扰大并且距离也可以毕竟大的情况。但这两种方式是不能混为一谈,胡乱接线!

龙芯串口通信:

81757bbeee0141a997748b9b13393ab0.png

2.波特率

波特率,就是串口通信的速率,也就是每秒钟可以传输多少个二进制位。比如,每秒钟可以传输9600个二进制位,则波特率就是9600。(传输一个二进制位的时间是1/9600秒,也就是104us)

3.单工、半双工和全双工

单工:甲方向乙方收发暑假,甲发送,乙接收

半双工:甲乙双方分时间的收发数据,甲发送,乙接收或者乙发送,甲接收(双方不能同时进行)

全双工:甲乙双方同时收发数据,甲发送,乙接收或者乙发送,甲接收(双方可以同时进行)

4.起始位、数据位、奇偶校验位、停止位

            串口通信是一个周期接着下一个周期进行的,每个周期传输许多个二进制位。每个周期由:起始位+数据位+奇偶校验位+停止位组成。

            起始位:表示发送方要开始发送,起始位的定义是串口通信标准事先指定的,根据通信线上的电平变化而变化。

            数据位:是真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(可选的有6、7、8、9,一般都是选择8位数据位,因为一般通过串口发送的文字信息都是ASCII码编码,而ASCII码中一个字符刚好编码为8位)。

            校验位:是用来校验数据位防止数据位出错。

            停止位:是发送方用来表示本通信单元结束标志的。

5.TXD,RXD,GND

串口通信是有线通信,可以实现全双工通信。甲乙双方txd  rxd互相反接才行。

二、龙芯UART串口介绍

1B集成了 12 个UART核,通过APB总线与总线桥通信。UART控制器提供与MODEM 或其他外部设备串行通信的功能,例如与另外一台计算机,以RS232 为标准使用串行线路 进行通信。 该控制器在设计上能很好地兼容国际工业标准半导体设备 16550A。

UART 控制器有发送和接收模块(Transmitter and Receiver)、MODEM 模块、中断仲 裁模块(Interrupt Arbitrator)、访问寄存器模块(Register Access Control),这些模块之间 的关系见下图所示。主要模块功能及特征描述如下:

⚫ 发送和接收模块:负责处理数据帧的发送和接收。发送模块是将FIFO发送队列中 的数据按照设定的格式把并行数据转换为串行数据帧,并通过发送端口送出去。 接收模块则监视接收端信号,一旦出现有效开始位,就进行接收,并实现将接收 到的异步串行数据帧转换为并行数据,存入 FIFO 接收队列中,同时检查数据帧格 式是否有错。UART 的帧结构是通过行控制寄存器(LCR)设置的,发送和接收器 的状态被保存在行状态寄存器(LSR)中

⚫ MODEM 模块:MODEM 控制寄存器(MCR)控制输出信号 DTR 和 RTS 的状态。 MODEM 控制模块监视输入信号 DCD,CTS,DSR 和 RI 的线路状态,并将这些信号 的状态记录在 MODEM 状态寄存器(MSR)的相对应位中

⚫ 中断仲裁模块:当任何一种中断条件被满足,并且在中断使能寄存器(IER)中相 应位置 1,那么 UART 的中断请求信号 UAT_INT 被置为有效状态。为了减少和外 部软件的交互,UART 把中断分为四个级别,并且在中断标识寄存器(IIR)中标 识这些中断。四个级别的中断按优先级级别由高到低的排列顺序为,接收线路状 态中断;接收数据准备好中断;传送拥有寄存器为空中断;MODEM 状态中断

⚫ 访问寄存器模块:当 UART 模块被选中时,CPU 可通过读或写操作访问被地址线 选中的寄存器

三、程序代码

代码如下(示例):

uart.c:

#include "uart.h"
#include "ls1b.h"
#include "ls1b_gpio.h"
#include "ns16550.h"
#include "stdio.h"
#include "led.h"
#include "string.h"
#include "uart.h"
/*******************************************************************
 **函数名:UART5_set_IO
 **函数功能:初始化uart的IO口
 **形参:无
 **返回值:无
 **说明:   UART5_RX:60 -- 数据接收
            UART5_TX:61 -- 数据发送
 *******************************************************************/
void UART5_Config_Init(void)
{
    unsigned int BaudRate = 9600;
    ls1x_uart_init(devUART5,(void *)BaudRate); //初始化串口
    ls1x_uart_open(devUART5,NULL); //打开串口
}

int count;
char buff[256];

//测试
void UART5_Test(void)
{
    //接收数据
    count = ls1x_uart_read(devUART5,buff,256,NULL);
    if(count > 0)
    {
        //发送数据
        ls1x_uart_write(devUART5,buff,8,NULL);
    }
    
    delay_ms(500);

    if(strncmp(buff,"ABC",6) == 0) //比较前n个字节
    {
        LED_ON();// 开启LED
    }
    if(strncmp(buff,"ABD",6) == 0)
    {
        LED_OFF();//关闭LED
    }
        if(strncmp(buff,"ABE",6)==0)
    {
        LED_Wa();//流水灯
    }

}


联系我们

               vx ——>  buildupup     公众号   嵌入式up   如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!


你的气质里,藏着你跑过的步和你读过的书。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值