264_S32K144的DMA串口发送模式

64 篇文章 167 订阅

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

    继续学习S32K144,这次的学习小结对象还是UART串口功能。除此之外,还会涉及到一个DMA的功能,使用的也就是芯片上的EDMA模块。

    SDK的配置比较简单,全都是图形化的操作。我选择了DMA的通道1用于接收,DMA的通道2用于发送。代码的调用上,需要注意必须增加DMA的初始化。

    配置成功后,依然使用之前的发送测试接口:

    测试效果如下:

    有意思的是看到了字符丢失现象,不知道是否是模式问题?切换成中断模式,确实是稳定下来了。

    看起来,我这个DMA的配置或许成功了,但是使用上似乎用得并不是很得当。这是我第一次使用DMA的模块,或许后面的还得继续研究下这个DMA应该如何正确使用。

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

S32K144是恩智浦(NXP)推出的一款32位汽车级微控制器(MCU),广泛应用于汽车和工业控制等领域。DMA(直接内存访问)是一种允许硬件子系统直接读写系统内存的技术,而无需CPU的介入,这可以大大提高数据传输的效率。UART(通用异步收发传输器)是一种常用的串行通信接口。 在S32K144中使用DMA进行UART空闲中断接收的例程,主要涉及到以下几个步骤: 1. 初始化UART模块,配置波特率、数据位、停止位和校验位等参数,确保UART通信正常工作。 2. 初始化DMA模块,设置传输数据的源地址、目标地址和传输大小等参数。源地址通常是UART接收缓冲区的地址,目标地址可以是用户自定义的RAM缓冲区地址。 3. 配置DMA触发源为UART空闲中断,当UART接收到数据并保持空闲状态一段时间后,触发DMA传输。 4. 配置DMA传输模式,根据需求选择合适的传输方向(从UART到内存)和传输类型(循环或单次传输)。 5. 开启DMA通道,并使能UART空闲中断。 6. 在DMA中断服务程序中添加适当的处理逻辑,比如处理接收到的数据,以及在数据处理完毕后重新启动DMA接收等。 下面是一个简化的代码示例框架,用于说明如何实现上述功能: ```c #include "S32K144.h" // UART初始化函数 void UART_Init(void) { // 这里填写初始化UART的代码,配置波特率等相关参数 } // DMA初始化函数 void DMA_Init(void) { // 这里填写初始化DMA的代码,配置源地址、目标地址和传输大小等参数 } // UART空闲中断处理函数 void UART1_RX_IDLE_ISR(void) { // 这里填写处理接收到的数据的代码 // 处理完毕后,可以停止当前DMA传输并重新启动新的DMA传输 } int main(void) { UART_Init(); // 初始化UART DMA_Init(); // 初始化DMA // 配置UART空闲中断,使能DMA接收 // 主循环 while(1) { // 用户代码 } } // 假设的DMA中断服务程序 void DMA채널中断服务程序(void) { // 中断处理代码,这里需要根据实际的DMA通道和中断向量填写 } ``` 注意:上述代码仅提供一个框架性的示例,实际编写时需要根据S32K144的具体寄存器配置和中断向量表来编写详细的初始化和中断处理函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值