Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сбылась мечта идиота - приехали программатор и SAM7S256
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Страницы: 1, 2, 3
zheka
Господа, прочел сегодня в умной книжке следующее:
"... по умолчанию все выходы настроены как входы со включенными пуллап резисторами, подтянутыми к плюсу питания. Если подключить такой вход к плюсу питания, то последствия будут непредсказуемыми..."

Где-то уже на форуме читал жалобу, что мол, подключенное к этому входу реле пр включении питания срабатывает. Оно и понятно - вывод настроен как вход, но включенный резистор подает на ключ этого реле плюс питания вызывающий срабатывание.

Но мне непонятно то что написано в книжке - какие могут быть последствия? Ну подам я плюс питания на вход, подтянутый к плюсу - что будет? по факту - это шунтирование внутреннего резистора, не более того.

Ну и раз уж все так страшно - чем руководствовались разработчики, раз допустили такую лажу? Какой-то скрытый смысл в этом есть?
Ну и последний вопрос - в книге это писалось про SAM7X серию. А в каких еще атмеловских ARM7 этот баг присутствует?
zltigo
Цитата(zheka @ Apr 27 2010, 14:37) *
Господа, прочел сегодня в умной книжке

Думаю, что это была книжка Редькина или ему подобного безмозглого клона "писателя".
aaarrr
В книжке, конечно, написана чушь, если Вы дословно ее цитируете. Проблемы будут в том случае, если на вход с включенным pull-up'ом подать напряжение выше напряжения питания IO, например, 5V при VDDIO 3.3V. Тогда через pull-up'ы начнет течь ток на VDDIO, что может вызвать его повышение и выход за разрешенные границы.

Цитата(zheka @ Apr 27 2010, 16:37) *
Ну и раз уж все так страшно - чем руководствовались разработчики, раз допустили такую лажу? Какой-то скрытый смысл в этом есть?

Это у них надо бы спросить.

Цитата(zheka @ Apr 27 2010, 16:37) *
Ну и последний вопрос - в книге это писалось про SAM7X серию. А в каких еще атмеловских ARM7 этот баг присутствует?

Во всех SAM7. В новых SAM3, кстати, тоже, но там это багом не является, т.к. входы не толерантны к 5V.
zheka
Цитата
Думаю, что это была книжка Редькина


Точно. Он самый. А ведь как легко этот Редискин читается, жаль что чушь пишет.
Посоветуйте что-нибудь из литературы? ПРичем мнебы какую-нибудь литературку, ориентированную на использование языка С для ARM.


Ну а если пофантазировать какие еще проблемы с этим пуллапом могут быть? Когда действительно нужно быть осторожным?
aaarrr
Цитата(zheka @ Apr 27 2010, 18:33) *
Ну а если пофантазировать какие еще проблемы с этим пуллапом могут быть? Когда действительно нужно быть осторожным?

Фантазировать не нужно, а следует посмотреть раздел Electrical Characteristics DS, и обратить, например, внимание еще и на токи pull-up'ов.
zheka
Господа, решился я таки засесть за ARM7.
Заказал программатор http://www.mcutool.ru/products/debug/arm2.aspx и отладочную плату http://www.megachip.ru/item.php?item_id=540212
Каковы с учетом моего железа плюсы и минусы указанных сред программирования? Боюсь сделать неправильный выбор, а потом привыкнуть, как в свое время привык к CodeVision.
aaarrr
Оба пакета наделены приличными компиляторами и совершенно убогими средами. Если нет привычки к IAR'у, то я бы рекомендовал Keil.
andrewlekar
IAR как IDE мне очень нравится.
igorenja
Цитата(andrewlekar @ May 11 2010, 11:23) *
IAR как IDE мне очень нравится.

Чем?
mempfis_
Цитата(zheka @ May 10 2010, 19:38) *
Господа, решился я таки засесть за ARM7...


