1466_TC275_Lite_Kit串口例程串口配置分析

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com)

前面已经把使用串口输出hello world的例程调通了,接下来分析一下这个例程的代码实现。这个配置跟默认的配置多少有一点不同,但是变化只是在于一个PIN的修改,因此整体的分析不会有大的偏差。

这个是初始化的接口,后面就是61行有一个发送接口,看起来这两部分是跟这个逻辑实现最相关的部分。

继续往下,分析上面的这个接口。我看了一下代码,其实这个接口实现的就是两个功能:1,指定采用那个ASCLIN模块;2,提供一套默认的ASCLIN的配置参数。

这里有几个配置点需要注意:

1. 最开始的位置,351行用于指定使用哪一个ASCLIN模块。

2. 例程最初的意图其实是希望。使用loop back模式的,但是我修改的时候改成了不同的PIN,因此不再奏效。其实,默认情况下这个也是不奏效的。

3. 时钟源默认情况下是内核时钟。

4. 默认的模式就是串口,且波特率是115200。这里有一些其他的信息我之前是没注意过的,比如说串口是有大小端的。

5. ASCLIN支持的模式主要有:初始化模式、ASC模式、SPI模式、LIN模式。其中,SPI模式昨天看例子信息的时候就看到了,这个的确是让我多了一点见识。

再回到这个初始化的接口,从这里看,其实这个生成的配置还没有具体发挥作用。紧接着,在这里进行了一个波特率属性的修改。不过,这个修改其实也是115200,因此修改是没有什么本质作用的。而从这样的操作看,虽然在软件设计上省事儿了,但是软件初始化的效率其实不高。

我把这个波特率的设置代码给屏蔽掉,重新进行了编译烧写也成功输出了字符串,可以看得出来分析是正确的。

这样,把初始化中剩下的代码简单看了一下。从上面的代码分析看,这个例子其实是使用了中断的。例子中,收发事件都设置了一个中断。中断的服务类型,可以有4种,Core0、Core1、Core2以及DMA。按照我代码注释中的分析,其实这里只可能是Core,确切说是Core0。

继续往下,配置了串口需要的buffer信息以及PIN,最后让这些配置生效。配置生效的接口还没分析,想来应该是一些寄存器的操作。

操作中用到的内核ID的获取,采用了一个汇编实现的函数,看起来可能是纯C无法访问的特殊寄存器。

关于中断服务类型的分析。

从这部分信息看,这里的配置主要还是一些寄存器的实质写入实现。其中,关于时钟的处理比较特殊,这部分需要注意一下,可能在手册中能够找到比较合理的描述。

接下来的设置属性部分,好几个都是我们用户初始化设计中的指定设置信息。

配置PIN并且最终让时钟源生效。

禁用并且清除一系列的标注为,之后使能了一些标志位的状态报出功能,重置了收发的运行状态。

一般的buffer只是传输数据,有的buffer是带有时间戳的。

在buffer的设置上,尽量采用用户创建指定的方式来使用,否则会使用malloc来进行动态分配,不是很安全。

根据发送、接收以及错误等不同的状态进行服务请求的设定。

最后使能FIFO。

以上,就是这个初始化做的基本的操作流程。接下来,有几个实现的细节函数需要简单看看。

首先是这三组,其实是对应着上面的收、发、错误的请求相关的寄存器的获取。

然后是FIFO空间buffer的初始化。这种情况,一般是用在存储已经确认的情况下。同时,这里为了优化进行了一定的数据对齐。

而上面的这个,其实是没有存储确定的条件下进行相关的FIFO空间的初始化。其实是相比前面的操作多了一个存储分配的过程。在嵌入式的系统中,我觉得这种操作尽量不去用才好。

这个就是串口驱动的一个大概的初始化的过程分析,应该是这个MCU上比较简单的模块的例子。后面我不一定会分析每一个模块的实现代码,但是在刚开始的时候看一部分肯定会有助于我对这个MCU的设计进行深入的了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值