реклама на сайте
подробности

 
 
> Чудуса msp430f2252 Timer_A в режиме выдачи импульсов, При увеличении частоты на выходе фронт расщепляется!
progvlad
сообщение Oct 24 2008, 14:40
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 24-10-08
Пользователь №: 41 156



Использовал пример. Частотата внешнего кварца 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 кГц.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 24 2008, 14:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Давайте полный проект. А то непонятно как систему тактирования инициализировали и в каком режиме(ах) таймер используется?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 27 2008, 08:35
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(rezident @ Oct 24 2008, 17:56) *
Давайте полный проект. А то непонятно как систему тактирования инициализировали и в каком режиме(ах) таймер используется?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
progvlad
сообщение Oct 27 2008, 09:24
Сообщение #4





Группа: Новичок
Сообщений: 7
Регистрация: 24-10-08
Пользователь №: 41 156



#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;
}
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 10:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016