当直回路プログラムブロックテスト

2553 ワード

1.クロックテスト


P 5で4,5.5はそれぞれシステムクロックと補助システムクロックMCLK=8 MHZ,SMCLK=1 MHZ
void Init_clk(void)
{
unsigned int i;

BCSCTL1=0X00; // BCSCTL1
//XT2 ,LFTX1 ,ACLK 1
do
{
IFG1 &=~OFIFG; // OSCFault
for(i=0x20;i>0;i--); //IFG1 1
}
while((IFG1 & OFIFG)== OFIFG);// OSCFault=1

BCSCTL2=0X00;
BCSCTL2 += SELM_2;            //MCLK TX2CLK, 1  8MHZ
BCSCTL2 += SELS +DIVS_3;      //SMCLK TX2CLK, 8  1MHZ
return;
を できる.
}

2.TIMER Aテスト:


カウントアップモードでは、TA OUT 1=50/1 M=0.05 MS の 、つまり20 kHZの 、OUTMOD 3、すなわちCCR 1、SET、CCR 0、RESETにカウントされる.P 2.3 の を できます.
void Init_timer(void)
{
P2SEL |= BIT3;
P2DIR |= BIT3;
CCR0 = 50;
CCR1 = 25;
TACCTL1 = OUTMOD_3;
TACTL = TASSEL_2 | MC_1 | TACLR; //SMCLK TA
}
3.ADテスト:AD り み に1つのLEDを し、オシロスコープがLEDの が1 msであることを する.TA OUT 1は0.05 msであるため、AD は0.05 msごとに1 Num_of_Results=10、10 の を するには0.5 ms、LED は0.5*2=1 ms
void Init_ADC(void)
{
P2DIR = 0xFF;
P2OUT = 0x00;
P6SEL |= 0x01; // ADC P6.0 A0
ADC12CTL0 = ADC12ON+SHT0_1; // ADC,
ADC12CTL1 = SHP+CONSEQ_2+SHS_1; //
//ADC12CTL1 = ADC12SSEL_3+ADC12DIV_0; //ADC SMCLK 1MHZ
//
ADC12MCTL0 = INCH_0;
ADC12IE = 0x0001; //
}
4. :(1)MSCではなく、シングルチャネルシーケンス を した 、 ごとにSHIでトリガしてほしいというのは、タイマーTA OUT 1 の ち がりエッジでトリガし、 はできない(2)ADC 12のカーネルクロックを せずに、 エラーを してもよいが、 は であり、 のサンプリング が しているのか、 である
 
 

#include
#include
#define Num_of_Results 10
int results[Num_of_Results] = {0};

void Init_clk(void);
void Init_timer(void);
void Init_ADC(void);

//******************** ***************************
void main(void)
{
WDTCTL =WDTPW + WDTHOLD; //

//P1SEL |= (BIT2+BIT6);
//P1DIR |= (BIT2+BIT6);
//P2OUT |= 0xf0;
//P5SEL |= BIT5+BIT4;
//P5DIR |= BIT5+BIT4;

Init_clk();
Init_ADC();
Init_timer();
ADC12CTL0 |= ENC; //
_BIS_SR(GIE); //

while(1)
{
}//while
}//main

#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned int index = 0;
results[index++] = ADC12MEM0; // Move results
if (ADC12MEM0 < 0x7FF)
P2OUT &= ~0xF0;
else
P2OUT |= 0xF0;
if (index == Num_of_Results)
{
index = 0;
P2OUT ^= 0X01;
}
}