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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

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

Сообщение Vov123 »

Пиши вот так

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

.def   temp = r16

ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)      
out SPH,temp
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Gudd-Head писал(а):ldi tmp, high(RAMEND); Set Stack Pointer to top of RAM
out SPH, tmp;
ldi r16, low(RAMEND);
out SPL, tmp;


Это я для самоконтроля распишу, а вы скажите, пожалуйста, так ли я понял или нет.

RamEnd = 0x85f = 1000 0101 1111

1000 0101 1111 = [0000 1000] [0101 1111] - [High] [Low] соответственно.

ldi tmp, high(RAMEND) Загрузка в tmp 0000 1000
out SPH, tmp Загрузка 0000 1000 в Stack Pointer High
ldi tmp, low(RAMEND) Загрузка в tmp 0101 1111
out SPL, tmp Загрузка 0000 1000 в Stack Pointer High

Vov123, так и написал, только High и Low не менял местами. Это принципиально?
Последний раз редактировалось Мikа Ср апр 17, 2013 11:38:43, всего редактировалось 1 раз.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

все правильно.
Ставим плюсы: )
Лютик
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Вт мар 25, 2008 22:10:23
Откуда: Минск

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

Сообщение Лютик »

Добрый!
Такая вот проблема: настраиваю ШИМ на меге16ой:

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

SETBIT(DDRD,4);//на выход
SETBIT(DDRD,5);//на выход
TCCR1A=0xA1;//
TCCR1B=0x0A;//MODE 5 - FAST PWM 8 BIT

управляю ШИМом "OCR1AL=xxx".
Все работает, за исключением OCR1AL=0. В данном случае светодиод не гаснет полностью, а при подключении движка он гудит(через Н-мост). В чем может быть дело?

п.с. посмотрел на осцилографе при загрузке 0 все равно есть какая-то скважность, почему так?
после инициализации, то есть вроде все должно быть 0, все равно на выходе чтото есть =(

ответ http://www.radiokot.ru/forum/viewtopic.php?f=20&t=30098
Последний раз редактировалось Лютик Ср апр 17, 2013 14:01:41, всего редактировалось 2 раза.
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

парни, щас пытаюсь сделать прерывание на ATmega32, сначала хотел сделать по изменению сигнала на ножке INT0, потом по RESET.
Но нифига не получается.

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

ldi Temp1, 0b10000000 ;Глобальное разрешение прерываний
out SREG, Temp1


А дальше, чтобы, допустим, использовать прерывание по RESET, что надо сделать?

Я попробовал сделать так, как в статьях про бегущий огонек, но ниче не выходит.

Какие ещё настройки надо сделатЬ, чтобы изменение потенциала на RESET вызывало прерывание?
Последний раз редактировалось Мikа Ср апр 17, 2013 13:55:59, всего редактировалось 1 раз.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Мikа писал(а):чтобы изменение потенциала на RESET вызывало прерывание?

Жжоте, товарищ :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

А как надо было это правильно сказать? :))
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Лютик
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Вт мар 25, 2008 22:10:23
Откуда: Минск

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

Сообщение Лютик »

не знаю как в 32, но в остальных по ножке ресет Вы сможете вызвать перезагрузку контроллера, что ни есть прерывание. может я конечно, чего то не знаю, но ранее такого не встречал
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Наверное не так понял эту статью. Тогда такой же вопрос, но относительно прерывания INT_0.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Мikа писал(а):использовать прерывание по RESET, что надо сделать?
это "прерывание" вызывается автоматически, его не надо настраивать))) PC (Program Counter) устанавливается на адрес = 0 в памяти программ и программа начинается сначала)) по-человечески это называется сброс микроконтроллера)
выберите другой источник прерывания)
Ставим плюсы: )
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Выбрал, выбрал :) INT_0. Как я понял, из 44 страницы даташита и статьи про прерывания, 2 $002 INT0 External Interrupt Request 0 означает прерывание, по изменению сигнала на ножке INT0. Правильно? Соответственно по этой же схемке Изображение можно сделать на ногу INT0? Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei. Ну и, естесственно, установки метки int_0: на обработчик прерывания.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Мikа писал(а):Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei.

Там ещё выбирается по фронту/спаду/уровню будет прерывание. А вообще, почитайте ДШ и/или Евстифеева, погоняйте код в Студии прежде чем лезть на форум со своими вопросами.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Ну я, как бы гоняю код в студии и в контроллере. Читаю и мануал и статьи на эту тему. А зачем тогда форум, если не лезть на него со своими вопросами? Фронт\спад уровня, это изначальное 1 или 0 в регистре данной ножки? То есть в DDRx ставим 0 - делаем входом, а потом в PORTx ставим 1 или 0 в зависимости от того, на что хотим реагировать?
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Мikа, при всей терпимости к новичкам, я Вам советую почитать перевод даташита на какой-нибудь контроллер. Не надо переводить самостоятельно. В сети все есть. На первой странице гугла найдете то, что Вам нужно. Почему на форуме должны переписывать то, что уже написано в открытом доступе.
Все же Ваш вопрос относится к основам и это следует изучать самостоятельно!
Вот когда появятся конкретные вопросы по реализации, милости просим.
Например: не получается то-то и то-то, пытался так.... так..... так..... и даже так.... поиграл в проктолога-стоматолога..... не получается! Вот код: .... . Вот схема: .... Вот условия возникновения глюка....
Ставим плюсы: )
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

