S5PV210 串口实验(中断方式)
结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验。
start.S
.global _start
.global IRQ_handle
_start:
/* 关 Watch Dog */
ldr r0, =0xE2700000
mov r1, #0
str r1, [r0]
/* 设置系统模式栈指针 */
ldr sp, =0x40000000
/* 开 IRQ 总中断开关 */
mov r0, #0x53
msr CPSR_cxsf, r0
/* 时钟初始化 */
bl clock_init
bl main
halt:
b halt
IRQ_handle:
/* 设置 IRQ 模式栈指针 */
ldr sp, =0xD0037F80
/* 设置 lr */
sub lr, lr, #4
stmfd sp!, {r0-r12, lr}
/* 另一个 ISR 的接口 */
bl irq_handler
/* 弹出保存的数据 */
ldmfd sp!, {r0-r12, pc}^
配置串口
#define UART_UBRDIV_VAL 34
#define UART_UDIVSLOT_VAL 0xDFDD
void uart_init()
{
/* 配置引脚为串口模式 */
GPA0CON = 0x22;
/* 不使用 FIFO */
UFCON0 = 0x00;
/* 无流控 */
UMCON0 = 0x00;
/* 配置数据格式 */
ULCON0 = 0x03;
/* 配置 UART */
UCON0 = 0x105;
/* 配置波特率 */
UBRDIV0 = UART_UBRDIV_VAL;
UDIVSLOT0 = UART_UDIVSLOT_VAL;
/* 开放 RX0 中断 */
UINTM = 0x0e;
}
配置中断
所调用的 API 可在之前串口实验文章中找到。
/* 初始化异常向量 */
system_initexception();
/* 配置 ISR 函数 */
intc_setvectaddr(NUM_UART0, handler);
/* 使能 NUM_UART0 中断 */
intc_enable(NUM_UART0);
中断服务程序
void handler(void)
{
/* 发送 +1 后的结果 */
putc(getc()+1);
/* 清 VICnADDR */
intc_clearvectaddr();
/* 清除中断标志 */
UINTP = 0x0f;
UINTSP = 0x0f;
}
运行结果
向 S5PV210 发送一个字符,会得到这个字符 +1 后的字符。
S5PV210 串口实验(中断方式)的更多相关文章
- Linux串口编程(中断方式和select方式)
Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串口交换数据的.在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可 ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
- 【AT91SAM3S】ADC中断方式采集数据
板子依旧是英倍特的EK-SAM3S.ADC部分的原理图如下: PB1是一个复用引脚,在这里被用作AD功能,对应芯片上的AD5.即,使用片内ADC的5通道测VR1上2号引脚的电压. 实验采用了SysTi ...
- .NET 串口通信中断接收,包含0X1A(作为EOF)
.NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...
- [ZigBee] 4、ZigBee基础实验——中断
前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式 ...
- zigbee学习之路(七):定时器3(中断方式)
一.前言 上次我们学习了了用定时器3进行查询方式来进行溢出判断,今天我们来换一种方式,用中断方式来检测和查询定时器3的溢出. 二.原理与分析 要使用定时器3,我们必须先要配置的是T3CTL,来把定时器 ...
- Stm32使用串口空闲中断,基于队列来接收不定长、不定时数据
串口持续地接收不定长.不定时的数据,把每一帧数据缓存下来且灵活地利用内存空间,下面提供一种方式供参考.原理是利用串口空闲中断和DMA,每当对方发来一帧完整的数据后,串口接收开始空闲,触发中断,在中断处 ...
- Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
实现的功能: 使用MDA方式把串口接受的数据在发送给串口(当然也可以做其他解析控制使用) 1. 先初始化 时钟使用外部的晶振配置系统时钟为48Mhz 2. 串口参数配置 3. 使能中断 4. 配置串 ...
- 在Linux下的中断方式读取按键驱动程序
// 在Linux下的中断方式读取按键驱动程序 //包含外部中断 休眠 加入poll机制 // 采用异步通知的方式 // 驱动程序发 ---> app接收 (通过kill_fasync()发送) ...
随机推荐
- (PMP)第9章-----项目资源管理
9.1 规划资源管理 数据表现: 1.层级型(高层次的角色):工作分解结构,组织分解结构,资源分解结构 2.责任分配矩阵:RAM,RACI,执行,负责,咨询,知情(只有一个A) 3.文本型(记录详细职 ...
- 第42章:MongoDB-集群--Sharding(分片)--单机的搭建
①配置服务器 在大型的集群中,建议配置3台配置服务器,就足够用了.启动配置服务器的方式: 1:先创建几个存放数据的文件夹,比如在前面的dbs下面创建confdb文件夹,然后在confdb下面创建con ...
- 学以致用二十四-----shell脚本中的列表及space
1.接触列表的概念是在pyhon中,殊不知在shell中也是有列表的. 如: 结果 列表的下标和python中一样,也是以0开头 注意 list 和list2 的区别 一个是用括号括起来,一个是用 ...
- esp32的GPIO操作
对于任何一款芯片,GPIO接口是其最基本的组成部分,也是一款芯片入门的最基本操作,下面论述下 关于esp32开发版的GPIO操作,本文中重点讲解下 关于如何创建eclipse工程,并通过eclipse ...
- 分享Pos函数(比FastPos还要快)
): Integer; ): Integer; 主要用途是搜索字符串中第n个Substr. 经过测试,这2个函数的速度比直接用Pos+Copy快好几倍(如果字符串够长,可能10几倍) 比Pos+Del ...
- 背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性
[源码下载] 背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性 作者 ...
- JavaScript使用浏览器内置XML解析器解析DOM对象
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...
- [Mac]如何让两个窗口各占半个屏幕
OS X中的拆分视图El Capitan或更高版本允许您使用两个应用程序填充Mac屏幕,而无需手动移动和调整窗口大小. 进入拆分视图 按住 窗口左上角的全屏按钮 . 当您按住按钮时,窗口会缩小,您可 ...
- Linux - 在当前系统内查找信息的方法
查找文本 使用grep命令 grep命令 - 示例 grep命令 - 正则表达式 grep命令 - 统计匹配字符串的行数 grep命令 - 搜索多个单词 结合正则表达式使用grep命令 注意:在搜索指 ...
- Python模块学习 - fabric
简介 fabric是一个Python的库,同时它也是一个命令行工具.使用fabric提供的命令行工具,可以很方便地执行应用部署和系统管理等操作. fabric依赖于paramiko进行ssh交互,fa ...