结合之前的串口实验(轮询方式)中断体系分析,我们来做下中断方式的串口接收实验。

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 后的字符。

最新文章

  1. 【转】高效Java编程工具集锦
  2. [转]解决a different object with the same identifier value was already associated with the session错误
  3. Tomcat系统部署启动问题分析一例[sudo 启动]
  4. 设计模式学习之观察者模式(Observer,行为型模式)(7)
  5. (转) Reinforcement Learning for Profit
  6. Navicat_Preminum
  7. POCO C++ lib开发环境构建
  8. Oracle锁表查询与解锁
  9. ListView中点击Item没有任何响应
  10. 在开发中使用Mockito进行测试
  11. BZOJ 3624: [Apio2008]免费道路 [生成树 并查集]
  12. idea调试代码跟踪到tomcat代码里面
  13. inotify监听文件夹的变动
  14. 在Html.ActionLink中运用二维判断语句
  15. 【oracle笔记1】基础知识大集锦:增删改,数据类型,用户操作,持续更新中···
  16. OC中自定义init方法
  17. java中return的作用
  18. Java分布式 一些概念理解
  19. UIThread
  20. java循环作业0912

热门文章

  1. PyCharm选择性忽略PEP8代码风格警告信息
  2. Knockout.js组件系统的详解之(一) - 组件的定义和注册
  3. ABP框架系列之三十一:(Localization-本地化)
  4. 更改h标签的字体粗细
  5. shell脚本学习-执行
  6. Go语言正则模块
  7. Python脱产8期 Day014 2019/4/28
  8. 201621123018《java程序设计》第14周作业总结
  9. 使用 mybatis-generator 自动生成 MyBatis 代码
  10. 用react + redux + router写一个todo