vekt (04.06.2008 20:27, просмотров: 10824)
Скажите, кто-нибудь врубал AD7714 от msp430? Испытываю трудности с включением микросхемы. Подаю нужные уровни, обеспечиваю синхронизацией и msp430f169 перестает контролироваться отладчиком. Пробовал выдавать 1 Мгц через таймер А без прерываний, пробовал выводить SMCLK наружу - один и тот же результат. Такое ощущение, что как только ad7714 начинает выводить DRDY, возникает какая-то лажа. IAR Debugger иногда упоминает стек.
Код такой.
#define CS 0x01 // P1.0
#define DRDY 0x02 // P1.1
#define MCLK 0x04 // P1.2
#define BUFFER 0x08 // P1.3
#define STBY 0x10 // P1.4
#define RESET 0x20 // P1.5
#define SYN 0x40 // P1.6
#define POL 0x80 // P1.7
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
Set_DCO();
BCSCTL2 |= SELM_1 + DIVS_2; // MCLK = DCO, SMCLK = DCO/4
WDTCTL = WDT_MDLY_0_5;
TBCCTL0 = CCIE; // CCR0 interrupt enabled
TBCCR0 += 5000;
TBCTL = TBSSEL_2 + MC_2; // SMCLK, contmode
P5SEL |= 0x20; // SMCLK выведен наружу
IE1 |= WDTIE;
_BIS_SR(GIE);
P1DIR |= BUFFER + CS + STBY + RESET + SYN + POL;
P1OUT |= CS + SYN + STBY;
P1OUT &= ~(POL);
P1OUT &= ~RESET;
_BIS_SR(LPM0_bits + GIE);
P1OUT |= RESET;
while(1){
_BIS_SR(LPM0_bits + GIE);
}
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
TBCCR0 += 5000; // Add Offset to CCR0
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
_BIC_SR_IRQ(LPM0_bits);
}