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.

[参考译文] CCS/TMS570LS1224:如何实现“prefetchEntry”?

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/783748/ccs-tms570ls1224-how-to-implement-prefetchentry

器件型号:TMS570LS1224

工具/软件:Code Composer Studio

目前、由于触发了 MPU 保护、程序进入预取指令、但我想在进入预取指令后执行一些软件复位操作。 如何实现 prefetchEntry?

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

    您可以在预取 ISR 中发出软件复位。
    1.更改 sys_intvec.asm:
    .ref _prefet_entry

    PrefetchEntry
    b _prefet_entry

    2.在 sys_main.c 或其他位置添加一个函数
    void _prefet_entry (void);
    #pragma CODE_STATE (_prefet_entry、32)
    #pragma INTERRUPT (_c_int00、PABT)

    void _prefet_entry (void)

    //软件复位
    systemREG1->SYSECR =(0x10)<<14;
    while (1);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的回复。 我测试过您的代码是否正常、但您能向我解释以下两个代码的实际作用吗?

    #pragma CODE_STATE (_prefet_entry、32)
    #pragma INTERRUPT (_c_int00、PABT)

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

    您可以使用要求编译器以32位模式(ARM 模式)或16位模式(Thumb 模式)编译函数

    #pragma CODE_STATE (func、16或32)


    INTERRUPT pragma 使您能够使用 C 代码直接处理中断。 该 pragma 指定该函数为中断。 中断类型由该 pragma 指定;如果未指定中断类型、则假定为 IRQ 中断类型。

    #pragma 中断(func、interrupt_type)

    有7种中断类型:

    DABT 数据中止
    频率 快速中断请求
    IRQ 中断请求
    PABT 预取中止
    复位 系统复位
    SWI 软件中断
    UDEF 未定义的指令