Думаю при выборе компилятора важнее всего скорость освоения и сложность настройки проектов.
Пробовал IAR и KEIL для ARM. KEIL освоил быстро и легко, но IMHO это продукт на уровень ниже чем IAR. IAR посложнее в освоении но его производит и поддерживает более солидная фирма (по крайней мере набор компиляторов под разные платформы впечатляет), чаще выходят новые версии, есть примеры, можно скачать вылеченные версии, широкий спектр настроек.

К KEIL претензий не имею но для работы остановился на IAR.
zheka
Сложных проектов у меня в ближайшее время не предвидится. Надо всего-то переделать существующий проект реализованный на AVR, так как быстродействия AVR в связи со сменой дисплея не хватает. И учитывая что хочется побыстре, наверное лучше KEIL?
mempfis_
Цитата(zheka @ May 11 2010, 10:04) *
Сложных проектов у меня в ближайшее время не предвидится. Надо всего-то переделать существующий проект реализованный на AVR, так как быстродействия AVR в связи со сменой дисплея не хватает. И учитывая что хочется побыстре, наверное лучше KEIL?


Ну учитывая что ARM это не AVR то переделка в любом случае будет значительной (появится стартап, по другому устроены прерывания, другая идеология установки/сброса битов в регистрах и т.д.). На фоне всех этих глобальных изменений ознакомление со свойствами и настройками компилятора может быть каплей в море по отношению ко всем проблемам с которыми вы можете столкнутся.

На всякий случай если выберете иар 5.41 выложу свой проектик моргания светодиодами по прерывания от periodic interval timer (PIT).
Там полностью рабочий и настроенный проект. Только нужно будет в настройках линкера указать путь к файлу flash.icf который лежит в папке board. Ну и в файле board.h указать свой процессор
aaarrr
Цитата(mempfis_ @ May 11 2010, 10:52) *
IAR посложнее в освоении но его производит и поддерживает более солидная фирма (по крайней мере набор компиляторов под разные платформы впечатляет)

IAR более солидная фирма чем ARM? У ARM, кстати, есть выбор - Keil для микроконтроллеров и прочего low- и middle-end, и мощный универсальный пакет RVDS.
kosyak©
А не могли бы Вы дать развернутую характеристику RVDS? Чем от keil'a отличается?
Сам пользовал и IAR и Keil - остановлися на IAR'е - он мне как то ближе smile.gif
aaarrr
Цитата(kosyak© @ May 11 2010, 12:54) *
А не могли бы Вы дать развернутую характеристику RVDS? Чем от keil'a отличается?

- Поддерживает все ядра
- Включает более продвинутый отладчик
- Не содержит лишних "рюшечек" в виде MCU Database

Компиляторы одинаковые, т.е. если работать с микроконтроллерами, и не прыгать выше 926-го ядра, то Keil подходит больше.
zheka
ДОброго времени суток, господа!
Вот и я делаю первые шаги в освоении ARM7. Сразу понял - как хорошо, что я все-таки сразу купил и программатор и отладочную плату. По крайней мере сэкономлю кучу времени, а денег не жаль.

Плата - OLIMEX SAM7-P256 c контроллером AT91SAM7S256.
Установил я себе KEIL 4.10 http://rutracker.org/forum/viewtopic.php?t=2305709
Подключил отладчик, запустил простейший пример blinker, который мне при загрузке подсунул KEIL. ЗАпустил отладку. Подсоединил осциллограф, дабы засвидетельствовать блиньканье и удивился. Идут импульсы - по фронту плюс 0.5 вольт, по спаду - минус 3.3 вольт. Это как? Я ожидал видеть плюсовые импульсы. И ноль ожидал видеть нулем. Кстати, те выходы, которые в программе не задействованы - на них действительно ноль. А я уже собрался светодиоды напаивать - JTAG конечно хорошо, но от "визуальной" отладки никогда не откажусь.


Осциллограмму прилагаю.
zltigo
Цитата(zheka @ May 11 2010, 19:01) *
Это как?

