st6215c/st6225c
31/105
6.6 中断 处理 程序
这 中断 程序 是 非常 类似的 至 一个 call pro-
cedure, 在 事实 这 用户 能 考虑 这 中断
作 一个 异步的 call 程序. 作 这个 是 一个
异步的 事件, 这 用户 不能 know 这
context 和 这 时间 在 这个 它 occurred. 作 一个 re-
sult, 这 用户 应当 保存 所有 数据 空间 寄存器
这个 将 是 使用 在里面 这 中断 routines.
这 下列的 列表 summarizes 这 中断 proce-
dure:
当 一个 中断 要求 occurs, 这 下列的
actions 是 执行 用 这 mcu automatically:
– 这 核心 switches 从 这 正常的 flags 至 这
中断 flags (或者 这 nmi flags).
– 这 pc 内容 是 贮存 在 这 顶 水平的 的 这
堆栈.
– 这 正常的 中断 线条 是 inhibited (nmi 安静的
起作用的).
– 这 内部的 获得 (如果 任何) 是 cleared.
– 这 有关联的 中断 vector 是 承载 在 这 pc.
当 一个 中断 要求 occurs, 这 下列的
actions 必须 是 执行 用 这 用户 软件:
– 用户 选择 寄存器 有 至 是 saved 在里面
这 中断 维护 routine (正常情况下 在 一个 软-
ware 堆栈).
– 这 源 的 这 中断 必须 是 决定
用 polling 这 中断 flags (如果 更多 比 一个
源 是 有关联的 和 这 一样 vector).
– 这 reti (返回 从 中断) 操作指南
必须 终止 这 中断 维护 routine.
之后 这 reti 操作指南 是 executed, 这 mcu re-
转变 至 这 主要的 routine.
提醒:
当 一个 maskable 中断 occurs 当
这 st6 核心 是 在 正常的 模式 和 在 这
执行 的 一个 “ldi ior, 00h” 操作指南 (disabling
所有 maskable 中断): 如果 这 中断要求 oc-
curs 在 这 第一 3 循环 的 这 “ldi” 操作指南
(这个 是 一个 4-循环 操作指南) 这 核心 将 转变
至 中断 模式 但是 这 flags cn 和 zn 将
不 转变 至 这 中断 一双 ci 和 zi.
6.6.1 中断 回馈 时间
这个 是 定义 作 这 时间 在 这 moment
当 这 程序 计数器 是 承载 和 这 在-
terrupt vector 和 当 这 程序 有 jump 至
这 中断 子例程 和 是 准备好 至 execute
这 代号. 它 取决于 在 当 这 中断 occurs
当 这 核心 是 处理 一个 操作指南.
图示 18. 中断 处理 流动 chart
表格 6. 中断 回馈 时间
一个 cpu 循环 是 13 外部 时钟 循环 因此 11
cpu 循环 = 11 x (13 /8m) = 17.875 µs 和 一个 8
mhz 外部 quartz.
最小 6 cpu 循环
最大 11 cpu 循环
操作指南
FETCH
操作指南
EXECUTE
操作指南
是
这 操作指南
一个 reti
?
使能
maskable 中断
选择
正常的 flags
“POP”
这 stacked pc
是 那里 一个
一个 中断 要求
和 中断 掩饰?
选择
中断 flags
推 这
pc 在 这 堆栈
加载 pc 从
中断 vector
使不能运转
maskable 中断
非
非
YES
是 这 核心
already 在
正常的 模式?
YES
非
YES
CLEAR
内部的 获得
*)
*)
如果 一个 获得 是 呈现 在 这 中断 源 线条
1