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

 
 
> Помогите начинающему чайнику с msp430
4sak3n
сообщение May 15 2008, 18:24
Сообщение #1





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



Здравствуйте! Помогите пожалуйста разобраться, что я не так делаю.Есть простенькая прога для msp430:
Код
#include "msp430x20x3.h"
#include <intrinsics.h>

  unsigned int i = 0;

void main(void)
{
  WDTCTL= WDTPW+WDTHOLD;
  P1DIR|=0x01;
  TACCR0=65500;
  P1OUT|=0x01;
  TACTL|=TACLR+ID_2+TASSEL_2+ID_1;
  TACCTL0|=CCIE;
  

__enable_interrupt();

  
while (1);
  }

#ifdef __IAR_SYSTEMS_ICC__
#if __VER__ < 200
interrupt[TIMERA0_VECTOR] void TimerA0_ISR(void)
#else
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0_ISR( void )
#endif
#endif

#ifdef __CROSSWORKS_MSP430
void TimerA0_ISR(void)   __interrupt[TIMERA0_VECTOR]
#endif

#ifdef __TI_COMPILER_VERSION__
__interrupt void TimerA0_ISR(void);
TIMERA0_ISR(TimerA0_ISR)
__interrupt void TimerA0_ISR(void)
#endif
  
{
  __disable_interrupt();
if (P1OUT == 0x00)

{ P1OUT|=0x01;
i+=500;
TACCR0-=i;
}
  else
  {P1OUT|=0x00;
    TACCR0-=i;
  }
__enable_interrupt();  
}

На обработчик прерывания можно в данном случае особо не обращать внимания, не в нем суть. Вроде как для инициализации таймера я пишу то, что надо. В симуляторе же (и на эмуляторе - ez430-F2013) видно ,что счетный регистр таймера TAR никак вообще не изменяется...
Соответственно вопросы:
1) Как заставить таймер таки считать?

2) Насчет прерывания - как проверить работу обработчика? (разрешение прерывания по сравнению - CCIE установлено), руками ставлю CCIFG (ведь он аппаратно ставиться, когда таймер досчитывает до значения в TACCR0), прерывания разрешаю - результат - никакой....

Помогите плз!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение May 15 2008, 19:42
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(4sak3n @ May 15 2008, 21:24) *
В симуляторе же (и на эмуляторе - ez430-F2013) видно ,что счетный регистр таймера TAR никак вообще не изменяется...
В иаровском симуляторе периферия не симулируется. Если не работает и в эмуляторе - надо искать ошибки в программе.

Цитата(4sak3n @ May 15 2008, 21:24) *
1) Как заставить таймер таки считать?
Правильно его принициализировать. Почитайте это сообщение, там как раз про использование "+" в формировании констант. Может ошибка в этом.

Цитата(4sak3n @ May 15 2008, 21:24) *
2) Насчет прерывания - как проверить работу обработчика? (разрешение прерывания по сравнению - CCIE установлено), руками ставлю CCIFG (ведь он аппаратно ставиться, когда таймер досчитывает до значения в TACCR0), прерывания разрешаю - результат - никакой....
В эмуляторе поставить точку останова на начало обработчика. Запустить.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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