This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MCU-PLUS-SDK-AM243X: AM243X使用BKPT指令怎么进入相关监视中断

Part Number: MCU-PLUS-SDK-AM243X


代码中加入BKPT指令之后,希望运行到BKPT代码后能触发监视相关的异常中断,该怎么实现?

现已在相关手册中搜索到应该是设置DBGDSCR等相关寄存器就可触发Prefetch Abort exception,如下图。

因此我先设置DBGDSCR的MDBGen位置1,用以下代码设置: ,但是只要执行到写相关寄存器就会进入undefined异常或data_abort异常,没法解决,请问我要的效果要怎么实现?

  • 按照以下步骤进行操作:

    1. 在您的代码中插入BKPT指令。例如,您可以在需要进入监视中断的地方插入类似于"__asm("BKPT #0");"的代码。

    2. 确保您的调试环境已经配置好,可以连接到AM243X芯片。

    3. 使用支持AM243X的调试器,例如JTAG调试器,连接到AM243X芯片。

    4. 在调试器的调试软件中,设置断点或者监视点,以便在AM243X执行BKPT指令时暂停程序执行。

    5. 运行您的代码,当程序执行到插入的BKPT指令时,调试器会暂停程序执行,您可以在调试软件中查看相关寄存器状态、内存内容等信息,进行监视和调试操作。

  • 我现在不是要进行调试,我现在是想运行到BKPT指令的时候,能够进入Prefetch Abort Exception的异常中断中,请问要怎么配置DBGDSCR相关的寄存器启用这个中断响应?

  • 设置DBGDSCR寄存器的位0,该位用于控制是否启用异常中断响应

    在程序中插入BKPT指令,触发Prefetch Abort Exception异常中断

    运行程序,当程序执行到BKPT指令时,处理器将会响应该异常并进入相应的异常处理程序中断

  • 应该怎么设置DBGDSCR寄存器的位0?我用手册上的汇编语言写寄存器DBGDSCR,如图 ,从来没有写成功过,只要执行这个写寄存器DBGDSCR的汇编指令就会进入异常。

  • 您可以尝试使用以下汇编指令:

    MRS R0, DBGDSCR ; 将DBGDSCR寄存器的值读取到R0寄存器
    ORR R0, R0, #1 ; 将R0寄存器的最低位设置为1
    MSR DBGDSCR, R0 ; 将R0寄存器的值写入DBGDSCR寄存器

    释:将DBGDSCR寄存器的值读取到R0寄存器,再使用ORR指令将R0寄存器的最低位设置为1,最后将R0寄存器的值写入DBGDSCR寄存器

  • 如图, ,内嵌汇编会报错,该怎么解决?似乎不认识DBGDSCR

  • 可能是访问DBGDSCR寄存器需要访问权限吧

  • 所以要怎么有访问权限?

  • 1. 进入 Supervisor 模式:用汇编指令来切换到 Supervisor 模式。

    // 进入 Supervisor 模式
    CPS #0x13

    2. 设置相关寄存器:在 Supervisor 模式下,访问一些在 User 模式下不可访问的寄存器

    // 
    void setupDebugRegisters() {
    DBGDSCR |= (1 << 23); // 设置 MDBGen 位
    }