У меня вопрос такой.
Надо оцифровывать 2 канала P3.0 (A5) и P3.7(A7).
Хочу за одно вздёргивание бита ADC10SC получить 2 измерения. И что бы эти измерения скопировались в структуру АВ с помощью DTC.
Код
#include "msp430x21x2.h"
struct _AB
{
unsigned int A2;
unsigned int A1;
unsigned int A0;
}AB;
void Pause (unsigned int time) { while (time-- > 0);}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P2SEL = BIT6 + BIT7;
// сброс флага "сбой генератора" и запрет прер-ия OFIE при не исправ-ти DC-генератора
IE1 &= ~OFIE;
IFG1 &= ~OFIFG;
// предустановка желаемой частоты DCOCLK = 8MГц
_BIC_SR(OSCOFF); // включить генератор LFXT1
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL1 |= XT2OFF + XTS + DIVA_0; // источник такт-ия MCLK и SMCLK - DCOCLK, MCLK = DCOCTL/1, SMCLK = DCOCTL/1
BCSCTL3 = LFXT1S_2;
// инициализация LFXT1
do
{
IFG1 &= ~OFIFG;
Pause(5000);
}while (IFG1 & OFIFG);
BCSCTL2 = SELM_3 //SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */
+DIVM_0
+DIVS_3;
ADC10CTL1 =// INCH_5
+ INCH_7
/// + ADC10DIV_7
+ ADC10SSEL_2 // MCLK = 8МГц
+ CONSEQ_1
;
ADC10CTL0 |= ADC10SHT_3
// + MSC
+ ADC10ON;
ADC10AE0 = BIT7
+ BIT5
;
ADC10DTC0 |= ADC10CT;
ADC10DTC1 = 2;
ADC10SA = (unsigned int ) &AB.A2;
ADC10CTL0 |= ENC;
while (1)
{
ADC10CTL0 &= ~ENC;
while (BUSY & ADC10CTL1);
ADC10CTL0 |= ENC + ADC10SC; // Start sampling
_NOP();
}
}
struct _AB
{
unsigned int A2;
unsigned int A1;
unsigned int A0;
}AB;
void Pause (unsigned int time) { while (time-- > 0);}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P2SEL = BIT6 + BIT7;
// сброс флага "сбой генератора" и запрет прер-ия OFIE при не исправ-ти DC-генератора
IE1 &= ~OFIE;
IFG1 &= ~OFIFG;
// предустановка желаемой частоты DCOCLK = 8MГц
_BIC_SR(OSCOFF); // включить генератор LFXT1
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL1 |= XT2OFF + XTS + DIVA_0; // источник такт-ия MCLK и SMCLK - DCOCLK, MCLK = DCOCTL/1, SMCLK = DCOCTL/1
BCSCTL3 = LFXT1S_2;
// инициализация LFXT1
do
{
IFG1 &= ~OFIFG;
Pause(5000);
}while (IFG1 & OFIFG);
BCSCTL2 = SELM_3 //SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */
+DIVM_0
+DIVS_3;
ADC10CTL1 =// INCH_5
+ INCH_7
/// + ADC10DIV_7
+ ADC10SSEL_2 // MCLK = 8МГц
+ CONSEQ_1
;
ADC10CTL0 |= ADC10SHT_3
// + MSC
+ ADC10ON;
ADC10AE0 = BIT7
+ BIT5
;
ADC10DTC0 |= ADC10CT;
ADC10DTC1 = 2;
ADC10SA = (unsigned int ) &AB.A2;
ADC10CTL0 |= ENC;
while (1)
{
ADC10CTL0 &= ~ENC;
while (BUSY & ADC10CTL1);
ADC10CTL0 |= ENC + ADC10SC; // Start sampling
_NOP();
}
}
Но ничего не выходит. Измерения смотрю в Watch.
Измерять один канал у меня получается. Но не переконфигурировать же мне постоянно модуль.
Посоветуйте как его настроить?