Это значит, что надо начинать освоение осциллографа smile.gif
zheka
уважаемый zltigo. Варианта два:
1. я не знаю азов осциллографии.
2. я достаточно хорошо для начинающего (кажется так называется этот раздел) знаю основы работы с осциллографом, но столкнулся с чем-то что мне простительно не знать.


Так вот если (первый вариант==true), то я должен был столкнуться с этими же проблемами и при работе с AVR. КОль вы такой умный, могли бы и об этом подумать. Вы же язвите. Комплексы детства?
mdmitry
Для осциллографа ключевые слова: постоянная составляющая, открытый вход, закрытый вход.
aaarrr
Цитата(zheka @ May 11 2010, 20:01) *
...Кстати, те выходы, которые в программе не задействованы - на них действительно ноль.

А должна быть "1". Сдается мне, что земля осциллографа все-таки подключена к +3.3V smile.gif
mrKirill
Цитата(zheka @ May 11 2010, 22:50) *
Так вот если (первый вариант==true), то я должен был столкнуться с этими же проблемами и при работе с AVR.

Совершенно не обязательно. Знаю одного товарища, работает с AVR инженером (!!!), а пользоваться осциллографом как таковым и не умеет...


PS. Если он прочитает эти мои слова - пускай ему будет стыдно smile.gif
zheka
Цитата
А должна быть "1". Сдается мне, что земля осциллографа все-таки подключена к +3.3V


Вам прислать фото, где земля осциллографа подключена к ножке, на которой имеется подпись - GND, или на слово поверите? Могу видео выслать. Ну и так - на всякий случай - первоначально я цеплял крокодил земли осциллографа к металлической части разъема COM-порта на отладочной плате. Да, непрофессионально, но там таки минус.
mrKirill
А вход открытый или закрытый?
zheka
Вот черт....
Я из-за вас разнервничался и крокодилом замкнул две соседние ножки - GND и VREF. Светодиод питания на мгновение погас - как при КЗ. И наверное я спалил стабилизатор LM1117, ибо он теперь при входном питании 12 вольт на выходе дает 5.9 вольт.
Но - чудо!!! Горелым от чипа не запахло, импульсы на выходах идут с той же частотой, только они равны 5.9 вольт. KEIL отказывается работать с ним, предупреждая, что J-LINK будет поврежден. ПРогрмма J-LINK ARM тоже при загрузке предупреждает что высокое напряжение, но тем не менее, ядро видит и распознает. ПРограмма в проце, как я уже писал, шуршит, а ведь написано в даташите - "ABSOLUTE maximum operating voltage - 4.0 вольт."
mrKirill
Ваша невнимательность...
Учитесь признавать свои ошибки smile.gif
zheka
Цитата
Ваша невнимательность...
Учитесь признавать свои ошибки


Признаю только свою криворукость на нервной почве. Но другого выхода, кроме как подсоединить крокодила на штырь в опасной близости к VREF, дабы доказать кое-кому что я не идиот и землю осциллографа цепляю именно к земле платы, у меня не было. По закону Мэрфи неприятность случилась. Впрочем, с другой стороны спасибо aaarrr за эту идею - я взял другую заведомо рабочую плату с АВР и обнаружил что картина осциллографии та же.

Боюсь что ошибку придется признать не мне, а уважаемому zltigo. Ибо в итоге причина заключалась в предположенном мной пункте 2. А именно - глючил осциллограф. Я его выключил, включил и перезапустил софт. Все стало на свои места. На спаде 0 вольт, на фронте - напряжение питания.

А выводы я делаю в очередной раз одни и те же:
1. Профессионализм не всегда отягощен вежливостью по отношению к менее опытным собеседникам, к сожалению наоборот.
2. Если человек отсылает к мануалам и матчасти - значит его настроение находится где-то посередине между "хочу как-то обозначить себя" и "хочу дать дельный совет". Это я по поводу обвинений меня в незнании осциллографии. Да, я знаю ее поверхностно, но логики мне хватило чтобы понять, что не умей я пользоваться осциллографом - у меня теже проблемы были бы и с АВР. До дающих советы профи это не дошло - как же, перед глазами возможность плюнуть в невежду.

