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.

[参考译文] 编译器/MSP430L092:如何运行 ASM 程序和查找 API 函数

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/699368/compiler-msp430l092-how-to-run-asm-program-and-find-api-functions

器件型号:MSP430L092
主题中讨论的其他器件:MSP-FET430UIFMSP-FETMSP430FR2311TMS320F28332MSP430F1121MSP430WARE

工具/软件:TI C/C++编译器

当使用 MSP-FET430UIF 和 IAR5.30来调试某些应用时、我遇到了一些问题、如下所示:
1、在进行430f1101的某些项目时、对 c 编程是正确的、但对于 ASM 程序、它显示错误[E16]并显示"段重置()对于段定义来说太长"。 虽然使用了相同的链接器推荐文件、但为什么会使用它?
2、关于调试430L092、当然、使用加载程序方法、同样对于 c (__LW_AT__ta_02.c)、它运行正常、但对于 asm (ta_02.asm)、它显示了 Error[40] 、并在、global、.text、.sect 等上显示"错误指令" 它有什么问题? 此外,我现在从 TI E2E 获得了 loader.h 文件,但我不知道如何找到 API 函数及其工作原理。  是否有更多有关创建 L092自主应用以供参考的详细示例。 很抱歉、我是一名初学者。
此致、
习近平鲁安

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

    您好!

    请查看与此错误相关的以下主题。 我怀疑您是从 C 语言项目开始并将汇编代码导入其中、反之亦然。

    此外、我建议更新您的工具和设备。 首先、我将使用我们最新的调试器 MSP-FET、并尝试使用我们的 Code Composer Studio (CCS) IDE。您选择 L092的具体原因是什么? 我们提供更新、支持更好的器件、包括一些令人兴奋的 FRAM 系列器件、如 MSP430FR2311。

    此致、

    James

    MSP 客户应用

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

    器件型号:MSP430L092

    回放 James 先生、

    是的、有一些特殊原因、ULV、我需要选择 L092。
    ASM 程序无法在 IAR 系统中运行的主要原因可能是它们是由 CCS 开发的、尽管它们都是由您的公司提供的。 对于汇编器、CCS 和 IAR 之间存在许多差异。 对吗?
    顺便说一下、您能否为我们提供一些从 IAR 和 L092开发的 ASM 程序的更多示例、以及一些程序展示了它的 API 操作? 如果是、我们将轻松 掌握其开发。非常感谢。
    此致、
    Ruan

    附录:

    James Evans 回答 了 Compiler/MSP430L092:如何运行 ASM 程序和查找 API 函数。

    您好!

    请查看与此错误相关的以下主题。 我怀疑您是从 C 语言项目开始并将汇编代码导入其中、反之亦然。

    此外、我建议更新您的工具和设备。 首先、我将使用我们最新的调试器 MSP-FET、并尝试使用我们的 Code Composer Studio (CCS) IDE。您选择 L092的具体原因是什么? 我们提供更新、支持更好的器件、包括一些令人兴奋的 FRAM 系列器件、如 MSP430FR2311

    此致、

    James

    MSP 客户应用

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

    [引用用户="c2h' RUA"]是的,有一些特殊原因,ULV,我需要选择 L092。

    谢谢! 这是有道理的。

    [引用用户="c2h' RUan]在 IAR 系统中无法运行 ASM 程序的主要原因可能是 ASM 程序是通过 CCS 开发的,但这些程序都是由贵公司提供的。 对于汇编器、CCS 和 IAR 之间存在许多差异。 对吗?[/引述]

    您是否需要使用 IAR? 我们为 CCS 的 l09提供了多个汇编代码示例、但不提供 IAR。 您可以从 L092产品文件夹的工具和软件选项卡(在软件部分下)下载这些代码示例。 正确的是、CCS 和 IAR 编译器之间存在差异、需要移植汇编代码。

    由于 CCS 现在是免费的、并且示例支持 CCS、我强烈建议您使用此路径进行开发。

    此致、

    James

    MSP 客户应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我开发了许多使用 CCS 的程序、例如 TMS320F28332等 但对于 L092、我必须与您的 MSP430L092目标板套件配合使用、该套件将连接到 MSP FET430UIF 使用的 ISR。 对于430UIF 和 XDS100 (对于28332)的仿真器、JTAG 引脚布局似乎有很多不同。 我不知道430UIF 是否可以使用 CCS 以及如何实现它。
    此致、
    Ruan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ruan、

    是的、CCS 支持 MSP-TS430L092目标板和 MSP-FET。 不建议在新设计中采用传统 MSP-FET430UIF (NRND)。 MSP-FET 的14引脚连接器插入连接到 MSP-TS430L092目标板的 L092有源电缆板。 通过在 MSP430硬件工具用户指南中搜索器件型号、您可以找到有关如何使用 MSP-TS430L092目标板的更多详细信息。 更具体地说、请参阅图 B-6和 B-8。

    此致、

    James

    MSP 客户应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为 CCS 应该支持 MSP-FET、但对于我的 CCS V6.1.3、TMS430F1121和 L092没有.gel、因此无法对其进行配置。 此外,为了驱动 MSP-FET430UIF,它的硬件需要升级,因为我的 IAR 使用的是 V 5.3。 顺便说一下、您能告诉我哪一个是它的活动仿真器吗?
    通过使用 IAR、仍然可以调试一些程序、但有些程序不能调试。
    此致、
    Ruan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="c2h' RUAN"]我发现 CCS 应该支持 MSP-FET,但对于我的 CCS V6.1.3,TMS430F1121和 L092没有.gel,因此无法配置它。

    我假设您是指"MSP430F1121"、而不是"TMS430F1121"。 我不熟悉.gel 文件。 在线阅读这些内容后、它们似乎被用于处理器、而不是微控制器。 对于 MSP430、目标配置在.ccxml 文件中定义。 因此、您无需担心此处的.gel 文件。

    [引用用户="THUTO RUA]]除此之外,要驱动我 的 MSP-FET430UIF,硬件需要升级,因为我的 IAR 使用的是 V 5.3。 顺便说一下、您能告诉我哪一个是它的活动仿真器吗?
    通过使用 IAR、仍然可以调试一些程序、但有些程序无法调试。

    由于您已经拥有 MSP-TS430L092目标板和 MSP-FET430UIF、因此您可以使用 IAR 或 CCS 轻松入门。 您是否曾尝试连接所有内容、选择示例汇编项目、对器件进行编程以及对其进行调试? 同样、您可以 通过在 《MSP430硬件工具用户指南》中搜索器件型号来找到有关如何使用 MSP-TS430L092目标板的更多详细信息。 更具体地说、请参阅图 B-6和 B-8。

    虽然有点过时、但请观看下面的 L092简介视频和演示。 它应有助于填补空白。 否则、我不确定我能在这里获得多大帮助。

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:


    经过一段时间的学习、我逐渐熟悉 L092和 IAR 工具的性能和操作。 但是、仍有以下问题需要帮助。
    1、根据文献编号 SLAU321的第2.2.3章、它指出 L092的 HF-OSC 可以内部修整并提供稳定的频率。 但我不知道如何进行内部修整。 与 F1101不同、我找不到任何相关信息或示例程序。 可以帮我解决这个问题吗?
    2 μ s 您能,外部时钟(晶体振荡器)的模型吗?我们如何满足 L 092这样低功耗电源的要求?
    3,使用 IAR for F1101进行调试、我使用附录中给出的程序。 当使用 WDTCTL = WDT-MDLY-8时、工作正常、但当 WDTCTL = WDT-ADLY-250时、无法进入中断 ISR。 请告诉我怎么了。

    此致、
    Ruan


    附录:

    #include 
    void main (void)
    {
    WDTCTL = WDT_ADLY_250;//WDT 250ms、ACLK、间隔定时器
    IE1 |= WOUT;//启用 WDT 中断
    P1DIR |= 0x01;//将 P1.0设置为输出方向
    
    _BIS_SR (LPM0_BITS + GIE);//输入 LPM3 w/WDT_INTERRUPT
    
    
    
    例程=
    
    
    ^ 0x01;//看门狗中断#WDT_TRUNTIPER = 0x01/中断向量#VISION //使用异或
    }切换 P1.0 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1根据文献编号 SLAU321的第2.2.3章,它指出 L092的 HF-OSC 可以进行内部修整,提供稳定的频率。 但我不知道如何进行内部修整。 与 F1101不同、我找不到任何相关信息或示例程序。 您能给我一些解决问题的帮助吗?[/引述]

    用户指南提到 CCSCTL2可用于 HF-OSC 的频率修整。  对于~1MHz 运行、默认值为0101000b。 使用 CCSCTL2中的下限(0000000b)和上限(1111111b)、您 可以分别实现~0.565MHz 至~2.3MHz 的频率。 请确保在 CCS 解锁时修改该寄存器。 例如、在下面的代码示例中、我将在 CCSCTL4和 CCSCTL5寄存器配置之间执行此操作。

    编辑:将粗体值从"0.7MHz 至1.3MHz 频率"更改为"~0.565MHz 至~2.3MHz 频率"。

    msp430x09x_ccs_hfosc.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/copyrights-*/*
    说明:此程序演示了如何配置 ACLK、MCLK 和 SMCLK */*
    以使用 HF 时钟源。 */
    ******** Timer_A0 ********* //*
    要求:示波器 */
    * */
    * */
    * +--L092--+ */
    * |*1. 14 | */
    * | 2. 13 | */
    * | 3. 12 |-> P1.4 MCLK ~1MHz */
    * | 4. 11 | */
    * | 5. 10 | */
    * P1.0 ACLK ~1MHz <- | 6. 9 | */
    * P1.1 SMCLK ~1MHz <- | 7. 8 | */
    * +--- + */
    * *
    /* D.Dang/D.Archbold/D.Szmulewicz //
    * Texas Instruments Inc. 使用
    IAR 版本5.10.4构建的*//* */
    ********* /#include
    
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD;
    
    //设置端口1以输出 ACLK、SMCLK 和 MCLK
    // P1.0 = ACLK -> P1DIR.0 = 1;P1SEL0.0 = 1;P1SEL1.0 = 1;
    // P1.1 = SMCLK-> P1DIR.1 = 1;
    P1SEL1.1 = 1;P1SEL1.1 = 1;P1SEL1.1 = 1;P1P1SEL1 = 1;P1SEL1 = 1 = 1;P1P1.4 = 1;P1P1P1P1P1P= 1;P1;P1 P1SEL0.4 = 1;P1SEL1.4 = 1;
    
    P1DIR |= BIT0 + BIT1 + BIT4;
    P1SEL0 |= BIT0 + BIT1 + BIT4;
    P1SEL1 |= BIT0 + BIT1 + BIT4;
    
    /******** //*
    设置 CCS */
    /* ACLK = HFCLK/DCO *
    /* MCLK = HFCLK/DCO *
    /* SMCLK = HFCLK/DCO *
    /******** /
    
    CCSCTL0 = CCSKEY; //解锁 CCS
    
    while (SFRIFG1和 OFIFG) //振荡器标志?
    {
    CCSCTL7 = 0; //清除 HF 和 LF OSC 故障标志
    SFRIFG1 = 0; //清除 OFIFG
    }
    
    CCSCTL4 = SEL_0 + SELM_0 + SELS_0;//选择 HFCLK/DCO 作为 ACLK、MCLK 和 SMCLK 的时钟源
    CCSCTL5 = DIVA_0 + DIVM_0 + DIVS_0;//将 ACLK、MCLK 和 SMCLK 的分频器设置为1
    CCSCTL0_H |= 0xFF; //锁定 CCS
    
    /*通过写入高字节锁定*/
    
    while (1);
    
    } 

    [引用用户="c2' RUan]2,您能否推荐外部时钟(晶体振荡器)的型号?我们如何满足 L 092这样低功耗的要求?

    我的最佳建议是检查目标插座板 BOM 以查看使用了哪些外部时钟。 此外、确保晶体满足数据表中指定的任何要求。 在用户指南的第2.2.4节"外部时钟源"中、它提到通过选择 CLKIN 作为时钟源、CLKIN 可与 CLKIN 引脚上的外部时钟信号搭配使用。 当与外部信号一起使用时、外部频率必须满足数据表参数。

    [引用用户="c2hc1 Ruan]3,使用附录中提供的程序与 IAR for F1101进行调试。 当使用 WDTCTL = WDT-MDLY-8时、工作正常、但当 WDTCTL = WDT-ADLY-250时、无法进入中断 ISR。 请告诉我问题是什么。[/引述]

    查看 ISR 是否在您不进行调试时执行。 有时、活动的调试会话会使时钟和时序混乱。

    此致、

    James

    MSP 客户应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。 我已经完成了 L092计划的设计。 我购买了 MSP-TS430L092修订版1.1的 BOM、但它上根本没有外部时钟。 我已经找了很久了、但觉得没有人适合它、尤其是对于低电源电压、所以问您是否可以提供一些推荐的模型。
    此致、
    Ruan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在快速网络搜索之后、我发现 Diodes LX501振荡器系列的输入电压范围为0.9V 至1.5V、频率范围为1.25Mhz 至50MHz。 但是 、我在任何地方都找不到库存。 如果您需要在0.9V 电压下运行、我建议您找到类似的器件。

    二极管 LX501系列数据表

    我不确定您想要的频率、但我确实找到了一些具有0.9V 电源电压和32.768kHz 频率的 Epson SG-3040LC 振荡器。 我发现一些其他振荡器在0.9V 电源电压下运行、但它们的频率为24MHz、这对于 L092来说太高了。

    Digi-key 搜索结果

    SG-3040LC 32.7680KB3:Pure SN

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 James:
    谢谢你。 似乎解决了许多问题。 但是、当运行您指定的 msp430x09x_apol_adc_06采样温度程序时、会出现更多问题。 相关的.C 和.asm 程序重复如下。
    1、到.c 文件
    第一次,在生成项目并运行链接器之后,它会显示[E46]的错误,作为附件程序下的消息;使用相同的方法,创建了另一个项目,但可以成功传递。 调试结果:使用原始程序时、结果和 degC 都为0;通过在 APCTL 中删除+OSWP 来更改原始程序、获取结果= 166、degC = 0。 都不正确。
    2.到.asm 文件
    由于我使用了 IAR 的调试工具、我已经修改了您的程序(其他程序在修改后可以正常运行、但是这个程序有.bss 项、我不知道它的修改是否正确?)。 调试结果:Result = 16533、degC = 16562。 具体而言、对于最后几条指令、我不知道如何获取摄氏度。 运行后,R12为0xx0008,但为什么“手表”中显示的 degC 为16562。
    尽管反复调试、但问题仍然无法解决。 是软件问题还是硬件问题? 请提供指导。
    顺便说一下、很难找到满足频率要求的晶体振荡器。 0.9V 时为960KHz 或1.2MHz。
    此致、
    Ruan

    /*说明:ADC 温度样本、msp430x09x_apol_adc_06.c
    #include "msp430l092.h"
    INT 结果;
    volatile unsigned long int degC;
    void main (void)

    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    //开始配置 A-POOL 寄存器
    APCTL = 0; //清除 APCTL 寄存器
    APIE |= EOCIE; //为转换结束启用中断
    APTRIM = REFTSEL;
    APVDIV = TMPSEN; //启用温度传感器
    APCNF = CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK;
    //配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
    APCTL = OSEL+oden+OSWP+APPSEL_5+APNSEL_4;//设置通道并开始转换
    APINT = 0x00; //清除 ADC-DAC-REG
    APCTL |= CBSTP+SBSTP+RUNSTOP;
    _bis_SR_register (LPM0_bits + GIE); //输入 LPM0并启用中断
    结果= APINT;
    degC =(int)(result-179)*(1/0.464)+30;//请参阅数据表以了解精度和偏移规格
    __no_operation(); //在此处设置断点

    //a_pool 中断服务例程
    #pragma vector=APOOL_vector
    _interrupt void a_pool (void)

    APIFG = 0; //清除中断标志
    _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //退出激活以计算温度

    按摩:
    链接
    警告[W60]:未在任何输入文件中找到入口点标签"_program_start"。 图像将没有入口点
    错误[E46]:引用了?abs_entry_MOD ()的未定义外部"_program_start"
    运行链接器时出错


    ;说明:ADC 温度采样 msp430x09x_apol_06.asm
    ;.cdecls C、list、"msp430x09x.h"
    ;------------------------------------------------------------------
    ; .data ; RAM 变量
    ; 通用 DATA16_C
    结果 DS8 2.
    摄氏度 DS8 4.
    德格 DS8 4.
    ;------------------------------------------------------------------
    ; .bss 结果、2.
    ; .bss degC、4.
    ; .bss degF、4.
    ;------------------------------------------------------------------
    ; 全局 main
    ; .text ;组装到内存中
    ;------------------------------------------------------------------
    ;主程序
    #include "msp430l092.h"
    org 01C80h

    复位 MOV.w #0x2400、SP ;初始化堆栈指针
    MOV.w #WDTPW + WDTHOLD、&WDTCTL;停止 WDT

    ;开始配置 A-POOL 寄存器

    MOV.w #0、&APCTL ;清除 APCTL 寄存器
    BIS.w #EOCIE、APIE ;为转换结束启用中断
    MOV.w #REFTSEL、&APTRIM
    MOV.w #TMPSEN、&APVDIV ;启用温度传感器
    MOV.w #CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK,&APCNF;配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源

    MOV.w #Osel+oden+APPSEL_5+APNSEL_4、&APCTL;设置通道并开始转换
    MOV.w #0、APINT ;清除 ADC-DAC-REG

    BIS.w #CBSTP+SBSTP+RUNSTOP、&APCTL;
    BIS.w #LPM0+GIE、SR ;输入 LPM0,并启用中断

    MOV.w APINT (&APINT)、&结果
    MOV.w 结果、R12
    MOV.w #169、R12
    Sub.w #165、R12 ;减165
    RLA R12. ;乘以2
    MOV.w R12、和 degC ;简单的环境示例。 要获得更准确的结果、请参阅 C 代码示例

    NOP ;在此处设置断点
    ;------------------------------------------------------------------
    a_pool_ISR ;A_POOL 中断服务例程
    ;------------------------------------------------------------------
    MOV.w #0、&APIFG ;清除中断标志
    BIC.w #LPM0、0 (SP) ;修改 SP,使其在恢复后进入活动模式
    TI ;从 ISR 返回
    ;------------------------------------------------------------------
    ; 中断向量
    ;------------------------------------------------------------------
    常见的 INTVEC ;中断向量
    org) RESET_VECTOR
    DW 复位
    org) APOL_VECTOR
    DW a_pool_ISR ; a_pool VectorWDT_ISR
    结束

    ; .sect ".int09" ; a_pool_vector
    ; .short a_pool_ISR ; a_pool 向量
    ; .end
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    使用 CCS V8中 MSP430Ware v3.80.04.05中的最新"msp430x09x_apol_adc_06"代码示例、我构建了一个没有错误的项目。 我建议使用最新版本的 IAR 并下载最新版本的 MSP430Ware、以确保您拥有此代码示例的最新版本。

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    -/copyright-*/*
    说明:ADC 温度样本 */
    ******** A_POOL ADC 转换********* //*
    */
    * */
    * +--L092--+ */
    * |*1. 14 | */
    * | 2. 13 | */
    * | 3. 12 | */
    * | 4. 11 | */
    * | 5. 10 | */
    * | 6. 9 | */
    * | 7. 8 | */
    * +--- + */
    * //*
    D.Dang/D.Archbold/D.Szmulewicz /F. 陈 //
    * Texas Instruments Inc. 使用
    IAR 版本5.51.1和 CCS 版本5.3.00090构建的*///* */
    ********* /#include
    
    
    
    int 结果;
    volatile short int degC;
    
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    
    //开始配置 A-POOL 寄存器
    
    APCTL = 0; //清除 APCTL 寄存器
    APIE |= EOCIE; //为转换结束启用中断
    APTRIM = REFTSEL;
    APVDIV = TMPSEN; //启用温度传感器
    APCNF = CMPON+DBON+CONVON+APREFON+CLKSEL_MCLK; //配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
    
    
    while (1)
    {
    
    APCTL = Osel+oden+OSWP+APPSEL_4+APNSEL_5; //设置通道并开始转换-+oden+
    APINT = 0x00; //清除 ADC-DAC-REG
    APIFG = 0;
    APCTL |= CBSTP+SBSTP+RUNSTOP;
    _bis_SR_register (LPM0_bits + GIE); //输入 LPM0并启用中断
    
    结果= APINT;
    degC=(((((Result-179)*125)/58)+30; //有关精度和偏移规格、请参阅数据表
    
    __no_operation(); //在此处设置断点
    
    }
    
    }
    
    
    //a_pool 中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=APOOL_vector
    __interrupt void a_pool (void)
    #Elif defined (__GPOL__)
    void __attribute_(nvoid)(nu_pool (void)(void))#apol_opt!a vector
    
    (void!(void)#apol_opt!
    #endif
    {
    APIFG = 0; //清除中断标志
    __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits); //退出活动以计算温度
    
    
    } 

    此外、我不建议在您的应用中使用 L092的内部温度传感器、因为它相对不准确。 相反、我建议使用外部温度传感器。 下面是一些相关的 E2E 主题、我们将对此进行更详细的讨论。

    MSP430L092:温度传感器问题

    MSP430L092:温度传感器测量误差

    MSP430L092:如何结合温度传感器代码和读取模拟值代码?

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 James:
    感谢您的帮助、大多数问题已基本解决。 有一件事总是令人困惑。 您所讨论的频率修整范围可以是0.7MHz (0000000b)至1.3MHz (1111111b),这与 SLAS673 p27表中第一项的 fHFOSC (MSP430L092的数据表)一致,但我不知道第二项的 fHFOSC 意味着什么。 它是如何从0.92到1.08MHz 获得的? 此外,以下图12为什么可以从2.4MHz (0)更改为0.6MHz (128)?
    此致、
    Ruan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruan:

    我想我犯了一个错误、我完全理解为什么你会感到困惑。 我很抱歉。 出于某种原因、我未看到或正确理解数据表中的图12。 如图12所示、CCSCTL2寄存器定义的内部 HFOSC 的修整值范围从大约565kHz (11111b)到高达2.3MHz (0000000b)。 我使用目标插座板确认了这一点。

    此外、我确认了默认 CCSCTL2 (0101000b)将内部 HFOSC 配置为以大约~1MHz 的频率运行。 现在、查看数据表第27页顶部的表格、我可以看到您在这里提到的内容。 这是我的解释。

    HFOSC 的频率范围似乎表示默认 CCSCTL2修整值的变化。 第一行用于室温、第二行用于30°C。 现在、查看数据表中图13中 HFOSC 频率与温度的归一化图、可以解释第一行和第二行之间的差异。 图13告诉我们、随着温度的降低、频率会比30C 时的频率增加。 这与第一行中显示的内容匹配。 随着温度的升高、在30°C 时频率的降低速度比频率更快。 现在、图13中的图可能与第一行和第二行中提供的值不匹配、但我假设图基于典型值。 第一行和第二行中的最小值和最大值将是最坏的情况。

    很抱歉、这会增加混淆、但我真的希望这有助于澄清这一点。 这对我来说绝对是一次学习体验、因此感谢您的耐心。

    此致、

    James