Проще прыгнуть в обработчик прерывания .BOB51 писал(а):и делаем соответствующую подпрограммку дрыголапа, инициирующую прерывание.
Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
Только именно под чистым ассемблером.
У автора вопроса АДУРИНА и, по всей вероятности, рамки ее функционала.
А там вызвать обработчик независимо от прерывания (без глубоковлезания в СИ)...
Пока так не изголялся на таком уровне...

У автора вопроса АДУРИНА и, по всей вероятности, рамки ее функционала.
А там вызвать обработчик независимо от прерывания (без глубоковлезания в СИ)...
Пока так не изголялся на таком уровне...
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
У автора вопрос ПОД ЧИСТЫМ АСМ
откуда вы взяли ардуина ? это я компилил через ардуину асмовскую вставку. просо мне так удобней
Как в чистом асме записать единицу в EIFR ?
Добавлено after 1 minute 54 seconds:
Faun как опытный асемблерщик может ответит ?
откуда вы взяли ардуина ? это я компилил через ардуину асмовскую вставку. просо мне так удобней
Как в чистом асме записать единицу в EIFR ?
Добавлено after 1 minute 54 seconds:
Faun как опытный асемблерщик может ответит ?
[uquote="alex68md",url="/forum/viewtopic.php?p=3637043#p3637043"]Как в чистом асме записать единицу в EIFR ?[/uquote]
Для чего? По даташит - никак. Запись единицы в биты EIFR приводит к сбросу этих битов. Запись нуля не оказывает на них никакого воздействия.
На практике я наблюдаю полное соответствие поведения МК и даташит.
Для чего? По даташит - никак. Запись единицы в биты EIFR приводит к сбросу этих битов. Запись нуля не оказывает на них никакого воздействия.
На практике я наблюдаю полное соответствие поведения МК и даташит.
EIFR - регистр аппаратного контроля состояния прерываний по INT0/INT1
Посему и возможные для него состояния:
аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено);
аппаратный сброс флага по выходу из подпрограммы обслуживания прерывания или программный сброс флага.
Просто надо почитать даташит да понять чего внутри МК происходить должно.
Да разницу между программно-управляемыми и аппаратно-управляемыми ресурсами МК освоить.

Посему и возможные для него состояния:
аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено);
аппаратный сброс флага по выходу из подпрограммы обслуживания прерывания или программный сброс флага.
Просто надо почитать даташит да понять чего внутри МК происходить должно.
Да разницу между программно-управляемыми и аппаратно-управляемыми ресурсами МК освоить.
- Реклама
[uquote="BOB51",url="/forum/viewtopic.php?p=3637117#p3637117"]...аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено)...[/uquote]Уточню. Взвод флага прерывания осуществляется независимо от разрешенности оного. Условие выполнено - флаг аппаратно взводится. Программа решает сама как реагировать на это событие.
alex68md, если бы пояснил зачем это надо, то наверняка найдется альтернативый способ решения "хотелки".
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
друзья я все это понимаю (и знаю) как он взводиться и как он сбрасываеться.
просто у меня какимто чюдом получилось его вручную взвести через асм код. но на следующий день уже не получалось.
вот просто доказать атмелу что мы можем даже программно его взвести
както же у меня получилось, не переглючило же меня так сильно
утром делал на свежую голову.
а применение всегда найдеться - подняли флаг, сработало прерывание (хотя фактически понятно что нет). ну хотя это можно и еденицу записать на ногу прерывания.
больше ради спортивного интереса конечно.
просто у меня какимто чюдом получилось его вручную взвести через асм код. но на следующий день уже не получалось.
вот просто доказать атмелу что мы можем даже программно его взвести
както же у меня получилось, не переглючило же меня так сильно
а применение всегда найдеться - подняли флаг, сработало прерывание (хотя фактически понятно что нет). ну хотя это можно и еденицу записать на ногу прерывания.
больше ради спортивного интереса конечно.
а проект сохранился?
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 1495
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Чудес не бывает, эти флаги программно только сбрасываются. Сама внутренняя логика такова.
А почему бы и не поставить?
К примеру настроено прерывание по перепаду а сам порт предварительно выставлен как выход с уровнем 1.
Ежли аппаратно такой фокус пройдет - программа пишет туда 0 и тем самым ставит флаг в 1 (улетая в прерывание).
Только по факту это то же самое программное прерывание, только по своей же лапке.