ДОброе утро, коты. Плз, с ходу не бейте, делаю как сказали, читаю, ищу, вникаю. Есть маленький вопросик относительно регистра SREG. По даташиту бит номер 7, с названием I отвечает за глобальное включение и выключение прерываний. - Всё ясно.

Но после прочтения описания регистра
СпойлерThe Global Interrupt Enable bit must be set for the interrupts to be enabled. The individual
interrupt enable control is then performed in separate control registers. If the Global
Interrupt Enable Register is cleared, none of the interrupts are enabled independent of
the individual interrupt enable settings. The I-bit is cleared by hardware after an interrupt
has occurred, and is set by the RETI instruction to enable subsequent interrupts. The Ibit
can also be set and cleared by the application with the SEI and CLI instructions, as
described in the instruction set reference.

есть два вопроса.

1). При вызывании прерывания, бит 7 "чистится" аппаратно. Т.е. во время обработки этого прерывания, другое прерывание уже сработать не сможет?

2). Команда RETI устанавливает бит 7, для возможности обработки последующих прерываний. - Это, вроде, понятно.

3). Бит 7 можно устанавливать и чистить командами SEI и CLI.
То есть

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

ldi Temp, 0b1000000
out SREG, Temp


Будет эквивалентно SEI.
Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
Аналогично при очистке бита.

И последний вопрос, относительно as described in the instruction set reference. в последнем предложении под спойлером. Я перевёл это на русский, но что это значит я не понял.

P.S. Очень надеюсь, что не вызову негатива, типа я лентяй, подайте мне всё на блюдичке. :dont_know:
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Мikа писал(а):Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?


Да, достачточно одной команды SEI или CLI.

Аналогично при очистке бита.

Мikа писал(а):as described in the instruction set reference. Я перевёл это на русский, но что это значит я не понял.


"как описано в руководстве по системе команд".
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Мikа писал(а):1). При вызывании прерывания, бит 7 "чистится" аппаратно. Т.е. во время обработки этого прерывания, другое прерывание уже сработать не сможет?

Да, не может. Но вы в обработке прерывания можете выставить бит I, и тогда другое прерывание может произойти.
В любом случае, если во время обработки первого прерывания произошло второе, то от него останется флаг. И после RETI от первого прерывания вызовется второе прерывание. Прерывание прерывания запрерывалось.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Доброе утро, Mika!
бить не буду)))
1) Да, верно, но только если не разрешить прерывания самостоятельно после входа в обработчик, выставляя бит I регистра SREG.
2) ... все верно, подтверждаю.
3) Утверждение "Бит 7 можно устанавливать и чистить командами SEI и CLI." верно.
НО код

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

ldi Temp, 0b1000000
out SREG, Temp
НЕ ЭКВИВАЛЕНТЕН команде SEI.
В коде Вы не только выставляете 7-ой бит регистра, но и еще СБРАСЫВАЕТЕ ОСТАЛЬНЫЕ, что непременно приведет к ошибке в случае переходов по условию и арифметических операциях.
вот этот код эквивалентен команде SEI:

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

in tmp, SREG
ori tmp, 0b10000000
out SREG, tmp

Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
Да, верно, достаточно одной SEI/CLI
as described in the instruction set reference = ... как описано в документе Instruction Set
Ставим плюсы: )
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Gudd-Head писал(а):В любом случае, если во время обработки первого прерывания произошло второе, то от него останется флаг.

Флаг - это 1 в регистре GIFR, правильно? Ещё не дочитал до других прерываний, но смею предположить, что раз в GIFR вписаны только прерывания INT, есть регистры с флагами других прерываний?
ibiza11 писал(а):НЕ ЭКВИВАЛЕНТЕН команде SEI.

Про эквивалентность я очень криво выразился. Написав этот кусочек когда я смотрел только на еденицу, а остальные нули держал в уме :) Написал именно так, а не через логическое ИЛИ, т.к. я про него, в принципе, знаю, но пока что на своём макете не использовал и не подумал об этой команде.

Спасибо за ответы, парни, всё прояснилось :) Пойду за новыми знаниями и вопросами :D
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Мikа писал(а):есть регистры с флагами других прерываний?
Да, верно. У каждого периферийного модуля заведен отдельный регистр под флаги прерываний, аббревиатура которого обычно оканчивается на ..FR(Flag Register) или ..SR(Status Register), но бывают и исключения... наверное))))) не помню сейчас.
Ставим плюсы: )
Ответить

Вернуться в «Разные вопросы по МК»