|
|
  |
F147 - два таймера от разных частот |
|
|
|
Sep 16 2009, 05:15
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 5-05-05
Из: Зеленоград
Пользователь №: 4 762

|
С MSP430 в жизни работал мало... вероятно, где-то туплю... Пускаю таймер А от SMCLK, все идет на ура... после этого надо пустить тамер B от ACLK... тут происходит "затык"... стоит однажды контроллеру (F147) войти в прерывание таймера B, как все уходит в полный даун... даже в пустое... ради эксперимента пустил В от того же SMCLK, все работает прекрасно... уже перестраховался, чищу все регистры... странно как-то все это... Вот код, может кто подскажет? Код void TimerInit(void) { // timer A init TACCR2 = 0x00; TACTL = TASSEL_2+TACLR; // SMCLK, clear TAR, UP timer mode, int enable, /1 TACCTL0 |= CCIE; // CCR0 interrupt enabled TACCTL1 = 0x00; TACCTL2 = 0x00; TACCR0 = SMCLK_FREQ_HZ/FREQ_INTERRUPT; TACTL &= ~TAIFG; TACCTL0 &= ~CCIFG; TACTL |= MC_1+TAIE; // timer B init TBCCR2=0x00; TBCTL = TBSSEL_1+TBCLR+ID_2; // ACLK, clear TAR, UP timer mode, int enable, /4 TBCCTL0 |= CCIE; // CCR0 interrupt enabled TBCCTL1 = 0x00; TBCCTL2 = 0x00; TBCCTL3 = 0x00; TBCCTL4 = 0x00; TBCCTL5 = 0x00; TBCCTL6 = 0x00; TBCCR0 = ACLK_FREQ_HZ; TBCTL &= ~TBIFG; TBCCTL0 &= ~CCIFG; TBCTL |= MC_1+TBIE; }
#pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0_Int(void) { ... return; }
#pragma vector=TIMERB0_VECTOR __interrupt void Timer_B0_Int(void) { ... return; }
|
|
|
|
|
Sep 16 2009, 05:42
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(stalko @ Sep 16 2009, 08:15)  Вроде все чисто, только непонятно, зачем дергать CCR до CTL. Может в теле прерывания что-то не то? Типа вечного цикла, сложного индексирования, вложенных прерываний и проч. Может, лишние прерывания разрешаются. Заглушки на прерываниях стоят? Отладчик есть?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 16 2009, 05:47
|

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

|
Цитата(stalko @ Sep 16 2009, 09:15)  TACTL = TASSEL_2+TACLR; // SMCLK, clear TAR, UP timer mode, int enable, /1
TBCTL = TBSSEL_1+TBCLR+ID_2; // ACLK, clear TAR, UP timer mode, int enable, /4 Всё-таки разные источники тактирования, хотя я лично никакого криминала не вижу. Скорее всего, проблема не здесь Кстати, return() в конце прерывания ставить не обязательно. PS: пользуйтесь тегами [code], читать будет удобнее pps: сорри, невнимательно прочитал условие задачи... Это... а ACLK не забыли случайно запустить?
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Sep 16 2009, 05:56
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 5-05-05
Из: Зеленоград
Пользователь №: 4 762

|
Цитата(Dog Pawlowa @ Sep 16 2009, 09:42)  Вроде все чисто, только непонятно, зачем дергать CCR до CTL. Я же говорю... понимание уже не помогает, начались эксперименты методом научного тыка Цитата(Dog Pawlowa @ Sep 16 2009, 09:42)  Может в теле прерывания что-то не то? Типа вечного цикла, сложного индексирования, вложенных прерываний и проч. Может, лишние прерывания разрешаются. Заглушки на прерываниях стоят? Отладчик есть? Тело прерывания тамера B - пока пустое... и с ним то не идет, какой уж тут код? Цитата(MrYuran @ Sep 16 2009, 09:47)  Всё-таки разные источники тактирования, хотя я лично никакого криминала не вижу. ... Это... а ACLK не забыли случайно запустить? Да не... ACLK тикает всеми своими 32к как родной... вижу его на 50-й ноге осцилом... Забыл уточнить - MCLK = DCO (5Мгц), SMCLK = MCLK/4. Вдруг имеет какую-то роль... хотя и не должно...
|
|
|
|
|
Sep 16 2009, 06:57
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 5-05-05
Из: Зеленоград
Пользователь №: 4 762

|
Цитата(MrYuran @ Sep 16 2009, 10:48)  А я до настоящего момента был уверен, что у меня ТА от ACLK в текущем проекте тактируется... Посмотрел - них..чего себе! TACTL = TASSEL1 | TACLR; TBCTL = TBSSEL1 | TBCLR | MC_2; // Непрерывный режим, SMCLK Да, приближаясь к финишу, забываешь, с чего начинал... Эмммм... не понял глубину мысли... больше года без отпуска неблагоприятно сказываются на психике и интеллектуальных способностях... Код TACTL = TASSEL_2+TACLR; // SMCLK, clear TAR, UP timer mode, int enable, /1 ... TACTL |= MC_1+TAIE; ... TBCTL = TBSSEL_1+TBCLR+ID_2; // ACLK, clear TAR, UP timer mode, int enable, /4 ... TBCTL |= MC_1+TBIE; ... из h-ника #define TASSEL_2 (2*0x100) /* Timer A clock source select: 2 - SMCLK */ #define TBSSEL_1 (1*0x0100) /* Clock Source: ACLK */ Наверное, сегодня я безнадежен?  не сразу заметил в фразе что "у меня"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|