刚刚开始使用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;
}