Страница 468 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн дек 02, 2013 20:21:47
coredumped
Попросил Cortex-M4 на частоту больше 160МГц - не нашел. А они есть. Даже больше 100Мгц нашлись только Atmel и Infinion. А куда делись ST, NXP, TI?
Не доделано. Пока фтопку

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 10:29:17
dzrkot
что лучше использовать при настройке регистров, логическое ИЛИ,или операцию '+' ....?)) т.е.:
TA0CTL|=TASSEL1|MC0|TAIE;
или
TA0CTL=TASSEL1+MC0+TAIE;
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 10:43:10
ibiza11
лучше побитовое ИЛИ
исключает ошибки при случайном повторении одного и того же значения.
вот например в коде случайно указали дважды бит MC0
Код: Выделить всё
#define TASSEL1 0x01
#define MC0 0x02
#define TAIE 0x04
TA0CTL = TASSEL1 + MC0 + TAIE + MC0; // здесь результат будет равен = 0x01 + 0x02 + 0x04 + 0x02 = 0x09 = 0b00001001
TA0CTL |= TASSEL1 | MC0 | TAIE | MC0; // здесь результат будет равен = 0x01|0x02|0x04|0x02 = 0x07 = 0b00000111
в итоге в первом выражении получим установку битов №0 и №3, а во втором - №0, №1 и №2, что собственно и хотелось сделать.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 10:57:25
dzrkot
спасибо, я ещё вроде где-то читал (или не знаю в памяти осталось откуда-то) что ИЛИ быстрее выполняется, сейчас конечно это уже неактуально в век МГц, но всё же интересно знать так ли это)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 11:07:55
ibiza11
что побитовое ИЛИ, что сложение в операциях между двумя регистрами выполняются равное кол-во времени.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 13:52:06
dzrkot
очередной глупый вопрос))
Допустим у меня таймер, в котором куча флагов, и по ним вызываются прерывания, +к примеру прерывание по кнопке ну т.е. внешнее
Как это описывается в коде...т.е. каждое прерывание для себя имеет конструкцию
Код: Выделить всё
__interrup void event1(void)
{
//операторы
}
__interrup void event2(void)
{
//операторы
}
//и так далее
или это вызывает 1 обработчик прерываний
Код: Выделить всё
__interrup void eventGlobal(void)
{
//операторы както расписанные по условиям для тех или иных прерываний
}
...вот в голове не очень укладваетсякак это всё выглядит и как устроено, т.е. как например 1 событие вызывает такое-то прерывание...
ну т.е. я выставляю кучу флагов и в swithc() проверяю и по флагам уже всё делаю....
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 13:54:32
Gudd-Head
Почитайте про вектор прерываний и что происходит в МК когда происходит разрешённое прерывание.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 13:56:20
dzrkot
Gudd-Head писал(а):Почитайте про вектор прерываний и что происходит в МК когда происходит разрешённое прерывание.
я не могу найти толковый источник))) я умею пользоваться гуглом, но блин...))
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 13:57:43
Gudd-Head
Даташит на контроллер вам в руки.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 13:58:45
dzrkot
Gudd-Head писал(а):Даташит на контроллер вам в руки.
вот там как-раз подразумевают что я уже втыкаю что это такое)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:01:57
Gudd-Head
Да ну? Ссылочку можно?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:08:04
dzrkot
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:15:11
Gudd-Head
dzrkot писал(а):http://www.ti.com/lit/ug/slau208m/slau208m.pdf
MSP430x5xx and MSP430x6xx Family
User's Guide
1.3.6 Interrupt Vectors:
.... See the device-specific
data sheet for the complete interrupt vector list.
Чуете разницу? Так что не надо...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:17:50
dzrkot
я дал 2 ссылки,в одной User Guide, в другой собственно сам Datasheet.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:24:00
Аlex
dzrkot писал(а):в другой собственно сам Datasheet
который Вы, скорее всего не открывали. А если и открыли, то даже не пытались найти таблицу векторов, иначе наткнулись бы на неё в самом начале даташита.
Эти МК мне незнакомы, но мне понадобилось секунд 30, чтобы найти эту таблицу - стр. №16
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт дек 06, 2013 14:24:54
dzrkot
вы читали мой вопрос и вообще что я написал?)
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 пока строчил, тут уже все объяснили)