Спутать - вполне можно с переусердия - флаги то на тех же местах, что и биты регистров порта...

К примеру настроено прерывание по перепаду а сам порт предварительно выставлен как выход с уровнем 1.
Ежли аппаратно такой фокус пройдет - программа пишет туда 0 и тем самым ставит флаг в 1 (улетая в прерывание).
Только по факту это то же самое программное прерывание, только по своей же лапке.
Спутать - вполне можно с переусердия - флаги то на тех же местах, что и биты регистров порта...
это был обман зренияalex68md писал(а):просто у меня какимто чюдом получилось его вручную взвести через асм код
это вряд лиalex68md писал(а):вот просто доказать атмелу что мы можем даже программно его взвести
потому что эта "поставка" делается не записью в регистр EIFR, как требуется по условию задачиBOB51 писал(а):А почему бы и не поставить?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
ладно чтото никак не получается. наверно показалоось.
а подскажите такой вопрос. в первой строчки тут все понятно :
asm volatile("sbi %0, %1" : : "I" (_SFR_IO_ADDR(PORTB)), "I" (PB5));
asm volatile("sbi %0, 0x07" : "I" (_SFR_IO_ADDR(PORTB)):);
1) для чего вообще используется секция вывод и в каких случаях? после первой :
2) почему во второй строчке после первой : в секции вывод унас определение аргумента %0 , почему не после второго : ?
а подскажите такой вопрос. в первой строчки тут все понятно :
asm volatile("sbi %0, %1" : : "I" (_SFR_IO_ADDR(PORTB)), "I" (PB5));
asm volatile("sbi %0, 0x07" : "I" (_SFR_IO_ADDR(PORTB)):);
1) для чего вообще используется секция вывод и в каких случаях? после первой :
2) почему во второй строчке после первой : в секции вывод унас определение аргумента %0 , почему не после второго : ?
ARV
Ёжли человек с перегрузу
случайно вместо EIFR впишет
соответствующий порт ввода/вывода (или еще какого....),
а затем по утрячку при анализе вчерашнего ... поправится...

Ведь от "волшебного исходника" у него следов не осталось...

Ёжли человек с перегрузу
случайно вместо EIFR впишет
соответствующий порт ввода/вывода (или еще какого....),
а затем по утрячку при анализе вчерашнего ... поправится...
Ведь от "волшебного исходника" у него следов не осталось...
alex68md, а не могли бы Вы сначала почитать документацию, а только после этого задавать вопросы?
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
Простонуб , т.е. если после этой инструкции переменная поменяет свое значение то она используется как вывод?
Ок, тогда куда писать порт, как первая или вторая строчка? У всех в примерах в нете порт как инпут, несмотря на то что по мануалу мы же меняем значение этой переменной и получается надо как во второй строчке?
Добавлено after 2 minutes 41 second:
BOB51, если это вы мне, то многократно уже озвучивалось , просто строчка sbi port,pin. Посмотрите мои ответы внимательно.
Ок, тогда куда писать порт, как первая или вторая строчка? У всех в примерах в нете порт как инпут, несмотря на то что по мануалу мы же меняем значение этой переменной и получается надо как во второй строчке?
Добавлено after 2 minutes 41 second:
BOB51, если это вы мне, то многократно уже озвучивалось , просто строчка sbi port,pin. Посмотрите мои ответы внимательно.
alex68md, с точки зрения компилятора, порт - это указатель, причем константный. И его значение мы не меняем. В ассемблере меняем то, на что ссылается этот указатель.
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24
ПростоНуб, хорошо так и как правильнЕЕ ? первая или вторая запись ?
alex68md, правильнее первая, так как никаких переменных, известных компилятору, и никаких регистров, используемых компилятором, в коде не изменяется.
- Сообщения: 278
- Зарегистрирован: Сб янв 03, 2015 21:03:24



