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.

[参考译文] MSP430FR5994:汇编器中的默认中断处理程序

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1448214/msp430fr5994-default-interrupt-handler-in-assembler

器件型号:MSP430FR5994

工具与软件:

MSP430汇编语言工具(v16.9.0.LTS)手册说明:

如果您没有为某些中断矢量指定 ISR 例程、则将为这些来自 RTS 库的矢量提供 ISR、并且 RTS 库将自动与您的应用链接。 默认 ISR 例程会将器件置于低功耗模式。 您可以使用.intvec 指令与"default_isr"段名来覆盖 RTS 提供的 ISR、如下面的示例中所示。

.intvec "default_isr"、isr_trap_function

尽管 我在汇编器文件中有以下代码:

.intvec "default_isr"、unexpected

映射文件仍显示:

LEA 0 0000ffb4 00000002
0000ffb4 00000002 rts430x_sc_sd_eabi.lib:int18.asm.obj (.int18)

端口8 0 0000ffb6 00000002
0000ffb6 00000002 rts430x_sc_sd_eabi.lib:int19.asm.obj (.int19)

PORT7 0 0000ffb8 00000002
0000ffb8 00000002 rts430x_sc_sd_eabi.lib:int20.asm.obj (.int20)

EUSCI_B3 0 0000ffba 00000002
0000ffba 00000002 rts430x_sc_sd_eabi.lib:int21.asm.obj (.int21)

映射所有未使用的中断等等。

我猜有什么东西丢失了,有什么想法吗?

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

    如何按如下所示定义 ISR?

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

    您好、Gary、问题不是定义 ISR、我有几项工作正常。 问题是为所有其他中断定义一个默认 ISR、TI 手册对此进行了解释、但这并不起作用。

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

    但根据该示例、它似乎定义了一个 ISR

    覆盖未定义的默认 ISR 似乎没有这样的描述。

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

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

    您能帮助在此处与我分享您的 IAR 项目吗?  

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

    不、真的不是。  

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

    但是、如果您使用以下代码创建了一个仅用于汇编器的工程(我使用的是 CCS):

    ;-------------------------------------------------------------------------------
    ; MSP430 Assembler Code Template for use with TI Code Composer Studio
    ;
    ;
    ;-------------------------------------------------------------------------------
                .cdecls C,LIST,"msp430.h"       ; Include device header file
                
    ;-------------------------------------------------------------------------------
                .def    RESET                   ; Export program entry-point to
                                                ; make it known to linker.
    ;-------------------------------------------------------------------------------
                .text                           ; Assemble into program memory.
                .retain                         ; Override ELF conditional linking
                                                ; and retain current section.
                .retainrefs                     ; And retain any sections that have
                                                ; references to current section.
    
    ;-------------------------------------------------------------------------------
    RESET       mov.w   #__STACK_END,SP         ; Initialize stackpointer
    StopWDT     mov.w   #WDTPW|WDTHOLD,&WDTCTL  ; Stop watchdog timer
    
    
    ;-------------------------------------------------------------------------------
    ; Main loop here
    ;-------------------------------------------------------------------------------
    
    loop		jmp		loop
    
    unexpected	reti
    ;-------------------------------------------------------------------------------
    ; Stack Pointer definition
    ;-------------------------------------------------------------------------------
                .global __STACK_END
                .sect   .stack
                
    ;-------------------------------------------------------------------------------
    ; Interrupt Vectors
    ;-------------------------------------------------------------------------------
                .sect   ".reset"                ; MSP430 RESET Vector
                .short  RESET
                
    
                .intvec "default_isr",unexpected
    

    在映射文件中很容易看出可执行文件不包含指向"意外"的 ISR ,而是指向"rts430x_sc_sd_eabi.lib : int 的 ISR .asm.obj "、未请求。

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

    或许、如果您像进行"重置"一样使符号"意外"对外可见、链接器就会看到该符号。

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

    观察结果很好、但遗憾的是、什么也没改变、对于每个 ISR、我仍然有库例程。

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

    您能在此处与我分享 CCS 项目吗? 谢谢

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

    e2e.ti.com/.../void.zip

    我没有找到上传选项,这会是吗?

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

    就在这里

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

    是的、这是我所做的、文件在上面是 void.zip。

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

    我是说整个项目、但上面没有找到任何 zip 文件

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

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

    哦、抱歉没找到它。

    所以、您想让器件对默认 ISR 执行"意外"的功能、对吧?

    如果是、我认为您 已经做到了。

    您可以尝试生成 TI。 TXT 格式的固件、您会看到默认 ISR 起始地址为0x400C

    根据来自映射文件的信息、0x400C 是"意外"的函数

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

    感谢您的帮助 Gary。 似乎缺省 ISR 缺少.def、并且我依赖映射文件、这是不正确的。

    例如、在上面的项目中、映射文件列出了:

    rts430x_sc_sd_eabi.lib:int18.asm.obj (.int18)

    事实并非如此。

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

    链接文件仍引用库中的对象:

    void.out:     file format elf32-msp430
    
    
    Disassembly of section .text:
    
    00004000 <RESET>:
        4000:       31 40 00 2c     mov     #11264, r1      ;#0x2c00
    
    00004004 <StopWDT>:
        4004:       b2 40 80 5a     mov     #23168, &0x015c ;#0x5a80
        4008:       5c 01 
    
    0000400a <loop>:
        400a:       ff 3f           jmp     $+0             ;abs 0x400a
    
    0000400c <__TI_ISR_TRAP>:
        400c:       00 13           reti  

    但将其转换为十六进制文件、而且所有向量都明确指向您的例程:

    :0E4000003140002CB240805A5C01FF3F00139B
    :04FF8000FFFFFFFF81
    :04FF8400FFFFFFFF7D
    :08FF8800FFFFFFFFFFFFFFFF79
    :02FFB4000C40FF
    :02FFB6000C40FD
    :02FFB8000C40FB
    :02FFBA000C40F9
    :02FFBC000C40F7
    
    etc.

    因此、.intvec 语句不会更改所使用的符号、而只是更改其值。 有点困惑,但它得到了工作。