TQ2440开发板学习纪实(7)--- 基于中断的UART串口接收

2024-01-13 23:48

本文主要是介绍TQ2440开发板学习纪实(7)--- 基于中断的UART串口接收,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UART0的发送、接收、错误分别产生不同的中断,可以分别控制。本文仅对UART0的接收采用中断方式,发送仍然采用轮训方式。这样有个很大的用处,那就是程序陷入死循环是,可以通过UART0发送给ARM一个信号,来终止程序的运行。

关键代码片段:

1 取消相关中断屏蔽位

/* unmask interrupt for UART0 */rINTMSK &= ~(1<<28);rINTSUBMSK &= ~(1<<0);

2 IRQ处理函数里增加28号中断

void c_irq_handler(unsigned int cpsr)
{puts("irq\n");int offset = rINTOFFSET; /* the ID of current IRQ *//* handle */switch (offset) {case 0:key_on_press(4);break;case 1:key_on_press(1);break;case 2:key_on_press(3);break;case 3:break;case 4:key_on_press(2);break;case 28:    /* UART0 */uart_on_irq();break;default:on_unkown_irq();break;}

3 在uart_on_irq函数里处理中断

/* be called automatically when recv a byte */
static void uart_on_recv_byte(int byte)
{static int flag = 0;flag ? led_on(4) : led_off(4);flag = !flag;
}/* IRQ handler */
void uart_on_irq()
{if(rSUBSRCPND & 1) {    /* recv */int byte = rURXH0;uart_on_recv_byte(byte);rSUBSRCPND |= 1;}if(rSUBSRCPND & (1<<1)){ /* send */rSUBSRCPND |= 1<<1;}if(rSUBSRCPND & (1<<2)) { /* err */rSUBSRCPND |= 1<<2;}rSRCPND |= 1<<28;rINTPND |= 1<<28;
}

其效果是,收到一个字节收改变LED1的亮灭。这样当连续收到数据时,LED1就会根据接收速度闪烁。

这篇关于TQ2440开发板学习纪实(7)--- 基于中断的UART串口接收的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603206

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示