Была где-то здесь тема - у автора перестали вдруг программироваться ATMegи. Сколько плевков было в его адрес, сколько посылов к мануалам, сколько грамотеев искали соринки в разводке платы, в организации питания. И абсоютно пофиг что автор с пеной у рта объяснял - я 3 года раньше так делал, я и раньше так разводил платы, я вообще блокировочные конденсаторы по питанию не ставил - все получалось. В итоге оказалось, что автор купил новый комп и поставил туда плату расширения c LPT портом, а комп новый, быстрый. Вот и не успевал Byte Blaster за компом. Изготовление USB Petka полностью решило проблему.

ОДнако!!!
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.
mrKirill
Цитата
ОДнако!!!
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.

Верх дилетантства использовать абы какие режимы работы РЭК...
Было вполне верно послать Вас читать DS.

PS. Прежде чем пенять на zltigo стоило бы "руки выпрямить" и перестать нервничать...
aaarrr
Цитата(zheka @ May 11 2010, 22:08) *
Боюсь что ошибку придется признать не мне, а уважаемому zltigo. Ибо в итоге причина заключалась в предположенном мной пункте 2. А именно - глючил осциллограф. Я его выключил, включил и перезапустил софт. Все стало на свои места. На спаде 0 вольт, на фронте - напряжение питания.

Ну, с кем не бывает. Вот только обнаружив отрицательные напряжения на выводах, я бы прежде всего крепко задумался о правильности подключения и исправности измерительных приборов, ибо взяться подобному безобразию там решительно неоткуда, чудес не бывает.

Цитата(zheka @ May 11 2010, 22:08) *
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.

А что ему не работать? Вот на ядро подайте 6В, тогда посмотрим smile.gif
zltigo
Цитата(zheka @ May 11 2010, 19:50) *
уважаемый zltigo. Варианта два:
1. я не знаю азов осциллографии.
2. я достаточно хорошо для начинающего (кажется так называется этот раздел) знаю основы работы с осциллографом, но столкнулся с чем-то что мне простительно не знать.

Выберете любой пункт.
Цитата
Вы же язвите.

Ни в малейшей степени - просто констатация того непреложного факта, что отрицательного напряжения там НЕТ. Что Вы там со своим осциллографом сотворили мене неведомо, а гадать просто не берусь.
zheka
Цитата
Верх дилетантства использовать абы какие режимы работы РЭК...


Пардон, вы и здесь лажаете в риторике. DS я уже читал - см. выше ("не более 4 вольт").
А этот абы какой режим я специально не использую. Я собственно тогда и понял, что спалил LM1117, когда подключив в очередной раз плату увидел на осциллографе импульсы + 6 вольт. После пары секунд шока я потрогал микросхему еще раз взглянукл на осциллограф и отключил питание. Где криминал и дилетантство?
mrKirill
Цитата(zheka @ May 12 2010, 00:24) *
Где криминал и дилетантство?
Вот в этом
Цитата
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.
zheka
Цитата
Вот только обнаружив отрицательные напряжения на выводах, я бы прежде всего крепко задумался о правильности подключения и исправности измерительных приборов,


Это вы, знающий АРМ. А я новичок, ожидающий любых сюрпризов от нового камня.

Цитата
Ни в малейшей степени - просто констатация того непреложного факта, что отрицательного напряжения там НЕТ.Что Вы там со своим осциллографом сотворили мене неведомо.



Не обманывайте. Вы тут же написали "Это значит, что надо начинать освоение осциллографа ".
Могу согласиться лишь с тем, что глюков осциллографа вы предположить не могли. Но и не в праве были ставить диагноз "незнание матчасти".
zltigo
Цитата(zheka @ May 11 2010, 21:29) *
Вы тут же написали "Это значит, что надо начинать освоение осциллографа ".

Все именно так и есть - понакрутили неведомо что в осциллографе вот и все. Это значит, что надо начинать освоение осциллографа. Все так и есть.
zheka
Цитата
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.


