Например TDA7294

Форум РадиоКот • Просмотр темы - MSP430 + внутренний таймер
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 26, 2025 01:00:55

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 02:07:50 
Открыл глаза

Зарегистрирован: Чт окт 28, 2010 11:20:39
Сообщений: 71
Рейтинг сообщения: 0
Добрый вечер!
Рабтаю с микроконтроллером MSP430F5438IPZ в среде разработки IAR.
Пытаюсь обработать прерывания от таймера, но не получается, не знаю в чём дело....
Что я делаю:
1. Регистр TACCR0 = 0xFFFF (это регистр сравнения, если счетчик дойдёт до этого значения, возникает переполнение и реализуется прерывание)
2. регистр TA0R = 0x0000 (этот регистр счетчик инкрементируется, при равном значении с регистром TACCR0 генерируется прерывание)

теперь идет настройка регистра TA0CCTL0:
3. TA0CCTL0 |= 0x0020; //Настройка битов режима работы - непрерыный режим.... MCx
4. TA0CCTL0 |= 0x0003; // настройка битов ожидания и разрешения прерывания TAIFG,
5. TA0CCTL0 |= 0x0200; Выбор источника тактирования Таймера А - 10 SMCLK


объявление функции обработки прерывания:
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
... пытаюсь мограть лампочками....
}


код программы:


#include "io430.h"
//Функция инициализации портов и регистров
void Initialization();
void main( void )
{
Initialization();

//Входим в бесконечный цикл
while(1)
{

}
}

void Initialization()
{
//Останавливаем сторжевой таймер
WDTCTL = WDTPW + WDTHOLD;

TA0R = 0x0000;
TA0CCTL0 = 0x0000;

//непрерывный режим таймер вверх
TA0CCTL0 |= 0x0020;
TA0CCTL0 |= 0x0003;
TA0CCTL0 |= 0x0200;

//Пределы счетчиков...
TA0CCR0 = 0xFFFF;



P10DIR = 0;
P10DIR |= 0xC0;
P10OUT = 0xC0;
}



добавил в окно наблюдения регистр TA0R, который должен инкрементироваться, но он не изменяется, и мк не переходит в функцию обработки прерывания ( лампочки не мигают).
Надеюсь всё подробно описал. Заранее спасибо за ответ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 08:34:00 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Настройки таймера следует производить в регистре TA0CTL.
Следует правильно выбрать SMCLK, от которого тактируется Таймер.
Следует разрешить прерывания (бит GIE в регистре SR).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 21:13:33 
Открыл глаза

Зарегистрирован: Чт окт 28, 2010 11:20:39
Сообщений: 71
Рейтинг сообщения: 0
1. Да, спасибо вы правы. Таймер заработал, регистр TA0R меняется, тактирование выбрал от SMCLK.
2. Теперь про прерывания....
бит GIE, поставит функция __bis_SR_register(GIE)?
я сделал так:
//Инициализация таймера
TA0CTL = 0x0000;
TA0R = 0;
//Пределы счетчиков...
TA0CCR0 = 0x8000;
//непрерывный режим таймер вверх
TA0CTL |= 0x0222; //Здесь мы убрали бит, что прерывание будем ждать...
//Разрешить прерывания
__bis_SR_register(GIE);
функцию обработки прерывания мы определеили так:


//Обработчик прерывания от таймера
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
P10OUT = P10OUT ^ 0xC0;
}

Но прерывание не происходит...


Последний раз редактировалось bishop-strip Вт дек 25, 2012 21:28:12, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 21:28:07 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Скорее всего это из-за того, что не сбрасывается флаг прерывания от таймера в прерывании. Попробуйте пройтись симулятором по шагам.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 21:30:31 
Открыл глаза

Зарегистрирован: Чт окт 28, 2010 11:20:39
Сообщений: 71
Рейтинг сообщения: 0
Ser60 писал(а):
Скорее всего не сбрасывается флаг прерывания. Попробуйте пройтись симулятором по шагам.

Спасибо за столь скорый ответ, я немного изменил формулировку вопроса..

1. Да, спасибо вы правы. Таймер заработал, регистр TA0R меняется, тактирование выбрал от SMCLK.
2. Теперь про прерывания....
бит GIE, поставит функция __bis_SR_register(GIE)?
я сделал так:
//Инициализация таймера
TA0CTL = 0x0000;
TA0R = 0;
//Пределы счетчиков...
TA0CCR0 = 0x8000;
//непрерывный режим таймер вверх
TA0CTL |= 0x0222; //Здесь мы убрали бит, что прерывание будем ждать...
//Разрешить прерывания
__bis_SR_register(GIE);
функцию обработки прерывания мы определеили так:


//Обработчик прерывания от таймера
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
P10OUT = P10OUT ^ 0xC0;
}


__bis_SR_register(GIE); здесь перестало зависать ( если по шагам) после того как я убрал бит TAIFG в регистре TA0CTL.
В функцию обработки прервания отладчик не заходит ( там стоит breakpoint)

Может быть я как-то не правильно для IAR определяю функцию обработки прервания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Вт дек 25, 2012 22:15:02 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Если хотите, чтобы произошло прерывание от таймера по достижении счетчиком значения в TA0CCR0, нужно разрешить прерываниe от канала 0 сравнения. Перепишите строчки кода как показано ниже
TA0CTL = TASSEL_2 + MC_1 + TACLR;
TA0CCTL0 = CCIE;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Ср дек 26, 2012 04:35:07 
Открыл глаза

Зарегистрирован: Чт окт 28, 2010 11:20:39
Сообщений: 71
Рейтинг сообщения: 0
Так, частично проблема решилась:
Я изменил строки инициализации таймера так:

//Инициализация таймер
TA1CTL = 0x0000;
TA1R = 0;
//Пределы счетчиков...
TA1CCR0 = 0xFFFF;
//непрерывный режим таймер вверх
TA1CTL |= 0x02E3;


Теперь прерывание генерится, отладчик останавливается в функции обработки прерывания, но проблема заключается теперь в том, что прерывание срабатывает каждый инкремент счетчика... тоесть не до того момента, когда TA1R будет равен TA1CCR0, а каждый раз, как TA1R будет изменяться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Ср дек 26, 2012 06:27:08 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Очень рекомендую прочитать еще раз внимательно секцию про таймер в ДШ - там все достаточно ясно написано. Посмотрите еще примеры программ для MSP430F5xx, скачайте их с сайтa TI. Ну а если ничего не получится, выложите сюда весь код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 + внутренний таймер
СообщениеДобавлено: Ср дек 26, 2012 21:12:02 
Открыл глаза

Зарегистрирован: Чт окт 28, 2010 11:20:39
Сообщений: 71
Рейтинг сообщения: 0
Вроде получилось:


//Инициализация таймера
TA1CCTL0 = CCIE;
TA1CCR0 = 0xFFFF;
TA1CTL = TASSEL_2 + MC_2 + TACLR + ID0 + ID1;
__enable_interrupt(); //Разрешение прерываний



//Обработчик прерывания от таймера
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_A (void)
{
......
}

Вот так. Ser60, спасибо Вам за содействие в этом деле!)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y