docs: 为所有代码源文件添加详细中文注释,并在设计文档中纠正GPIO物理引脚映射表
This commit is contained in:
@@ -1,17 +1,34 @@
|
||||
; 端口中断 0 / 2 的硬件中转绝对定位汇编 (A251)
|
||||
; 目的:Keil C251 编译器只支持 interrupt 0~31,
|
||||
; 而 STC32G 的端口中断硬件向量号为 37(Port0) 和 39(Port2),
|
||||
; 超出范围无法用 C 直接声明。
|
||||
; 本文件在绝对地址处放置 LJMP 指令,将硬件向量重定向到
|
||||
; Keil 可以生成的 13 号和 15 号中断服务函数入口。
|
||||
NAME ISR_JUMP
|
||||
; =========================================================================
|
||||
; STC32G 端口中断硬件中转绝对定位汇编模块 (A251 语法格式)
|
||||
; =========================================================================
|
||||
; 【技术原理分析】:
|
||||
; 1. Keil C251 编译器为了节省硬件资源,默认的 `interrupt` 关键字只支持 0 ~ 31 范围的软件中断向量号。
|
||||
; 2. 然而,STC32G 单片机拥有大量的扩展硬件外设,其 Port0 端口中断物理向量号为 37,Port2 端口中断物理向量号为 39,
|
||||
; 超出了编译器的直接定义范畴。如果直接在 C 语言中声明 `interrupt 37`,编译器会报错。
|
||||
; 3. 为此,本汇编模块采用“绝对地址跳转重定向”技术:
|
||||
; - 直接在硬件物理中断向量入口地址(Port0: 0x00012B, Port2: 0x00013B)处放置一条长跳转 `LJMP` 汇编指令。
|
||||
; - 将触发的物理中断强行重定向引导至 Keil C251 所能合法编译生成的较小编译向量入口地址(例如 13 号和 15 号中断服务程序入口)。
|
||||
; - 由此,我们在 C 语言中声明 `interrupt 13` 和 `interrupt 15`,就能够成功被硬件 Port0 和 Port2 端口中断触发调用。
|
||||
; =========================================================================
|
||||
|
||||
; 端口 0 中断 (向量 37, 硬件绝对地址 00012BH) 跳转到 13 号中断 (地址 00006BH)
|
||||
NAME ISR_JUMP ; 定义当前汇编模块的名字为 ISR_JUMP
|
||||
|
||||
; -------------------------------------------------------------------------
|
||||
; 端口 0 掉电唤醒中断跳转配置
|
||||
; -------------------------------------------------------------------------
|
||||
; 硬件 Port0 中断向量号 37 对应的绝对闪存入口地址为 0x00012B
|
||||
CSEG AT 00012BH
|
||||
; 当硬件触发 Port0 中断时,程序计数器 (PC) 定位到 00012BH,此处 LJMP 指令强行将 PC 指向 00006BH
|
||||
; 0x00006B 即为 C 语言声明的 `interrupt 13` 所对应的中断服务函数入口地址
|
||||
LJMP 00006BH
|
||||
|
||||
; 端口 2 中断 (向量 39, 硬件绝对地址 00013BH) 跳转到 15 号中断 (地址 00007BH)
|
||||
; -------------------------------------------------------------------------
|
||||
; 端口 2 掉电唤醒中断跳转配置
|
||||
; -------------------------------------------------------------------------
|
||||
; 硬件 Port2 中断向量号 39 对应的绝对闪存入口地址为 0x00013B
|
||||
CSEG AT 00013BH
|
||||
; 当硬件触发 Port2 中断时,程序计数器 (PC) 定位到 00013BH,此处 LJMP 指令强行将 PC 指向 00007BH
|
||||
; 0x00007B 即为 C 语言声明的 `interrupt 15` 所对应的中断服务函数入口地址
|
||||
LJMP 00007BH
|
||||
|
||||
END
|
||||
END ; 汇编文件结束标志
|
||||
|
||||
Reference in New Issue
Block a user