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/MSP430FR2355:SAC DAC 无法与计时器中断配合使用

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/804860/ccs-msp430fr2355-sac-dac-does-not-work-with-timer-interrupt

器件型号:MSP430FR2355
主题中讨论的其他器件:MSP-EXP430FR2355

工具/软件:Code Composer Studio

您好、下面是我的代码、当计时器中断发生时、DAC (配置的 SAC)应提供未发生的模拟输出。  

任何人都能提供帮助。  

#include 

unsigned int DAC_data=0x0;

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT


P1SEL0 |= BIT1;//选择 P1.1作为 OA0O 函数
P1SEL1 |= BIT1;// OA 用作 DAC 的缓冲

器//PITR|= BIT1;/3DOUT1|= BIT1
;//


//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//配置参考模块
PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
PMMCTL2 = INTREFEN | REFVSEL_2;//
启用内部2.5V (同时启用 PMMENL2)! //轮询直至内部基准稳定

SAC0DAC = DACSREF_1 + DACLSEL_2 + DACIE;//选择 int Vref 作为 DAC 基准(DAC 内部基准+加载边沿上的数据作为定时器+中断使能)
SAC0DAT = DAC_DATA;//初始 DAC 数据
SAC0DAC || DACEN; //启用 DAC

SAC0OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_1;//选择正负引脚输入
SAC0OA |= OAPM;//选择低速和低功耗模式
SAC0PGA = MSEL_1;//将 OA 设置为缓冲模式
SAC0OA |= SACEN + OAEN; //启用 SAC 和 OA




// 32768一秒脉冲
// 16384半秒脉冲
// 8192 0.25s
// 4096 0.125s
// 2048 0.0625s
// 1024 0.03125s 31.25ms
// 512 512 for 0.015625s 15.625ms
TB0CCTL0 |= CCIE;// TBCCR0
=启用中断;// TBCCR0 =启用中断
TB0CTL |= TBSSEL_ACLK | MC__UP |TBCLR;// SMCLK,连续模式

_ bis_SR_register (LPM0_Bits | GIE);//输入 LPM3,带中断
//_ no_operation ();//用于调试
}

//计时器 B0中断服务例程#PM0_BITE_0
;

// TimerB0 = void
^= TIDAC0_DATA_NO_DATA (void

);// TIB0 = TIDAC0_NO_NO_DATA = 0 = 0 = 0 = NO_NO_NO_NO_OPERATION (void) // DAC12输出正斜坡
} 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请记住、SAC0DAT 寄存器只有12位。 在我们的'm 430fr235x_SAC_L3_05.c'代码示例中、您可以看到"DAC_DATA"变量递增、然后在将值应用于 SAC0DAT 之前使用0x0FFF 递增。 我建议将其添加到您的代码中。

    此外、请尝试将 SAC0DAT 设置为小于或等于12位的值、并查看 DAC 是否提供稳定输出。

    此致、

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

    你(们)好

    我在 DAC_DATA++下添加了此行

    DAC_DATA &= 0xFFF;

    在我的观察窗口中、我看到 SAC0DAT 寄存器在调试期间出现了这个错误"无法从非基元位置加载"。

    如上所示。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 James:
    我在将这行代码馈送到 DAC 之前添加了这行代码。 但它不输出任何内容。
    请帮助!
    此致、
    Venkatesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在 MSP-EXP430FR2355 LaunchPad 上运行"m 430fr235x_SAC_L3_05.c"代码示例而不进行更改时、我使用数字万用表(相对于 GND)测量了 P1.1 (OA0O)上的 DAC 输出。 在 SAC0DAT = 0x0001时、I 的测量值约为0.001V;在 SAC0DAT = 0x0FFF 时、I 的测量值约为2.499V。

    我强烈建议您熟悉此代码示例、并在添加计时器代码之前复制我的结果。 如果 DAC 输出没有变化并且它取决于您的定时器 ISR、那么您的定时器代码可能就是问题、而不是与 SAC 相关的代码。

    msp430fr235x_SAC_L3_05.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430FR235x 演示- SAC-L3、DAC 缓冲模式
    //
    //说明:将 SAC-L3配置为 DAC 缓冲模式。 使用12位 DAC 实现
    //输出正斜坡。 OA 设置为缓冲模式以提高 DAC 输出
    //驱动强度。 选择内部2.5V 基准作为 DAC 基准。
    //使用示波器观察 OA0O 引脚的输出。
    // ACLK = n/a、MCLK = SMCLK =默认 DCODIV ~1MHz。
    //
    // MSP430FR235x
    // ----------
    // /|\| |
    // || |
    // -|RST DAC12->OA0O|-->示波器
    // | |
    // | |
    // | |
    // | |
    // | |
    //
    // Darren Lu
    // Texas Instruments Inc.
    // 2016年10月
    //使用 IAR 嵌入式工作平台 v6.50和 Code Composer Studio v6.2构建
    //*********
    #include 
    
    unsigned int dac_data=0;
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
    
    P1SEL0 |= BIT1; //选择 P1.1作为 OA0O 函数
    P1SEL1 |= BIT1; // OA 用作 DAC
    
    PM5CTL0的缓冲器&=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    
    //配置参考模块
    PMMCTL0_H = PMMPW_H; //解锁 PMM 寄存器
    PMMCTL2 = INTREFEN | REFVSEL_2; //启用内部2.5V 基准
    while (!(PMMCTL2 & REFGENRDY); //轮询直到内部基准稳定
    
    SAC0DAC = DACSREF_1 + DACLSEL_2 + DACIE;//选择 int Vref 作为 DAC 基准
    SAC0DAT = DAC_DATA; //初始 DAC 数据
    SAC0DAC |= DACEN; //启用 DAC
    
    SAC0OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_1;//选择正负引脚输入
    SAC0OA |= OAPM; //选择低速和低功耗模式
    SAC0PGA = MSEL_1; //将 OA 设置为缓冲模式
    SAC0OA |= SACEN + OAEN; //启用 SAC 和 OA
    
    //使用 TB2.1作为 DAC 硬件触发
    TB2CCR0 = 100-1; // PWM 周期/2
    TB2CCTL1 = OUTMOD_6; // TBCCR1切换/设置
    TB2CCR1 = 50; // TBCCR1 PWM 占空比
    TB2CTL = TBSSEL_SMCLK | MC_1 | TBCLR; // SMCLK、向上计数模式、清除 TBR
    
    __bis_SR_register (LPM3_bits + GIE); //输入 LPM3、启用中断
    }
    
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector = SAC0_SAC2_vector
    __interrupt void SAC0_ISR (void)
    #Elif defined (__GCC2__)
    void __attribute_isr (nu_SAC0)#interrupt COMPLETOR
    
    (void SAC0)#SAC0!
    #endif
    {
    switch (__even_in_range (SAC0IV、SACIV_4))
    }{
    案例 SACIV_0:中断;
    案例 SACIV_2:中断;
    案例 SACIV_4:
    DAC_DATA++;
    DAC_DATA &= 0xFFF;
    SAC0DAT = DAC_DATA; // DAC12输出正斜坡
    中断;
    默认值:中断;
    }
    } 

    此致、

    James