Jump to content

    

progmcu

Участник
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Этот пример от TI. Мне важно было точно получить стабильную выходную частоту 130 кГц. Поэтому именно внешний точный кварц использовал. эффект проявляется при частоте > 60-90 кГц на выходе микроконтроллера, когда используется переключение сигнала на выходе 'P1.1/TA0/A1'. Пришлось выполнять программно формирование частоты.
  2. #include "msp430x22x4.h" void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 |= XTS; // ACLK= LFXT1= HF XTAL BCSCTL3 |= LFXT1S1; // LFXT1S1 = 3-16Mhz do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set } while (IFG1 & OFIFG); // OSCFault flag still set? BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe) P1SEL |= 0x0E; // P1.1 - P1.3 option select P1DIR |= 0x0F; // P1.0 - P1.3 outputs TACCTL0 = OUTMOD_4 + CCIE; // TACCR0 toggle, interrupt enabled TACCTL1 = OUTMOD_4 + CCIE; // TACCR1 toggle, interrupt enabled TACCTL2 = OUTMOD_4 + CCIE; // TACCR2 toggle, interrupt enabled TACCR0 = 200; TACCR1 = 1000; TACCR2 = 10000; TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt enabled __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0 (void) { TACCR0 += 200; // Add Offset to TACCR0 } // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A1(void) { switch (TAIV) // Efficient switch-implementation { case 2: TACCR1 += 1000; // Add Offset to TACCR1 break; case 4: TACCR2 += 10000; // Add Offset to TACCR2 break; case 10: P1OUT ^= 0x01; // Timer_A3 overflow break; } }
  3. Использовал пример с сайта www.ti.com 'msp430x22x4_ta_09.c' - MSP430F22x4 Demo - Timer_A, Toggle P1.0-3, Cont. Mode ISR, HF XTAL ACLK При уменьшении загружаемой константы '1000' увеличиваем частоты на выходе микроконтроллера. При частоте больше 60 кГц необходимо смотреть фронты. При частоте около 100 кГц следующая картина: Полупериод _|-|_-|____________________|_|-|__ // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A1(void) { switch (TAIV) // Efficient switch-implementation { case 2: TACCR1 += 1000; // Add Offset to TACCR1 break; case 4: TACCR2 += 10000; // Add Offset to TACCR2 break; case 10: P1OUT ^= 0x01; // Timer_A3 overflow break; } }
  4. Использовал пример. Частотата внешнего кварца 8 Мгц. Необходимо сформировать аппаратно на пине процессора 130 кГц. Выполнил настройку таймера и источника тактовых сигналов. До частот ~40-50 кГц - нормальный меандр на выходе. Но при частотатах выше - полные чудеса: фронты расщепляются на импульсы и на других незадействованных выходах появляются импульсы от задействованного таймера. // P1.1/TA0|--> TACCR0 // P1.2/TA1|--> TACCR1 // P1.3/TA2|--> TACCR2 // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0(void) { TACCR0 += 200; // Add Offset to TACCR0 } // Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A1(void) { switch (TAIV) // Efficient switch-implementation { case 2: TACCR1 += 1000; // Add Offset to TACCR1 break; case 4: TACCR2 += 10000; // Add Offset to TACCR2 break; case 10: P1OUT ^= 0x01; // Timer_A3 overflow break; } } Как лечить не знаю. Пришлось программно выполнить формирование 130 кГц.
  5. Вот это дело! Благодарю всех. Смотрел обобщенное описание для семейства MSP430x2xx Family User's Guide (Rev. E) (slau144e.pdf, 2316 KB) http://www.ti.com/litv/pdf/slau144e
  6. Посмотрел. Это общий заголовок для всех msp430f1xxx и msp430f2xxx. Если смотреть заголовочный модели конкретной msp430x21x1.h, то для DCO есть определение, а для SVS нет.
  7. Чудеса... У меня msp430f2131. Хочется использовать SVS. Однако адрес управления 0x56h у SVS и DCO совпадают! Для DCO: Register Short Form Register Type Address Initial State DCO control register DCOCTL Read/write 056h 060h with PUC Для SVS: Register Short Form Register Type Address Initial State SVS Control Register SVSCTL Read/write 056h Reset with BOR И как его правильно использовать? В заголовочных файлах опредён только DCO.