Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

使用CCS与F2619在线仿真遇到问题

$
0
0

刚刚开始使用msp430,仿真器的是MSP-FET430UIF

在线仿真时遇到几个问题求高手解答:
1.用户定义的变量怎么监控?每次讲自定义的变量加入监控窗口,变量的值反馈“.”,或者是无法获取

2.设置中断的时候,开始运行每次都跳入到“frcdivd.c”文件,这是哪里中断设置需要更改还是说中断有错误?

3.warning:.#552-D variable "pres_calibrated" was set but never used:这个变量已经赋值过,必须在其他函数调用才会取消?

4.<a href="file:/D:/Program%20Files%20(x86)/TI/ccsv6/tools/compiler/dmed/HTML/MSP430/1534.html">#1534-D</a> (ULP 7.1) Detected use of global variable "OffsetCalibrateData" within one function
 "ADS1220_Offset_Calibrate_Data". Recommend placing variable in the function locally

Multiple markers at this line
    - main.c, line 122 [S/W BP]
    - <a href="file:/D:/Program%20Files%20(x86)/TI/ccsv6/tools/compiler/dmed/HTML/MSP430/1530.html">#1530-D</a> (ULP 5.1) Detected divide operation(s). Recommend moving them to RAM during run time
     or not using as these are processing/power intensive
    - <a href="file:/D:/Program%20Files%20(x86)/TI/ccsv6/tools/compiler/dmed/HTML/MSP430/1531.html">#1531-D</a> (ULP 5.2) Detected floating point operation(s). Recommend moving them to RAM during
     run time or not using as these are processing/power intensive

这2条如何处理?

5.想掉电保存数据,看到一条指令:const unsigned  char Value@0x0C000

这条指令有什么限制,保存多少字节可用这种方法?

/*
 * ======== Standard MSP430 includes ========
 */
#include <msp430.h>
#include "stdint.h"
#include "usci_spi.h"
#include "ADS1220.h"
#include "Rtd_Math.h"
#include "usci_digital_io.h"
#include "flash.h"
/*
 * ======== Grace related includes ========
 */
#include <ti/mcu/msp430/Grace.h>

#define CPU_F                               ((double)8000000)
#define delay_us(x)                       __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)                      __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define ADS_DRDY_A0 BIT5
#define ADS_DRDY_B0 BIT7
#define SAMPLES_PER_DAC_ADJUSTMENT       16


unsigned char StartConversion_A0,StartConversion_B0;
unsigned char ReadConversionData_A0,ReadConversionData_B0 = 0;
unsigned char Count_T,Count_P = 0;
/*
 *  ======== main ========
 */


void main(void)
{
    volatile static unsigned char T_Data[3],P_Data[3];

    float avgTemp;
    float avgPres;

    long temperature;
    long temp_calibrated;
    long pressure;
    long pres_calibrated;
    long code_t;
    long code_p;




    WDTCTL = WDTPW+WDTHOLD;
    Grace_init();  // Activate Grace-generated configuration
    InitFlashPins();
    InitFlash();


    __enable_interrupt();

    // Reset the ADS1220, SPI_B0
    ADS1220_Reset(USCI_B_SIDE);
    //配置SPI——B0端ADS1220
    Setup_ADS1220 (ADS1220_MUX_AIN1_AIN2, ADS1220_OP_MODE_DUTY,ADS1220_VREF_EXT_REF1_PINS,
                       ADS1220_CONVERSION_CONTINUOUS, ADS1220_DATA_RATE_600SPS, ADS1220_GAIN_128, ADS1220_USE_PGA,
                       ADS1220_IDAC1_DISABLED, ADS1220_IDAC2_DISABLED, ADS1220_IDAC_CURRENT_OFF,USCI_B_SIDE);


//    Setup_Timer(50000); // 50 ms
    delay_ms(50);

    // Reset the ADS1220, SPI_A0
    ADS1220_Reset(USCI_A_SIDE);
    //配置SPI——A0端ADS1220
    Setup_ADS1220 (ADS1220_MUX_AIN1_AIN0, ADS1220_OP_MODE_DUTY,ADS1220_VREF_EXT_REF0_PINS,
                   ADS1220_CONVERSION_CONTINUOUS, ADS1220_DATA_RATE_600SPS, ADS1220_GAIN_8, ADS1220_USE_PGA,
                   ADS1220_IDAC1_AIN3, ADS1220_IDAC2_DISABLED, ADS1220_IDAC_CURRENT_100_UA,USCI_A_SIDE);

//   Setup_Timer(50000); // 50 ms?
    delay_ms(50);

    StartConversion_A0 = 0;
    StartConversion_B0 = 0;
    ReadConversionData_A0 = 0;
    ReadConversionData_B0 = 0;


    ADS1220_Start (USCI_B_SIDE);

    ADS1220_Start (USCI_A_SIDE);

    while(1)
    {
        __bis_SR_register(CPUOFF);
        if (ReadConversionData_A0)
        {
            StartConversion_A0 = 1;             // Start next conversion immediately
            ADS1220_Get_Conversion_Data_Calibrated ((unsigned char *)P_Data,USCI_A_SIDE,0);   // Get the temperature data with the calibration value subtracted

            code_p = (((long)P_Data[0] << 16) + ((long)P_Data[1] << 8) + (long)P_Data[2]);   // take 3 bytes of voltage returned and place in word
            pressure=(long)interpolateTemperatureValue (code_p, 128.0, 3300.0);
            ReadConversionData_A0=0;
            if(Count_P == 0)
            {
                avgPres=(float)pressure;
            }
            else
            {
                avgPres+=(float)pressure;
            }
            Count_P++;
            if(Count_P == SAMPLES_PER_DAC_ADJUSTMENT)
            {
                pres_calibrated = (long)(avgPres/SAMPLES_PER_DAC_ADJUSTMENT);
            }
        }
        if (ReadConversionData_B0)
        {
            StartConversion_B0 = 1;             // Start next conversion immediately
            ADS1220_Get_Conversion_Data_Calibrated ((unsigned char *)T_Data,USCI_B_SIDE,0);   // Get the temperature data with the calibration value subtracted

            code_t = (((long)T_Data[0] << 16) + ((long)T_Data[1] << 8) + (long)T_Data[2]);   // take 3 bytes of voltage returned and place in word
            temperature=(long)interpolateTemperatureValue (code_t, 8.0, 1500.0);
            ReadConversionData_B0=0;
            if(Count_T == 0)
            {
                avgTemp=(float)temperature;
            }
            else
            {
                avgTemp+=(float)temperature;
            }
            Count_T++;
            if(Count_T == SAMPLES_PER_DAC_ADJUSTMENT)
            {
                temp_calibrated = (long)(avgTemp/SAMPLES_PER_DAC_ADJUSTMENT);
            }

        }
    }

}



#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
    unsigned char interrupts = P1IFG;

    P1IFG &= 0;

    // Has a Data Ready occurred from the ADS1220?
    if (interrupts & ADS_DRDY_A0)
    {
        ReadConversionData_A0 = 1;
    }
    if (interrupts & ADS_DRDY_B0)
    {
        ReadConversionData_B0 = 1;
    }

    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0

}

引脚配置:

void GPIO_graceInit(void)
{
    /* USER CODE START (section: GPIO_graceInit_prologue) */
    /* User initialization code */
    /* USER CODE END (section: GPIO_graceInit_prologue) */

    /* Port 1 Output Register */
    P1OUT = BIT4 | BIT6;

    /* Port 1 Direction Register */
    P1DIR = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT6;

    /* Port 1 Interrupt Edge Select Register */
    P1IES = BIT5 | BIT7;

    /* Port 1 Interrupt Flag Register */
    P1IFG = 0;

    /* Port 1 Interrupt Enable Register */
    P1IE = BIT5 | BIT7;

    /* Port 2 Output Register */
    P2OUT = 0;

    /* Port 2 Direction Register */
    P2DIR = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;

    /* Port 2 Interrupt Edge Select Register */
    P2IES = 0;

    /* Port 2 Interrupt Flag Register */
    P2IFG = 0;

    /* Port 3 Output Register */
    P3OUT = 0;

    /* Port 3 Port Select Register */
    P3SEL = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;

    /* Port 3 Direction Register */
    P3DIR = 0;

    /* Port 4 Output Register */
    P4OUT = 0;

    /* Port 4 Direction Register */
    P4DIR = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;

    /* Port 5 Output Register */
    P5OUT = BIT2 | BIT3 | BIT4 | BIT7;

    /* Port 5 Direction Register */
    P5DIR = BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;

    /* Port 6 Output Register */
    P6OUT = 0;

    /* Port 6 Direction Register */
    P6DIR = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;



}


Viewing all articles
Browse latest Browse all 3634

Trending Articles