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.

[参考译文] MSP430FR2311:中断矢量地址

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/953738/msp430fr2311-interrupt-vector-addresses

器件型号:MSP430FR2311
大家好、
我们需要您对这种情况的意见
无法确定如何将 中断矢量地址放入 MSP430FR2311的起始地址存储器中  
如第6.4节或 MSP430FR2311数据表中详述的0FFE2h 至0FFFEh。 已尝试所有庄园  
如何使代码使用 RTC 中断例程、但却从未执行。
谢谢你。
-Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您指定矢量(#pragma with CCS、attribute with gcc)时、这是 C 编译器自动完成的。 请参阅代码示例。

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

    Mark、您好!

    编译器使用链接器命令文件(.cmd)将中断映射到存储器。 我从 Resource Explorer 中将其中一个 RTC 代码示例导入到 CCS 中、这里是 FR2311链接器文件。 您可以看到、中断向量映射到0xFFE2到0xFFFE 的地址。

    lnk_msp430fr2311.cmd

    /*********
    *
    *版权所有(C) 2012 - 2020 Texas Instruments Incorporated - http://www.ti.com/
    *
    
    只要
    满足以下条件*、就允许以源代码和二进制形式重新分发和使用*进行修改或不进行修改*:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须在
    
    *
    发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    *未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
    *
    *本软件由版权所有者和贡献者
    *按原样"提供、
    
    且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
    *所有者或贡献者都不对任何直接、间接、偶然、
    *特殊、模范、 或相应的损害(包括但不
    限于*采购替代产品或服务;丧失使用、
    *数据或利润; 或业务中断)、但出于
    任何*责任理论、无论是合同、严格责任还是侵权
    行为*(包括疏忽或其他原因)、即使
    被告知可能会造成此类损坏、也是出于此类责任理论。
    *
    *德州仪器 MSP430FR2311的默认链接器命令文件
    *
    ********* /
    
    / //*
    */
    /*用法:lnk430 -o -m lnk.cmd */
    * cl430 z -o -m lnk.cmd */
    * */
    //*--------------------------------------------------------------------------------------------------------- //
    //*这些链接器选项仅用于命令行链接。 对于 IDE 链接、应在
    "Project Properties"中设置链接器选项 */
    /*-c 使用 C 惯例进行链接*/
    /*-stack 0x0100 软件栈大小 */
    *-heap 0x0100 堆区域大小 */
    * */
    //*--------------------------------------------------------------------------------------------------------- */
    /* 1.210 */
    /*------------------------------------------------------- */
    
    ********* /*
    指定系统内存映射 */
    ********* /
    
    存储
    器{
    BSL0 :origin = 0x1000、length = 0x800
    RAM :origin = 0x2000、length = 0x400
    FRAM :origin = 0xF100、length = 0xE80
    BSL1 :origin = 0xFFC00,length = 0x400
    JTAGSIGNATURE :origin = 0xFF80、length = 0x0004、fill = 0xFFFF
    BSLSIGNATURE :origin = 0xFF84、length = 0x0004、fill = 0xFFFF
    INT00 :origin = 0xFF88、length = 0x0002
    INT01 :origin = 0xFF8A,length = 0x0002
    INT02 :origin = 0xFF8C,length = 0x0002
    INT03 :origin = 0xFF8E、length = 0x0002
    INT04 :origin = 0xFF90,length = 0x0002
    INT05 :origin = 0xFF92,length = 0x0002
    INT06 :origin = 0xFF94,length = 0x0002
    INT07 :origin = 0xFF96、length = 0x0002
    INT08 :origin = 0xFF98,length = 0x0002
    INT09 :origin = 0xFF9A,length = 0x0002
    INT10. :origin = 0xFF9C,length = 0x0002
    INT11. :origin = 0xFF9E、length = 0x0002
    INT12. :origin = 0xFFA0、length = 0x0002
    INT13. :origin = 0xFFA2、length = 0x0002
    INT14 :origin = 0xFFA4、length = 0x0002
    INT15. :origin = 0xFFA6、length = 0x0002
    内部16. :origin = 0xFFFA8、length = 0x0002
    INT17. :origin = 0xFFAA、length = 0x0002
    INT18 :origin = 0xFFAC,length = 0x0002
    INT19. :origin = 0xFFAE、length = 0x0002
    INT20. :origin = 0xFFB0,length = 0x0002
    INT21. :origin = 0xFFB2、length = 0x0002
    INT22. :origin = 0xFFB4,length = 0x0002
    INT23 :origin = 0xFFB6、length = 0x0002
    INT24 :origin = 0xFFB8、length = 0x0002
    INT25. :origin = 0xFFBA,length = 0x0002
    INT26. :origin = 0xFFBC,length = 0x0002
    INT27. :origin = 0xFFBE,length = 0x0002
    INT28 :origin = 0xFFC0、length = 0x0002
    INT29 :origin = 0xFFC2,length = 0x0002
    INT30 :origin = 0xFFC4,length = 0x0002
    INT31 :origin = 0xFFC6、length = 0x0002
    Int32. :origin = 0xFFC8,length = 0x0002
    INT33 :origin = 0xFFCA,length = 0x0002
    INT34 :origin = 0xFFCC,length = 0x0002
    INT35. :origin = 0xFFCE,length = 0x0002
    INT36 :origin = 0xFFD0、length = 0x0002
    INT37 :origin = 0xFFD2,length = 0x0002
    INT38 :origin = 0xFFD4、length = 0x0002
    INT39. :origin = 0xFFD6、length = 0x0002
    INT40. :origin = 0xFFD8、length = 0x0002
    INT41 :origin = 0xFFDA,length = 0x0002
    INT42. :origin = 0xFFDC,length = 0x0002
    INT43 :origin = 0xFFDE,length = 0x0002
    INT44 :origin = 0xFFE0、length = 0x0002
    INT45. :origin = 0xFFE2,length = 0x0002
    INT46 :origin = 0xFFE4,length = 0x0002
    INT47. :origin = 0xFFE6,length = 0x0002
    INT48 :origin = 0xFFE8、length = 0x0002
    INT49 :origin = 0xFFEA,length = 0x0002
    INT50 :origin = 0xFFEC,length = 0x0002
    INT51. :origin = 0xFFEE,length = 0x0002
    INT52. :origin = 0xFFF0,length = 0x0002
    INT53 :origin = 0xFFF2,length = 0x0002
    INT54. :origin = 0xFFF4,length = 0x0002
    INT55 :origin = 0xFFF6、length = 0x0002
    INT56 :origin = 0xFFF8,length = 0x0002
    INT57. :origin = 0xFFFA,length = 0x0002
    INT58 :origin = 0xFFFC,length = 0x0002
    复位 :origin = 0xFFFE,length = 0x0002
    }/*********
    
    /*
    指定段分配到内存中 */
    ********* /
    
    SECTIONS
    {
    组(all_FRAM)
    {
    组(READ_WRITE_MEMORY)
    {
    .TI.persistent:{} 对于#pragma PERSISTENT */
    }
    
    组(只读_存储器)
    {
    .cinit :{} /*初始化表 *
    .pinit :{} /* C++构造函数表 *
    二进制文件 :{} /*引导时初始化表*/
    init_array :{} /* C++构造函数表 *
    .mspabi.exidx:{} /* C++构造函数表 *
    .mspabi.extab:{} /* C++构造函数表 *
    .const :{} /*常量数据 */
    }
    
    GROUP (可执行文件存储器)
    {
    .text :{} /*代码 *
    .text:_ISR:{} /*代码 ISR */
    }
    }> FRAM
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{} load=FRAM、run=RAM、table (BINIT)
    #endif
    #endif
    
    .jtagsignature :{}> JTAGSIGNATURE
    bslsignature :{}> BSLSIGNATURE
    
    .cio :{}> RAM /* C I/O 缓冲器 *
    sysmem :{}> RAM /*动态内存分配区域*/
    .bss :{}> RAM /*全局和静态变量 *
    .data :{}> RAM /*全局和静态变量 *
    .TI.noinit:{}>RAM /*用于#pragma noinit *
    堆栈 :{}> RAM (高) /*软件系统堆栈 *
    
    /* MSP430中断矢量*/
    
    int00 :{} > INT00
    .int01 :{} > INT01
    .int02 :{} > INT02
    .int03 :{} > INT03
    .int04 :{} > INT04
    .int05 :{} > INT05
    .int06 :{} > INT06
    .int07 :{} > INT07
    .int08 :{} > INT08
    .int09 :{} > INT09
    INT10 :{} > INT10
    INT11 :{} > INT11
    INT12. :{} > INT12
    INT13. :{} > INT13
    INT14 :{} > INT14
    .int15. :{} > INT15
    .int16. :{} > Int16
    .int17. :{} > INT17
    .int18. :{} > INT18
    .int19. :{} > INT19
    .int20. :{} > INT20
    .int21. :{} > INT21
    .int22. :{} > INT22
    .int23. :{} > INT23
    .int24. :{} > INT24
    .int25. :{} > INT25
    .int26. :{} > INT26
    .int27. :{} > INT27
    .int28 :{} > INT28
    .int29 :{} > INT29
    .int30 :{} > INT30
    .int31. :{} > INT31
    .int32. :{} > Int32
    .int33. :{} > INT33
    .int34. :{} > INT34
    .int35. :{} > INT35
    .int36. :{} > INT36
    .int37. :{} > INT37
    .int38. :{} > INT38
    .int39. :{} > INT39
    int40. :{} > INT40
    .int41. :{} > INT41
    .int42. :{} > INT42
    .int43. :{} > INT43
    .int44. :{} > INT44
    ECOMP0 :{*(.int45 )}> INT45 type = VECT_init
    端口2 :{*(.int46)}> INT46 type = VECT_init
    端口1 :{*(.int47 )}> INT47类型= VECT_INIT
    ADC :{*(.int48 )}>INT48 type = VECT_init
    EUSCI_B0 :{*(.int49)}> INT49类型= VECT_INIT
    EUSCI_A0 :{*(.int50)}> INT50类型= VECT_INIT
    WDT :{*(.int51 )}> INT51 type = VECT_init
    RTC :{*(.int52)}> INT52 type = VECT_init
    Timer1_B1:{*(.int53)}> INT53 type = VECT_init
    Timer1_B0:{*(.int54)}> INT54 type = VECT_init
    TIMER0_B1:{*(.int55 )}> INT55 TYPE = VECT_INIT
    TIMER0_B0:{*(.int56 )}> INT56 TYPE = VECT_INIT
    联合国管理信息系统 :{*(.int57 )}>INT57 type = VECT_init
    SYSNMI :{*(.int58 )}> INT58 TYPE = VECT_INIT
    复位 :{} >复位/* MSP430复位矢量 */
    
    }/
    
    ********* /*
    包括外设内存映射 */
    ********* /-l
    
    msp430fr2311.cmd
    

    现在、您需要在代码中包含将要使用的中断服务例程(ISR)。 Clemens 已经解释了它的工作原理、您可以看到 RTC ISR 是如何被添加到下面的'430fr231x_RTC_01.c'代码示例中的。 我建议导入此代码示例(其中将包括上面的链接器文件)并检查 RTC ISR 是否正在执行-应该执行。

    msp430fr231x_rtc_01.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2014、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、COPYRRTCCTLIGHT 所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430FR231x 演示- RTC、每1次切换 P1.0
    //
    //说明:将32kHz 晶体配置为 RTC 源时钟,
    // XT1 = 32kHz、ACLK =默认值、MCLK = SMCLK =默认值、DCODIV =~1MHz。
    //
    // MSP430FR2311
    // --------
    // /|\| |
    // || XIN (P2.7)|--
    // -|RST |~32768Hz
    // | XOUT (P2.6)|--
    // | |
    // | P1.0 |-->LED
    // | |
    //
    // Darren Lu
    // Texas Instruments Inc.
    // 2015年10月
    //使用 IAR 嵌入式工作平台 v6.30和 Code Composer Studio v6.1构建
    //*********
    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    P2SEL1 |= BIT6 | BIT7; // P2.6~P2.7:晶振引脚
    操作
    {
    CSCTL7 &=~(XT1OFFG | DCOFFG); //清除 XT1和 DCO 故障标志
    SFRIFG1 &=~OFIFG;
    } while (SFRIFG1和 OFIFG); //测试振荡器故障标志
    
    P1OUT &=~BIT0; //清除已定义加电状态的 P1.0输出锁存器
    P1DIR |= BIT0; //将 P1.0设置为输出方向
    
    PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    
    
    // RTC 计数重载比较值为32。
    // 1024/32768 * 32 = 1秒
    RTCMOD = 32-1;
    //初始化 RTC
    //源= 32kHz 晶振,除以1024
    RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024 | RTCIE;
    
    _bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断
    }
    
    // RTC 中断服务例程
    #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
    #pragma vector=RTC_vector
    __interrupt void RTC_ISR (void)
    #Elif defined (__GRTC_)
    void __attribute__((((NUC) void)#rTC_vector (void
    
    )#rc!错误!
    #endif
    {
    开关(__evo_in_range (RTCIV、RTCIV_RTCIF))
    {
    案例 RTCIV_NONE:中断; //无中断
    案例 RTCIV_RTCIF: // RTC 溢出
    P1OUT ^= BIT0;
    中断;
    默认值:break;
    }
    } 

    此致、

    James