Ну если радость от того, что кто-то, кроме вас идиот, останавливает всякое мышления, для вас пишу пошагово:
1. Случайно замыкаю GND и VREF - получаю RESET. (проц в это время работает от 6 вольт, я об этом не знаю)
2. Не отключая плату, подключаю устройство на AVR, щупаю осциллографом (проц в это время работает от 6 вольт, я об этом не знаю)
3. Вижу ту же лажу на AVR, понимаю, что дело в осциллографе (проц в это время работает от 6 вольт, я об этом не знаю)
4. Перезагружаю софт, и осциллограф, щупаю плату с АВР, вижу нормальные сигналы (проц в это время работает от 6 вольт, я об этом не знаю)

п.п.1-4 - около 1 минуты

5. Щупаю осциллографом AT91SAM7s256 - вижу 6-ти вольтовые импульсы.
охреневание после п.5 ~ 2-3 секунды.
6. ОТключаю плату, трогаю микросхему - еле теплая.
7. Несмотря на то что плата отключена, понимаю что "6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт." И НЕ ВИЖУ В ЭТОМ НИКАКОГО ДИЛЕТАНСТВА, а лишь отсутствие тактового генератора в воспитании оппонента.

Спасибо. Свои глупые вопросы продолжу завтра, когда заменю стабилизатор. Кого я раздражаю, можете в тему не заходить.

Цитата
Все именно так и есть - понакрутили неведомо что в осциллографе вот и все. Это значит, что надо начинать освоение осциллографа. Все так и есть.


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

Хм.. насколько я знаю, в ARM есть встроенный стабилизатор, который наверное и спас ядро от 6 вольт. Значит наверное периферия могла погореть. Но ведь порты не погорели...
zltigo
Цитата(zheka @ May 11 2010, 21:41) *
Кого я раздражаю, можете в тему не заходить.

Дело обстоит несколько иначе - Вы раздражены sad.gif. Насчет 6V - бесследно оно не проходит sad.gif - будьте морально готовы к отказам.
zheka
Ех... всегда готов!!! К счастью на плате больше ничего чувствительного к 6 вольтам нет.
aaarrr
Цитата(zheka @ May 11 2010, 22:54) *
Ех... всегда готов!!! К счастью на плате больше ничего чувствительного к 6 вольтам нет.

6V - это всего-навсего 1.5 от Absolute Maximum, едва ли что-то из портов сгорело. Просто в будущем старайтесь быть аккуратнее.
Сергей Борщ
Цитата(aaarrr @ May 11 2010, 22:59) *
6V - это всего-навсего 1.5 от Absolute Maximum, едва ли что-то из портов сгорело.
Есть SAM7S64. Тоже 6В подал и тоже из-за сгоревшего стабилизатора. Из ОЗУ работает без нареканий, флеш не шьется.
aaarrr
Да, как-то забыл, что VDDFLASH тоже 3.3V sad.gif
Вспомнилось кстати: LPC2106 при подаче на ядро 3.3V тоже вел себя как живой, только не шил флеш. С полчаса глюк искал. Но при нормальном питании все восстановилось.
mdmitry
По поводу осциллографа: у некоторых есть дифференциальный режим работы входов и/или инверсия входа. Тип осциллографа и настройки органов управления хотелось бы узнать.
mrKirill
Цитата(mdmitry @ May 12 2010, 03:44) *
По поводу осциллографа: у некоторых есть дифференциальный режим работы входов и/или инверсия входа. Тип осциллографа и настройки органов управления хотелось бы узнать.

Ну судя по скрину сигнала похоже на софт от этого аппарата:
USB осциллограф DISCO
http://www.avtodiagnostika.com/images/moto...ter/usb_osc.jpg
http://usb-osc.narod.ru/osc.htm
zheka
mrKirill, с осциллографом вы угадали.

Сергей Борщ
Цитата
Есть SAM7S64. Тоже 6В подал и тоже из-за сгоревшего стабилизатора. Из ОЗУ работает без нареканий, флеш не шьется.


