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