【问题标题】:How to simulate Real Time Interrupt in 68HC11 THRSim11 simulator如何在 68HC11 THRSim11 模拟器中模拟实时中断
【发布时间】:2022-11-02 18:24:48
【问题描述】:

您如何在 68HC11 THRSim11 模拟器中模拟 RTI(实时中断)(参见http://www.hc11.demon.nl/thrsim11/thrsim11.htm)?以下程序适用于 68HC11 模块,但不适用于 THRSim11。这是一个测试程序,用于从模数转换器读取并使用 RTI 将结果显示到串行端口。我尝试了RTI中断向量00EB和FFF0。我的芯片是 68H711E9,内存映射如下。

我希望 THRSim11 能够模拟中断向量。在 CLI 之前运行“再次 BRA”时(启用中断)。它必须运行从 ADC 读取并显示到串行的子程序。它在我的带有水牛的 68HC711E9 评估板中完美运行


REGBS   EQU     $1000       ;start of registers
BAUD    EQU REGBS+$2B   ;sci baud reg
SCCR1   EQU REGBS+$2C   ;sci control1 reg
SCCR2   EQU REGBS+$2D   ;sci control2 reg
SCSR    EQU REGBS+$2E   ;sci status reg
SCDR    EQU REGBS+$2F   ;sci data reg
TMSK2   EQU REGBS+$24   ;Timer Interrupt Mask Register 2
TFLG2   EQU REGBS+$25   ;Timer Interrupt Flag Register 2
ADR3    EQU $1033       ;ADC address 3
OPTION  EQU     $1039       ;ADC enable
SCS     EQU     $2E     ;SCSR low bit
ADCTL   EQU     $1030       ;ADC setting
ADCT    EQU $30     ;ADC setting low bit
PACTL   EQU     $1026       ;Pulse Accumulator control


***************************************************************
* Main program starts here *
***************************************************************
    ORG $0110
*   ORG $E000
start   LDS #$01FF  ;set stack pointer
    JSR ONSCI   ;initialize serial port
    JSR t_init  ;initialize timer
    CLI     ;enable interrupts
again   BRA again

************************************************************
*   t_init - Initialize the RTI timer          
************************************************************
t_init  LDAA       #$01         ; set PTR1 and PTR0 to 0 and 1
        STAA       PACTL       ;which leads to an RTI rate of 8.19 ms
        LDAA       #$40
        STAA       TFLG2       ;clears RTIF flag (write 1 in it!)
        STAA       TMSK2      ;sets RTII to allow interruptssec
    RTS

************************************************************
*  ADC_SERIAL - timer overflow interrupt service routine
************************************************************
ADC_SERIAL  
        LDX     #REGBS
        LDAA    #%00010010
        STAA    ADCTL
        LDAB    #6
ADF00       DECB
        BNE     ADF00


        ldaa    ADR3          ; read ADC value 
            ldab    SCSR           ; read first Status
        staa    SCDR           ; save in TX Register
BUFFS       BRCLR SCS,X #$80  BUFFS
        
CLRFLG      LDAA       #$40
                STAA       TFLG2       ;clear RTIF
        RTI                ;return from ISR

************************************************************
*   ONSCI() - Initialize the SCI for 9600
*                 baud at 8 MHz 
************************************************************
ONSCI    LDAA #$30
         STAA BAUD        baud register
         LDAA #$00
         STAA SCCR1
         LDAA #$0C
         STAA SCCR2       enable

       LDAA     #%10011010             ; enable the ADC
       STAA     OPTION

       RTS



*   Interrupt Vectors for BUFALO monitor
*   ORG $FFF0        ;RTI vector for microcontroller
*
    ORG $00EB       ;Real Time Interrupt under Buffalo monitor
    JMP ADC_SERIAL    ;this instruction is executed every
*               time there is a timer overflow


【问题讨论】:

    标签: microcontroller


    【解决方案1】:

    大概你混淆了“向量表”和“跳转表”。 HC11 需要一个位于 $FFF0 的地址,而不是一条指令。

    相比之下,Buffalo 监控器期望的指令为 $00EB。

        ORG $FFF0        ;RTI vector for microcontroller
        FDB ADC_SERIAL
    
        ORG $FFFE        ;Reset vector for microcontroller
        FDB start
    

    正如您将注意到的,对于 $FFFE 处的复位向量也是如此。

    通过这些更改,它对我有用。请注意,模拟真的很慢*,取决于打开的视图的数量和类型。

    另一个注意事项:您发送转换结果的单个字节而无需进一步处理。模拟器的串行接收器视图将尝试将此字节解释为 ASCII 字符,并且仅当它失败时,才会以角度显示十进制数。您可能需要考虑将转换结果转换为人类可读的值。最简单的解决方案可能是十六进制表示。


    编辑:

    *) 模拟器需要比原始机器更快,具体取决于模拟的具体实现。在这种情况下,他们似乎使用了一种相当缓慢的方式。 documentation 对此有一些话。要获得一些速度,请关闭您不需要的任何视图,并使用您可以获得的最快的 PC。为了获得一些理解,想想如果用芯片的每个半导体模拟模拟电子设备,模拟会有多慢。甚至这只是一个模型,“真实”世界目前是从量子力学开始的。

    如果不采取进一步措施,您将无法使用 Buffalo 的跳转表条目,因为 Buffalo 监视器不包含在模拟器中。

    如果您想使用未经修改的固件版本,则至少需要添加 Buffalo 监视器的使用过的部分。如果您将监视器作为可由模拟器加载的文件,您可能希望在加载应用程序之前加载它。

    您至少可以自己提供跳转表,将跳转的适当地址放在向量中:

        ORG $FFF0        ;RTI vector for microcontroller
        FDB $00EB
    

    如果发送可打印字符的值,则 ASCII 解释的“问题”变得可见。将滑块放在前三分之一处,您会看到一些字母或数字或标点符号。为其他角色上下滑动最少。是的,终端可能很笨,这个也不例外。实际上它有点聪明,显示可打印字符而不是它们的 ASCII 值。此外,它至少知道 CR(回车,$0D,十进制 13)和 LF(换行,$0A,十进制 10)。您可能想编写一个发送“Hello, world”、CR、LF 的小测试程序。或者另一个将所有值从 $00 发送到 $FF 的实验。

    一个值的含义总是取决于它的解释。如果可能,此终端将值解释为 ASCII 字符。

    【讨论】:

    • 在真正的 HC11 中。相同的程序运行速度非常快,每秒有几十个样本。为什么在 THRSim1 下太慢(我也尝试过并通过 View 下的 Slider Port E 设置 ADC 输入)?另外,您如何在 THRSIM1 中使用 ORG $00EB 作为指令,因为我正在模拟的 Brainmaster 在 Buffalo 中使用了 00EB 中断,而不是 FFF0,我无法将其更改为 FFF0,所有跳转或子程序地址可能不再重合。谢谢。
    • 我认为我只是在 FFFO 中放置一个与 00BE 中的跳转地址相对应的地址。我认为这会奏效。串行接收器也输出 0 到 255,对应 ADC 中的 00 到 FF。我没有明白你的意思,接收器会将其解释为 ascii。我以为串口是哑终端。串口只输出您发送的内容。不是吗?
    • 我测试了我编写的将所有值从 $ff 发送到 $00 的程序。你说的对。它显示了以 126 及以下开头的字符。在 THRsim11 中,真正的 Hc11 毫秒运行也需要 15 分钟。请用拼写错误纠正您的句子:“您只能关闭不需要的任何视图,并使用您能获得的最快的 PC。”因为我不知道您所说的“您只能关闭”是什么意思。您的意思是如果我使用最快的计算机,它可以运行得更快吗? "
    • 看到小编辑,并且:是的,因为模拟器似乎运行得尽可能快,所以计算机的速度决定了模拟的速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多