Во время вчерашних "экспериментов" я ресетил плату и отсоединял шлейф. КОнтроллер работал. Значит с флешью все в порядке. Кстати, может быть вы при 6 вольтах пытались флеш шить, а я нет?
Во всем нужно видеть плюсы. Из опасения что что-то сгорело я теперь в кратчайшие сроки начну разбираться со всеми узлами и проверять их, даже если они мне не нужны. ПРи работае с АВР я с такой необходимостью не сталкивался и как следствие - до сих пор не имею представления например, как работать со сторожевым таймером и аналоговым компаратором.

P.S. прошу прощения у всех за свою вчерашнюю нервозность.
zheka
Перепаял я стабилизатор, все нормально. Решил немного поиграться с кодом. Стандартный в KEIL UVision 4.03 пример blinky - не компилится. Пишет ошибку:
Цитата
Build target 'SAM7S RAM - ULINK'
compiling Retarget.c...
Retarget.c(11): error: #5: cannot open source input file "rt_misc.h": No such file or directory
Target not created


НАшел я поиском этот файл где-то далеко в подпапках, а куда копировать или где к нему прописать путь не нашел. Скопировал на всякий случай в папку Blinky - все равно не видит. Что делать?
Еще вопрос - все функции в пункте меню Debug работают уже со скомпилированными файлами? То есть если я внес изменения и выбрал Debug, в проц зашьется страый вариант?




И еще - в Options for target->debug->use в ниспадающем списке есть ulink, J-Link и еще что-то. Я выбираю J-Link. ОДнако в ниспадающем списке в верхнем горизонтальном меню во время отладки виден только ULINK, то есть SAM7S-FLASH ULINK, SAM7S-RAM ULINK и SAM7S-FLASH SAMICE. Почему так?
Седой
Цитата(zheka @ May 12 2010, 20:11) *
...
то есть SAM7S-FLASH ULINK, SAM7S-RAM ULINK и SAM7S-FLASH SAMICE. Почему так?

Это названия "Project Targets", типов сборок ( типа Debug и Release) с разными опциями, меняются и добавляются в Project->Manage->Components,Environment>Books...
zheka
То есть Вашмим словами - ULINK это не название программатора?

Я указал путь к rt_misc.h явно. Теперь другая ошибка -
Цитата
.\Flash\Blinky.axf: Warning: L6310W: Unable to find ARM libraries.
.\Flash\Blinky.axf: Error: L6411W: No compatible library exists with a definition of startup symbol __main.


