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

我想用ADC采样电压然后存到片内Flash里面,但是不知道是因为我的被采信号输入有问题还是程序中断有问题,目前程序经过仿真无法走到中断函数内,但是经过初始化的数组却能存入Flash中,大神请帮看看,指出问题。谢谢大家。主函数如下:

$
0
0

//tsadc

#include <msp430X14X.h>
#include "BoardConfig.h"
#include "tsflash.h"
#include <stdio.h>
#include <string.h>

void InitSys();
#define FLASHA_ADR 0x1080 //FLASH 的A 段起始地址
//#define FLASHD_ADR 0x2500 //FLASH 中某一段中的地址

#define N_DATA 5
unsigned char DataB[N_DATA]={0,4,4,4,4};
//unsigned char *DataB;
#define Num_of_Results 32

static uint results[Num_of_Results];
void Trans_val(uint Hex_Val);
/*****************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
BoardConfig(0xb8);
P6SEL |=0x01;
ADC12CTL0 = SHT0_8 + REF2_5V + ADC12ON + MSC;//Config ADC12
ADC12CTL1 = SHP + CONSEQ_2;
ADC12IE = 0x01;
ADC12CTL0 |=ENC;
ADC12CTL0 |=ADC12SC;
_EINT();
_BIS_SR(LPM0_bits + GIE); // Enter LPM0, Enable interrupts
// LPM0;
}

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index=0;
results[index++]=ADC12MEM0;
if (index==Num_of_Results)
{
uchar i;
unsigned long sum =0;
unsigned long summ =0;
index =0;
for(i=0;i<Num_of_Results;i++)
{
sum +=results[i];
}
sum>>=5; //除以32 右移5位 2^5
//Trans_val(sum);
summ=99;
sflash(sum);
// DataB[1]=2;
}
}
//void Trans_val(uint Hex_Val)
//{
// long caltmp;
// char Curr_Volt;
/// char b[10];
///// caltmp = Hex_Val;
//caltmp=(caltmp<<4)+9*Hex_Val; //扩大25倍 左移4位+9倍
///caltmp=(caltmp>>3)+(caltmp<<1);
//Curr_Volt =caltmp>>12;
//

//}
int sflash(int s)
{
unsigned char q0;
unsigned int iq2;
//sprintf(DataB,"%d",s);
unsigned char *pq0=DataB;
unsigned char RDataB[N_DATA]={0,0,0,0,0};
//sprintf(DataB,"%d",s);
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
InitSys(); //初始化
FlashErase(FLASHA_ADR); //段擦除
iq2=FLASHA_ADR;
for(q0=0;q0<5;q0++)
{
FlashWB(iq2,*pq0); //写字节数据
iq2++; //写入字节地址+1
pq0++; //源字节指针+1
}
pq0=(unsigned char *)FLASHA_ADR;
for(q0=0;q0<5;q0++)
{
RDataB[q0]=*pq0;
pq0++;
}

_NOP(); //空操作,便于测试
LPM3; //进入低功耗模式3
}
/**********************************************************************
系统初始化
***********************************************************************/
void InitSys()
{
unsigned int iq0;
//使用XT2 振荡器
BCSCTL1 &= ~XT2OFF; //打开XT2 振荡器
do
{
IFG1 &= ~OFIFG; //清除振荡器失效标志
for (iq0=0xFF; iq0>0; iq0--); //延时,等待XT2 起振
}
while ((IFG1 & OFIFG)!=0); //判断XT2 是否起振
BCSCTL2=SELM_2+SELS; //选择MCLK、SMCLK 为XT2
_EINT();
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles