Страница 469 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:31:00
Аlex
Читал.
dzrkot писал(а):
Gudd-Head писал(а):Почитайте про вектор прерываний и что происходит в МК когда происходит разрешённое прерывание.
я не могу найти толковый источник)))
Вам сказали - ищите в Даташите, всё там есть.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:34:15
Gudd-Head
dzrkot писал(а):Всётаки я очень надеялся что мне на простом примитивном языке это подскажут, и в голове вся картина соберётся воедио.
Вектор прерываний — это адреса ячеек памяти программ, которые загружаются в счётчик команд при возникновении прерывания.
Другими словами, МК начинает выполнять команды, расположенные по соотв. адресу прерывания.
Т.е. если у вас будет прерывание DMA, то будет выполняться команда по адресу 0FFE4h.
Обычно вектор прерываний содержит команды безусловного перехода на области памяти, где непосредственно находятся процедуры обработки прерываний.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:35:44
dzrkot
Сейчас просто не надо меня критиковать, скажите правильно ли я переварил) для конкретного моего случая)
В таблице векторов прерываний я нашёл флаг TA0CCR0 CCIFG0, который отвечает за таймер ТА0, по его адресу 0FFECh в IAR в самом хедере этого контера я нашёл такую строку

Код: Выделить всё

#define TIMER0_A0_VECTOR    (54 * 2u) /* 0xFFEC Timer0_A5 CC0 */
т.е. TIMER0_A0_VECTOR - это и есть то, что должно быть в процедуре обработки этого вектора т.е. в Си это будет иметь вид:

Код: Выделить всё

__interrupt void TIMER0_A0_VECTOR (void) 
        {
        //операторы
        }
т.е. для того же DMA я делаю примерно тоже самое, но у меня будет отдельная конструкция

Код: Выделить всё

__interrupt void DMA_VECTOR (void) 
        {
        //операторы
        }

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:46:00
ibiza11
что такое прерывание в общих чертах Вы, полагаю уже знаете.
Я могу чуть подробнее рассказать:
В контроллере есть таблица векторов, в которой находятся команды перехода на обработчики прерываний.
Обработчик прерывания - обычная функция, выполняемая в прерывании.
Контроллер в обычном режиме двигает указатель по программной памяти и последовательно считывает и выполняет команды, одна за другой. В момент возникновения какого-либо события (например переполнения счетчика таймера) устанавливается аппаратный флаг. В случае если разрешены глобальные прерывания и разрешено прерывание от возникшего события, указателю программной памяти аппаратно присваивается значение из области таблицы векторов прерываний. Какое именно значение зависит от возникшего события. По соответствующему адресу должен стоять вектор, который направляет указатель на обработчик прерывания.... надеюсь понятно))))


PS пока строчил, тут уже все объяснили)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:46:50
dzrkot
Gudd-Head писал(а):
dzrkot писал(а):Всётаки я очень надеялся что мне на простом примитивном языке это подскажут, и в голове вся картина соберётся воедио.
Вектор прерываний — это адреса ячеек памяти программ, которые загружаются в счётчик команд при возникновении прерывания.
Другими словами, МК начинает выполнять команды, расположенные по соотв. адресу прерывания.
Т.е. если у вас будет прерывание DMA, то будет выполняться команда по адресу 0FFE4h.
Обычно вектор прерываний содержит команды безусловного перехода на области памяти, где непосредственно находятся процедуры обработки прерываний.
спасибо)
тогда дальше, вот по этому адресу 0FFE4h , у меня что находится, просто грубо говоря пустая ограниченная область памяти, в которую я уже пишу код, и грубо говоря оперирую именно ей. А если мне надо скажем по прерыванию что-то посчитать для main, то мне придётся обращаться к локальным переменным в main через указатели(или ссылки в С++), ну т.е. это по сути будет (с точки зрения написания кода) просто функция, которая ничего не возвращает и не имеет аргументов?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:48:18
dzrkot
ibiza11 писал(а):что такое прерывание в общих чертах Вы, полагаю уже знаете.
Я могу чуть подробнее рассказать:
В контроллере есть таблица векторов, в которой находятся команды перехода на обработчики прерываний.
Обработчик прерывания - обычная функция, выполняемая в прерывании.
Контроллер в обычном режиме двигает указатель по программной памяти и последовательно считывает и выполняет команды, одна за другой. В момент возникновения какого-либо события (например переполнения счетчика таймера) устанавливается аппаратный флаг. В случае если разрешены глобальные прерывания и разрешено прерывание от возникшего события, указателю программной памяти аппаратно присваивается значение из области таблицы векторов прерываний. Какое именно значение зависит от возникшего события. По соответствующему адресу должен стоять вектор, который направляет указатель на обработчик прерывания.... надеюсь понятно))))

PS пока строчил, тут уже все объяснили)
спасибо, не всё, вы как раз таки ответили на то, что я ещё спросил) хотя про указатели итп было бы интересно понять..)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:50:33
vitalik_1984
т.е. TIMER0_A0_VECTOR - это и есть то, что должно быть в процедуре обработки этого вектора т.е. в Си это будет иметь вид:
В общем и целом правильно.В каждом компиляторе свой синтаксис ообработки прерываний.
И самое важное, не разрешайте прерываний, которые не описаны соответствующей конструкцией. Иначе случится неописанная ситуация в виде регулярного ресета.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 14:58:15
dzrkot
vitalik_1984 писал(а):
т.е. TIMER0_A0_VECTOR - это и есть то, что должно быть в процедуре обработки этого вектора т.е. в Си это будет иметь вид:
В общем и целом правильно.В каждом компиляторе свой синтаксис ообработки прерываний.
И самое важное, не разрешайте прерываний, которые не описаны соответствующей конструкцией. Иначе случится неописанная ситуация в виде регулярного ресета.
ну таки кстати у меня не компилируется это

Код: Выделить всё

__interrupt void TIMER1_A0_VECTOR(void) 
        {

        }
, а если поменять TIMER1_A0_VECTOR на любую тарабарщину, то всё ок, т.е. что-то я не так делаю....нашёл пример с #pragma vector= ...о там для AVR ... бду дальше разгадыватьвсё это))

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 15:09:53
dzrkot
вообщем-то нашёл такой пример

Код: Выделить всё

//директиве #pragma vector= нужно указать номер вектора 
// прерывания, список векторов задан в файле iotiny45.h
#pragma vector=PCINT0_vect
//имя PCINT0_routine взято произвольно
__interrupt void PCINT0_routine(void)
{
   __no_operation();
}
непонятно как в данном случае работает #pragma vector= и почему имя PCINT0_routine взято произвольно...
Но по сути моя конструкция должна выглядеть примерно так:

Код: Выделить всё

#pragma vector = TIMER1_A0_VECTOR
__interrupt void TIMER_A0(void)                                                 // прерывание по флагу TA0CCR0 CCIFG0
        {

        }

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 19:06:27
vitalik_1984
Так смотрите внимательнее
Там же написано, что нужно делать #pragma vector=Вектор
Эта директива компилятора она указывает, что следующая процедура является обработкой прерывания по данному вектору.
Любое произвольное название и будет названием этой процедуры.
А если не писать #pragma vector= то нужно пользоваться стандартными функциями
Что это за вектор такой?
TIMER1_A0_VECTOR
В студии есть TIMER1_COMPA_vect может все таки пересмотрите еще раз что там описано в вашем заголовочнике?
И вообще си чувствительно к регистру.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 06, 2013 22:09:47
dzrkot
vitalik_1984 писал(а):Так смотрите внимательнее
Там же написано, что нужно делать #pragma vector=Вектор
Эта директива компилятора она указывает, что следующая процедура является обработкой прерывания по данному вектору.
Любое произвольное название и будет названием этой процедуры.
А если не писать #pragma vector= то нужно пользоваться стандартными функциями
Что это за вектор такой?
TIMER1_A0_VECTOR
В студии есть TIMER1_COMPA_vect может все таки пересмотрите еще раз что там описано в вашем заголовочнике?
И вообще си чувствительно к регистру.
В студии? Я использую IAR for MSP430
там в хедере...
#include "msp430f5435A"

Код: Выделить всё

#define TIMER0_A0_VECTOR    (54 * 2u) /* 0xFFEC Timer0_A5 CC0 */
вот прямо оттуда её копирую

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс дек 08, 2013 11:49:42
Chettuser
Необходимо преобразование на verilog'е
Как я понимаю есть 2 пути - описание математикой и подключением примитива 74185?

Короче говоря - проект на CPLD. Есть поле из 8-ми двоично-десятичных счётчиков и 8-ми регистров с выводом на 7-сегментный дешифратор. Имеет ли смысл переводить систему на двоичные счётчики, или преобразование Bin2BCD сожрет больше памяти чем при использовании двоично-деесятичной системы?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс дек 08, 2013 12:34:51
Kavka
Если я правильно уловил вашу мысль, то вам необходимо считать и выводить 8 десятичных цифр. Если да, то bin2bcd на 8 разрядов потребует существенно больший объём по ресурсам ПЛИС нежели 8 двоично-десятичных счётчиков - надо будет в цикле делить на 10 с вычитанием... Это IMHO.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс дек 08, 2013 12:45:16
Chettuser
Значит я в правильном направлении думаю )

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 11:37:50
dzrkot
в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...т.е. их надо все обязательно инициализировать ручками? А что будет если их не инициализировать, они будут в случайном состоянии?
И ещё вопрос, входы, которые висят в воздухе - написано, что лучше их инициализировть как выходы, и программно сажать на землю/питание через подтягивающий резистор, но не сказано что из этого лучше...вообще я подумал что мб есть какое-то правило хорошего тона там или как-то принято это...?Ну т.е. что-то конкретное считается лучшим или принято из этого.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 14:31:34
BCluster
dzrkot писал(а):в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...
Не вижу проблемы ) Если ножки не используются - можно с ними ничего не делать, ибо совершенно все равно что там будет, особенно если они настроены на выход. В случае если они используются, в любом случае их надо инициализировать.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 14:44:00
dzrkot
BCluster писал(а):
dzrkot писал(а):в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...
Не вижу проблемы ) Если ножки не используются - можно с ними ничего не делать, ибо совершенно все равно что там будет, особенно если они настроены на выход. В случае если они используются, в любом случае их надо инициализировать.
Ну первое - думал мало ли...правила хорошего тона там..))
Со вторым то понятное дело))

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 16:39:54
Mem
oleg63m писал(а):
Mem писал(а):Спасибо за информацию, проверю.
Изображение
все верно, подключаемся к компьютеру, запускаем TCOM и активировав TXD измеряем цепи, с ним связанные (1, 2, 3 ХР3)
если все соответствует уровням...
При перемычке 1-2:

1. 5В
2. 0В
3. 4.82В

При перемычке 2-3:
1. 0В
2. 0В
3. 4.82В

Транзистор цел :))) , выпаял разгромив его. Резисторы целы, получается транзистор не открывается. Найду замену снова замерю.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 17:05:46
Mem
Поставил BC556, теперь на 2 ноге 4.82В Изображение

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн дек 09, 2013 17:32:39
oleg63m
я уже и забыл, когда это говорил. :)))
ну всеравно, если получилось-поздравляю :beer: :beer: :beer: