本帖最后由 gesper3187 于 2017-4-6 14:27 编辑
#include "msp430x54x.h"
/*初始化电源*/
/*void Init_Power()
{
P10DIR |= BIT0; //15,-15使能端
P10OUT |= BIT0;
P10DIR |= BIT2;
P10OUT |= BIT2;
}*/
//这里用来使能DC-DC芯片,产生放大器的双供电电源
void InitClock()
{
P1DIR |= BIT0;
P1SEL |= BIT0; //ACLK output,这时候可以使用示波器观察时钟信号
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 = SELM__DCOCLKDIV + SELS__DCOCLKDIV + SELA__DCOCLKDIV; // 时钟来源:主系统时钟来源DCOCLKDIV;子系统时钟来源DCOCLKDIV;辅助系统时钟来源DCOCLKDIV
UCSCTL5 |= DIVM__1 + DIVS__1 + DIVA__4; // 分频:主系统时钟1分频;子系统时钟1分频;辅助系统时钟4分频
__bis_SR_register(SCG0); // Disable FLL
UCSCTL1 = DCORSEL_6; // 10.7MHz<Fdco<39MHz
UCSCTL2 |= FLLD__2 +121 ; // 约4MHz DCOCLKDIV Fdco/4
__bic_SR_register(SCG0); // Enable FLL
// 等待错误标志清除,振动器稳定
do{ // 循环检测直到XT1,XT2和DCO稳定
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除XT1,XT2,DCO故障标志
SFRIFG1 &= ~OFIFG; // 清除故障标志
}while (SFRIFG1&OFIFG);
}
void InitADC12()
{
P6SEL |= 0x10; // Enable P6.4 as A/D channel input
ADC12CTL0 = ADC12ON + ADC12SHT0_2; // Turn on ADC12, set sampling time, 16ADC12CLK cycles,这里我用的2.5V外接基准电压
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_0 + ADC12SSEL_2; //MEM0,IFG0
// Use sampling timer, single time single channel,MCLK=4M
ADC12MCTL0 = ADC12SREF_2 + ADC12INCH_4; // ref+ = VeREF+, ref- = AVSS, channel = A4
}
//初始化Timer_A1
void Init_Timer_A1()
{
TA1CCTL0 = CCIE; // CCR0 interrupt enabled
TA1CCR0 = 30000; //设置时钟中断周期为30ms
//TA1CCTL2 = OUTMOD_7 + CCIE; // CCR2 set/reset Interrupt enabled
TA1CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode, clear TAR
}
double Point_now ;
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER_A0(void)
{
//P6OUT ^= 0x01; // Toggle触发 P11.0
ADC12IE = ADC12IE0;
ADC12CTL0 |= ADC12SC + ADC12ENC; //开始ADC转换
while((ADC12IFG & 0x0001) == 0);
Point_now = ADC12MEM0;
__no_operation();
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//Init_Power();
InitClock(); //初始化时钟
Init_Timer_A1(); //初始化定时器A1
InitADC12(); //初始化ADC12
//Init_UART_3(); //初始化UART
while(1)
{
__bis_SR_register(LPM0_bits + GIE);
__no_operation();
}
}
debug时发现MEM0里的值是2000左右,难道是我得eVREF有问题。。
|