RTC 只发送一次中断信号
Posted
技术标签:
【中文标题】RTC 只发送一次中断信号【英文标题】:The interrupt signal is transmitted only once by the RTC 【发布时间】:2021-07-29 15:08:07 【问题描述】:我对 RTC + CMOS(实时时钟)有一个小问题,更准确地说是摩托罗拉 MC146818A。 程序执行的任务是以等于 1s 的固定时间间隔显示字母“A”。所以我正确设置了寄存器A和寄存器B的位,事实是我截取的子程序只激活了一次,我不明白为什么。代码如下:
这是函数的模块:
_text SEGMENT PARA PUBLIC
farjmp 09C0h, _start
times db 0h
mount_rtc_subroutine PROC NEAR
push ax
push es
xor ax, ax
mov es, ax
;I mask the line of break n0 of the slave PIC
in al, 0A1h
or al, 01h
out 0A1h, al
;memorize in the IVT the SEG: OFF components of the
;first instruction of my service subroutine
mov WORD PTR es:[1C0h], _rtc_subroutine
mov WORD PTR es:[1C2h], 09C0h
mov al, 0Ah
out 70h, al
mov al, 2Fh
out 71h, al
mov al, 0Bh
out 70h, al
mov al, 42h
out 71h, al
;active the break line n0 of the slave PIC
in al, 0A1h
and al, 0FEh
out 0A1h, al
pop es
pop ax
ret
mount_rtc_subroutine ENDP
_rtc_subroutine:
push ax
push bx
mov bx, OFFSET times
cmp BYTE PTR [bx], 0h
jne _write
inc BYTE PTR [bx]
jmp _EOI
_write: mov ax, 0F41h
stosw
mov WORD PTR [bx], 0h
_EOI: mov al, 20h
out 0A0h, al
out 20h, al
pop bx
pop ax
iret
_text ENDS
主模块:
farjmp MACRO segm, off
db 0EAh
dw off
dw segm
ENDM
INCLUDE rtc_sub
_text SEGMENT PARA PUBLIC
_start:
mov ax, 09C0h
mov ds, ax
mov ss, ax
mov sp, 0FFFFh
mov ax, 0B800h
mov es, ax
call mount_rtc_subroutine
jmp $
_text ENDS
END _start
我没有发现任何问题,但确实存在。 你觉得问题出在哪里?
【问题讨论】:
This 可能会有所帮助,尤其是关于寄存器 C 的部分。 谢谢,现在一切正常,我不知道你必须读取 C 寄存器。 【参考方案1】:问题是在服务子程序结束时读取RTC的寄存器C失败,这样RTC就不允许发送任何隐蔽的中断信号,导致中断管理器没有被激活。
添加此说明:
mov al, 0Ch
out 70h, al
in al, 71h
【讨论】:
以上是关于RTC 只发送一次中断信号的主要内容,如果未能解决你的问题,请参考以下文章
stm32 开启接收中断 PC 发送两次 为啥串口只接收到一次
C语言中,用于设置中断、中断信号的函数都有哪些?怎么设置一个发送中断信号(自己定义的)的函数?