И это в простейшем примере, блин....
zheka
Проблема решена. Дело было в локализации KEIL в папке озаглавленной русскими буквами.
Включать и выключать светодиоды я научился.
Не получается почему-то запустить код в RAM (((
zheka
Как же все-таки сложно переделывать заложенные в голове азбучные истины.
В АВР было просто - PORTA.1=1, либо PORTA.1=0;
В ARM же CODR, SODR.
Объясните, если я пишу в CODR, то в SODR автоматом меняется значение и наоборот?
У меня складывается ассоциация как с кнопками - в АВР одна кнопка которую можно либо нажать либо отжать, а в SAM7 - две кнопки, из которых одновременно может быть нажата только одна, при нажатии одной, вторая автоматом отщелкивается. Я правильно понял логику работы пина?
Сергей Борщ
Цитата(zheka @ May 13 2010, 09:57) *
В АВР было просто - PORTA.1=1, либо PORTA.1=0;
Тяжелое наследие CVAVR. В стандартном С нет записи вида Var.Bit
Макросы имени Аскольда Волкова спрячут реализацию - что на AVR, что на ARM, что на PIC, что на MSP: on(LED); off(LED);
Цитата(zheka @ May 13 2010, 09:57) *
Объясните, если я пишу в CODR, то в SODR автоматом меняется значение и наоборот?
Нет. Из SODR читать вообще нельзя. Для чтения состояния там соседний регистр. Логику вы поняли правильно.


Цитата(zheka @ May 12 2010, 21:00) *
То есть Вашмим словами - ULINK это не название программатора?
Название программатора. Но ведь никто не запрещает этим же названием назвать совокупность значений опций среды, необходимых для сборки и отладки проекта именно этим программатором wink.gif
vallav
Цитата(zheka @ May 13 2010, 10:57) *
Как же все-таки сложно переделывать заложенные в голове азбучные истины.
В АВР было просто - PORTA.1=1, либо PORTA.1=0;
В ARM же CODR, SODR.
Объясните, если я пишу в CODR, то в SODR автоматом меняется значение и наоборот?
У меня складывается ассоциация как с кнопками - в АВР одна кнопка которую можно либо нажать либо отжать, а в SAM7 - две кнопки, из которых одновременно может быть нажата только одна, при нажатии одной, вторая автоматом отщелкивается. Я правильно понял логику работы пина?


Вы полагаете, это плохо, что в ARM кроме записи слова в регистр аппаратно реализованы так же и установка отдельных битов регистра в 1,
установка отдельных битов регистра в 0 и побитовая адресация регистров?
Вам эти расширенные возможности обращения с регистрами мешают?
Genadi Zawidowski
Цитата(zheka @ May 13 2010, 10:57) *
Как же все-таки сложно переделывать заложенные в голове азбучные истины.
В АВР было просто - PORTA.1=1, либо PORTA.1=0;
В ARM же CODR, SODR.
Объясните, если я пишу в CODR, то в SODR автоматом меняется значение и наоборот?
У меня складывается ассоциация как с кнопками - в АВР одна кнопка которую можно либо нажать либо отжать, а в SAM7 - две кнопки, из которых одновременно может быть нажата только одна, при нажатии одной, вторая автоматом отщелкивается. Я правильно понял логику работы пина?


А мне очень понравилось это расширение от привычной по AVR схемы. Вот как выглядят привычные подпрогаммы выдачи полубайтов:

Код
#define LCD_TARGET_PORT_S            (AT91C_BASE_PIOA->PIO_SODR)
#define LCD_TARGET_PORT_C            (AT91C_BASE_PIOA->PIO_CODR)

#define LCD_DIRECTION_PORT_S        (AT91C_BASE_PIOA->PIO_OER)
#define LCD_DIRECTION_PORT_C        (AT91C_BASE_PIOA->PIO_ODR)
#define LCD_INPUT_PORT            (AT91C_BASE_PIOA->PIO_PDSR) // was PINA

#define STROBE_BIT AT91C_PIO_PA31
#define WRITEE_BIT AT91C_PIO_PA1
#define ADDRES_BIT AT91C_PIO_PA0
#define DATAS_BITS (AT91C_PIO_PA26 | AT91C_PIO_PA25 | AT91C_PIO_PA24 | AT91C_PIO_PA23)
#define DATA_BIT_LOW 23        // какой бит данных младшй в слове считанном с порта


// sent four bits from d7..d4 of argument v
static void
ws1602_send4_high(uint_fast8_t v)
{
    LCD_TARGET_PORT_S = (v << (DATA_BIT_LOW - 4)) & DATAS_BITS;
    LCD_TARGET_PORT_C = ~ (v << (DATA_BIT_LOW - 4)) & DATAS_BITS;
}

// send four bits from d3..d0 of argument v
static void
ws1602_send4_low(uint_fast8_t v)
{
    LCD_TARGET_PORT_S = (v << (DATA_BIT_LOW - 0)) & DATAS_BITS;
    LCD_TARGET_PORT_C = ~ (v << (DATA_BIT_LOW - 0)) & DATAS_BITS;
}

static uint_least8_t
ws1602_pulse_strobe(void)
{
    uint_fast8_t v;

    LCD_TARGET_PORT_S = STROBE_BIT;     // activate EN signal
    ws1602_delay();
    v = (LCD_INPUT_PORT & DATAS_BITS) >> DATA_BIT_LOW;
    LCD_TARGET_PORT_C = STROBE_BIT;     // deactivate EN signal
    ws1602_delay();
    return v;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.