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.

[参考译文] TMS570LC4357:在重新配置 MPU 区域时导致错误

Guru**** 2473260 points
Other Parts Discussed in Thread: TMS570LC4357

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1026423/tms570lc4357-causing-errors-on-re-configuring-the-mpu-regions

器件型号:TMS570LC4357

您好!

在 TMS570LC4357上、加电时、我们将根据存储器要求配置 PLL 和 MPU 区域、并且我们能够成功配置它们。 但是、当我们从引导模式跳转到应用程序时、我们必须根据应用程序要求重新配置 MPU。

下面是引导中的初始化序列:

  1. 内核寄存器初始化
  2. 初始化 堆栈指针
  3. 初始化 L2 RAM
  4. 系统初始化
  5. 配置 IRQ 偏移
  6. 初始化  VIM 表
  7. 初始化  ESM 组1
  8. 系统时钟初始化
  9. MPU 初始化    

下面是用于配置 MPU 区的示例代码片段:

mpuInit_
;禁用 MPU
MRC P15、#0、r0、c1、c0、 0
BIC r0、r0、#1
DSB
MCR P15、#0、r0、c1、c0、 0
ISB
;禁用背景区域
MRC P15、#0、r0、c1、c0、 0
BIC r0、r0、#0x20000
MCR P15、#0、r0、c1、c0、 0
;设置区域1
MOV r0、#0
MCR P15、#0、r0、C6、C2、 0
LDR r0、r1Base
MCR P15、#0、r0、C6、C1、 0
MOV r0、#0x0008
ORR r0、r0、#0x1000
MCR P15、#0、r0、C6、C1、 4.
movw r0、#((1 << 15)+(1 << 14)+(1 << 13)+(1 << 12)+(1 << 11)+(1 << 10)+(1 << 9)+(1 << 8)+(0x1F << 1)+(1)))
MCR P15、#0、r0、C6、C1、 2

启动应用程序时、会遵循类似的启动初始化序列。 引导能够成功配置 MPU 并启动应用程序、但是、当应用程序开始初始化 MPU 时、当禁用 MPU 时执行'dsb'指令时、我们会收到异常。

在初始化 MPU 时、请告诉我是否缺少任何要求。

谢谢、此致、

Parth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    初始化顺序正确。 是数据中止还是预取中止? 请参阅此页面以调试例外情况:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/FAQ/FAQ.html#troubleshooting-abort-exceptions

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、

    感谢您的回复。

    在通过应用程序重新初始化 MPU 时、我们会收到数据中止异常。

    谢谢、

    Parth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Parth、

    我进行了测试:

    1.启用 MPU

    2.禁用 MPU

    3.重新使能 MPU

    它工作正常。 我没有看到任何问题。

    仅特权模式允许存储器区域控制读取和写入访问。 您的应用程序是否处于用户模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、

    我还调试了应用程序代码、在获得异常之前、应用程序处于"系统模式"。 执行"db"指令后、我将获得数据中止异常。 请参阅随附的剪刀以供您参考:

             

      

    请提供您的回复、因为我们因此问题而被阻止。

    此致、

    Parth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    我将使用引导加载程序和应用程序进行测试。 明天回来。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    刚刚使用 UART 引导加载程序进行了测试。

    在引导加载程序中启用 MPU。 它在 _c_int00 ()中调用了_mpuInit_()

    2.应用程序位于0x200020中,_mpuInit_()被调用两次:_c_int00_()和 main()

    3.系统复位后、代码从引导加载程序跳转到应用程序、我没有看到任何问题。

    您能否共享引导加载程序中使用的_mpuInit_()?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、

    我还对在引导和应用程序上初始化 MPU 执行了相同的配置。 Boot 能够正确初始化 MPU、但当控制权跳转到应用程序时、如果我们重新初始化 MPU、则它无法正确初始化并获取数据中止异常。

    下面是在引导和应用程序上配置 MPU 区域的示例代码片段:

    _mpuInit_
    ;禁用 MPU
    MRC P15、#0、r0、c1、c0、 0
    BIC r0、r0、#1
    DSB
    MCR P15、#0、r0、c1、c0、 0
    ISB
    ;禁用背景区域
    MRC P15、#0、r0、c1、c0、 0
    BIC r0、r0、#0x20000
    MCR P15、#0、r0、c1、c0、 0
    ;设置区域1
    MOV r0、#0
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r1Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0008
    ORR r0、r0、#0x1000
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((1 << 15)+(1 << 14)+(1 << 13)+(1 << 12)+(1 << 11)+(1 << 10)+(1 << 9)+(1 << 8)+(0x1F << 1)+(1)))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域2
    MOV r0、#1
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r2Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0002
    ORR r0、r0、#0x0600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x15 << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域
    MOV r0、#2
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r3Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0002
    ORR r0、r0、#0x1300
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x12 << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域4
    MOV r0、#3
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r4Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0010
    ORR r0、r0、#0x1200
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x16 << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域5
    MOV r0、#4
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r5Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0010
    ORR r0、r0、#0x1300
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x1A << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域6
    MOV r0、#5
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r6Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0001
    ORR r0、r0、#0x0300
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x0A << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域7
    MOV r0、#6
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r7Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0002
    ORR r0、r0、#0x0300
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x14 << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域8
    MOV r0、#7
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r8Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0010
    ORR r0、r0、#0x1200
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x12 << 1)+(1))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域9
    MOV r0、#8
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r9Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x1200
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域10
    MOV r0、#9
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r10Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x000C
    ORR r0、r0、#0x1300
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域11
    MOV r0、#10
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r11Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x0600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域12
    MOV r0、#11
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r12Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x1600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域13
    MOV r0、#12
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r13Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x1600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域14
    MOV r0、#13
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r14Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x1600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域15
    MOV r0、#14
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r15Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0006
    ORR r0、r0、#0x1600
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x04 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2
    ;设置区域16
    MOV r0、#15
    MCR P15、#0、r0、C6、C2、 0
    LDR r0、r16Base
    MCR P15、#0、r0、C6、C1、 0
    MOV r0、#0x0010
    ORR r0、r0、#0x1200
    MCR P15、#0、r0、C6、C1、 4.
    movw r0、#((0 << 15)+(0 << 14)+(0 << 13)+(0 << 12)+(0 << 11)+(0 << 10)+(0 << 9)+(0 << 8)+(0x12 << 1)+(0))
    MCR P15、#0、r0、C6、C1、 2

    ;启用 MPU
    MRC P15、#0、r0、c1、c0、 0
    ORR r0、r0、#1
    DSB
    MCR P15、#0、r0、c1、c0、 0
    ISB
    BX LR

    此外、您能否共享您的工作区并编写您为测试此场景而创建的代码。

    谢谢、此致、

    Parth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Parth、

    您是否已解决问题? 正如我所说,我无法提出这个问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    随附的是测试中使用的 UART 引导加载程序和应用程序映像:

    e2e.ti.com/.../TMS570LSx_5F00_rtiBlinky_5F00_BL_5F00_APP200020.zipe2e.ti.com/.../8360.TMS570LC4357_5F00_UART_5F00_BootLoader.zip