реклама на сайте
подробности

 
 
9 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Сбылась мечта идиота - приехали программатор и SAM7S256, Теперь нужен ликбез.
zheka
сообщение Apr 27 2010, 12:37
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, прочел сегодня в умной книжке следующее:
"... по умолчанию все выходы настроены как входы со включенными пуллап резисторами, подтянутыми к плюсу питания. Если подключить такой вход к плюсу питания, то последствия будут непредсказуемыми..."

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

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

Ну и раз уж все так страшно - чем руководствовались разработчики, раз допустили такую лажу? Какой-то скрытый смысл в этом есть?
Ну и последний вопрос - в книге это писалось про SAM7X серию. А в каких еще атмеловских ARM7 этот баг присутствует?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2010, 12:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ Apr 27 2010, 14:37) *
Господа, прочел сегодня в умной книжке

Думаю, что это была книжка Редькина или ему подобного безмозглого клона "писателя".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2010, 13:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



В книжке, конечно, написана чушь, если Вы дословно ее цитируете. Проблемы будут в том случае, если на вход с включенным 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.
Go to the top of the page
 
+Quote Post
zheka
сообщение Apr 27 2010, 14:33
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Думаю, что это была книжка Редькина


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


Ну а если пофантазировать какие еще проблемы с этим пуллапом могут быть? Когда действительно нужно быть осторожным?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 27 2010, 14:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Фантазировать не нужно, а следует посмотреть раздел Electrical Characteristics DS, и обратить, например, внимание еще и на токи pull-up'ов.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 10 2010, 16:38
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, решился я таки засесть за ARM7.
Заказал программатор http://www.mcutool.ru/products/debug/arm2.aspx и отладочную плату http://www.megachip.ru/item.php?item_id=540212
Каковы с учетом моего железа плюсы и минусы указанных сред программирования? Боюсь сделать неправильный выбор, а потом привыкнуть, как в свое время привык к CodeVision.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 10 2010, 22:50
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Оба пакета наделены приличными компиляторами и совершенно убогими средами. Если нет привычки к IAR'у, то я бы рекомендовал Keil.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение May 11 2010, 04:23
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



IAR как IDE мне очень нравится.
Go to the top of the page
 
+Quote Post
igorenja
сообщение May 11 2010, 05:38
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Цитата(andrewlekar @ May 11 2010, 11:23) *
IAR как IDE мне очень нравится.

Чем?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 11 2010, 06:52
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



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


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

К KEIL претензий не имею но для работы остановился на IAR.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 07:04
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Сложных проектов у меня в ближайшее время не предвидится. Надо всего-то переделать существующий проект реализованный на AVR, так как быстродействия AVR в связи со сменой дисплея не хватает. И учитывая что хочется побыстре, наверное лучше KEIL?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 11 2010, 08:09
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



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


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

На всякий случай если выберете иар 5.41 выложу свой проектик моргания светодиодами по прерывания от periodic interval timer (PIT).
Там полностью рабочий и настроенный проект. Только нужно будет в настройках линкера указать путь к файлу flash.icf который лежит в папке board. Ну и в файле board.h указать свой процессор
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 08:31
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mempfis_ @ May 11 2010, 10:52) *
IAR посложнее в освоении но его производит и поддерживает более солидная фирма (по крайней мере набор компиляторов под разные платформы впечатляет)

IAR более солидная фирма чем ARM? У ARM, кстати, есть выбор - Keil для микроконтроллеров и прочего low- и middle-end, и мощный универсальный пакет RVDS.
Go to the top of the page
 
+Quote Post
kosyak©
сообщение May 11 2010, 08:54
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



А не могли бы Вы дать развернутую характеристику RVDS? Чем от keil'a отличается?
Сам пользовал и IAR и Keil - остановлися на IAR'е - он мне как то ближе smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 09:00
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kosyak© @ May 11 2010, 12:54) *
А не могли бы Вы дать развернутую характеристику RVDS? Чем от keil'a отличается?

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

Компиляторы одинаковые, т.е. если работать с микроконтроллерами, и не прыгать выше 926-го ядра, то Keil подходит больше.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 16:01
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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

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


Осциллограмму прилагаю.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 11 2010, 16:34
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 11 2010, 19:01) *
Это как?

Это значит, что надо начинать освоение осциллографа smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 16:50
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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


Так вот если (первый вариант==true), то я должен был столкнуться с этими же проблемами и при работе с AVR. КОль вы такой умный, могли бы и об этом подумать. Вы же язвите. Комплексы детства?

Сообщение отредактировал zheka - May 11 2010, 16:51
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 11 2010, 17:06
Сообщение #19


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Для осциллографа ключевые слова: постоянная составляющая, открытый вход, закрытый вход.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 17:19
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 11 2010, 20:01) *
...Кстати, те выходы, которые в программе не задействованы - на них действительно ноль.

А должна быть "1". Сдается мне, что земля осциллографа все-таки подключена к +3.3V smile.gif
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 11 2010, 17:24
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(zheka @ May 11 2010, 22:50) *
Так вот если (первый вариант==true), то я должен был столкнуться с этими же проблемами и при работе с AVR.

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


PS. Если он прочитает эти мои слова - пускай ему будет стыдно smile.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 17:29
Сообщение #22


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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


Вам прислать фото, где земля осциллографа подключена к ножке, на которой имеется подпись - GND, или на слово поверите? Могу видео выслать. Ну и так - на всякий случай - первоначально я цеплял крокодил земли осциллографа к металлической части разъема COM-порта на отладочной плате. Да, непрофессионально, но там таки минус.
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 11 2010, 17:35
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



А вход открытый или закрытый?
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 17:37
Сообщение #24


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Вот черт....
Я из-за вас разнервничался и крокодилом замкнул две соседние ножки - GND и VREF. Светодиод питания на мгновение погас - как при КЗ. И наверное я спалил стабилизатор LM1117, ибо он теперь при входном питании 12 вольт на выходе дает 5.9 вольт.
Но - чудо!!! Горелым от чипа не запахло, импульсы на выходах идут с той же частотой, только они равны 5.9 вольт. KEIL отказывается работать с ним, предупреждая, что J-LINK будет поврежден. ПРогрмма J-LINK ARM тоже при загрузке предупреждает что высокое напряжение, но тем не менее, ядро видит и распознает. ПРограмма в проце, как я уже писал, шуршит, а ведь написано в даташите - "ABSOLUTE maximum operating voltage - 4.0 вольт."
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 11 2010, 17:40
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Ваша невнимательность...
Учитесь признавать свои ошибки smile.gif
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 18:08
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Ваша невнимательность...
Учитесь признавать свои ошибки


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

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

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

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

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

Сообщение отредактировал zheka - May 11 2010, 18:17
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 11 2010, 18:19
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



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

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

PS. Прежде чем пенять на zltigo стоило бы "руки выпрямить" и перестать нервничать...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 18:21
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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

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

А что ему не работать? Вот на ядро подайте 6В, тогда посмотрим smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 11 2010, 18:24
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 18:24
Сообщение #30


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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


Пардон, вы и здесь лажаете в риторике. DS я уже читал - см. выше ("не более 4 вольт").
А этот абы какой режим я специально не использую. Я собственно тогда и понял, что спалил LM1117, когда подключив в очередной раз плату увидел на осциллографе импульсы + 6 вольт. После пары секунд шока я потрогал микросхему еще раз взглянукл на осциллограф и отключил питание. Где криминал и дилетантство?
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 11 2010, 18:26
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(zheka @ May 12 2010, 00:24) *
Где криминал и дилетантство?
Вот в этом
Цитата
6 вольт питания - проц работает и не греется, исправно шлет на выходы импульсы амплитудой 6 вольт. Хвала разработчикам.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 18:29
Сообщение #32


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



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


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

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



Не обманывайте. Вы тут же написали "Это значит, что надо начинать освоение осциллографа ".
Могу согласиться лишь с тем, что глюков осциллографа вы предположить не могли. Но и не в праве были ставить диагноз "незнание матчасти".
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 11 2010, 18:35
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 11 2010, 21:29) *
Вы тут же написали "Это значит, что надо начинать освоение осциллографа ".

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 18:41
Сообщение #34


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
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 вольт. Значит наверное периферия могла погореть. Но ведь порты не погорели...

Сообщение отредактировал zheka - May 11 2010, 19:24
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 11 2010, 18:50
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 11 2010, 21:41) *
Кого я раздражаю, можете в тему не заходить.

Дело обстоит несколько иначе - Вы раздражены sad.gif. Насчет 6V - бесследно оно не проходит sad.gif - будьте морально готовы к отказам.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 11 2010, 18:54
Сообщение #36


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ех... всегда готов!!! К счастью на плате больше ничего чувствительного к 6 вольтам нет.

Сообщение отредактировал zheka - May 11 2010, 18:57
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 19:59
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 11 2010, 22:54) *
Ех... всегда готов!!! К счастью на плате больше ничего чувствительного к 6 вольтам нет.

6V - это всего-навсего 1.5 от Absolute Maximum, едва ли что-то из портов сгорело. Просто в будущем старайтесь быть аккуратнее.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 11 2010, 21:03
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(aaarrr @ May 11 2010, 22:59) *
6V - это всего-навсего 1.5 от Absolute Maximum, едва ли что-то из портов сгорело.
Есть SAM7S64. Тоже 6В подал и тоже из-за сгоревшего стабилизатора. Из ОЗУ работает без нареканий, флеш не шьется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2010, 21:19
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да, как-то забыл, что VDDFLASH тоже 3.3V sad.gif
Вспомнилось кстати: LPC2106 при подаче на ядро 3.3V тоже вел себя как живой, только не шил флеш. С полчаса глюк искал. Но при нормальном питании все восстановилось.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 11 2010, 21:44
Сообщение #40


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



По поводу осциллографа: у некоторых есть дифференциальный режим работы входов и/или инверсия входа. Тип осциллографа и настройки органов управления хотелось бы узнать.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
mrKirill
сообщение May 12 2010, 02:15
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(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
Go to the top of the page
 
+Quote Post
zheka
сообщение May 12 2010, 03:38
Сообщение #42


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



mrKirill, с осциллографом вы угадали.

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


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

P.S. прошу прощения у всех за свою вчерашнюю нервозность.

Сообщение отредактировал zheka - May 12 2010, 03:55
Go to the top of the page
 
+Quote Post
zheka
сообщение May 12 2010, 14:11
Сообщение #43


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Перепаял я стабилизатор, все нормально. Решил немного поиграться с кодом. Стандартный в 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. Почему так?
Go to the top of the page
 
+Quote Post
Седой
сообщение May 12 2010, 17:21
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(zheka @ May 12 2010, 20:11) *
...
то есть SAM7S-FLASH ULINK, SAM7S-RAM ULINK и SAM7S-FLASH SAMICE. Почему так?

Это названия "Project Targets", типов сборок ( типа Debug и Release) с разными опциями, меняются и добавляются в Project->Manage->Components,Environment>Books...
Go to the top of the page
 
+Quote Post
zheka
сообщение May 12 2010, 18:00
Сообщение #45


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



То есть Вашмим словами - 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 - May 12 2010, 18:04
Go to the top of the page
 
+Quote Post
zheka
сообщение May 12 2010, 19:21
Сообщение #46


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Проблема решена. Дело было в локализации KEIL в папке озаглавленной русскими буквами.
Включать и выключать светодиоды я научился.
Не получается почему-то запустить код в RAM (((
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 06:57
Сообщение #47


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Как же все-таки сложно переделывать заложенные в голове азбучные истины.
В АВР было просто - PORTA.1=1, либо PORTA.1=0;
В ARM же CODR, SODR.
Объясните, если я пишу в CODR, то в SODR автоматом меняется значение и наоборот?
У меня складывается ассоциация как с кнопками - в АВР одна кнопка которую можно либо нажать либо отжать, а в SAM7 - две кнопки, из которых одновременно может быть нажата только одна, при нажатии одной, вторая автоматом отщелкивается. Я правильно понял логику работы пина?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 13 2010, 07:28
Сообщение #48


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vallav
сообщение May 13 2010, 07:38
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



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


Вы полагаете, это плохо, что в ARM кроме записи слова в регистр аппаратно реализованы так же и установка отдельных битов регистра в 1,
установка отдельных битов регистра в 0 и побитовая адресация регистров?
Вам эти расширенные возможности обращения с регистрами мешают?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 13 2010, 07:49
Сообщение #50


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(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;
}


Сообщение отредактировал Genadi Zawidowski - May 13 2010, 07:54
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 08:17
Сообщение #51


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Нет. Из SODR читать вообще нельзя. Для чтения состояния там соседний регистр. Логику вы поняли правильно.

Я понимаю, что читать нельзя, читаю не я, а логическая схема порта, которая определяет будет ли на вызоде ноль или единица.
Под соседним регистром вы имеете ввиду ODSR?

Цитата
Вы полагаете, это плохо,


Я понимаю, что более гибкий доступ к функциям камня это хорошо, мне непонятно, почему так сделано. Ведь в любом слчуае выполняется оперция присваивания. Ну ведь логически проще написать ВЫХОД_Х=1, чем писать ПРИЗНАК_ВКЛЮЧЕННОСТИ=БИНАРНОЕ_ЧИСЛО_ОПРЕДЕЛЯЮЕЕ_НОМЕРА_ВЫХОДОВ_ПРИЗНАК_ВКЛЮЧЕННО
СТИ_КОТОРЫХ_НАСТРАИВАЕТСЯ или ПРИЗНАК_ВЫКЛЮЧЕННОСТИ=БИНАРНОЕ_ЧИСЛО_ОПРЕДЕЛЯЮЩЕЕ_НОМЕРА_ВЫХОДОВ_ПРИЗНАК_ВЫКЛЮЧЕ
ННОСТИ_КОТОРЫХ_НАСТРАИВАЕТСЯ. Опять таки, если я правильно понял логику работы.


Цитата
аппаратно реализованы так же и установка отдельных битов регистра в 1,
установка отдельных битов регистра в 0 и побитовая адресация регистров?

Разве в AVR такого не было?

Вопрос такой, каковы преимущества порта в ARM по сравнению с AVR, кроме того, что можно читать состояние пинов, как пишет Редькин, непосредственно на выходе?

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

Посмотрел я макросы Аскольда. А не слишком ли громоздко?
Например
Код
#define _setL(port,bit)         do { AT91C_BASE_PIO##port##->PIO_CODR = (1 << bit); } while(0)


Не до хрена ли это тактов займет?

Или вот еще круче - одно и то ж действие по-разному обзывается:
Код
#define _setH(port,bit)         do { AT91C_BASE_PIO##port##->PIO_SODR = (1 << bit); } while(0)
#define _clrL(port,bit)         do { AT91C_BASE_PIO##port##->PIO_SODR = (1 << bit); } while(0)


Ведь как я понял, по принципу двух исключающих друг друга конпок, SetH автоматом делает ClearL.

охох..голова кругом, сколько плясок с бубном...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 13 2010, 09:32
Сообщение #52


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zheka @ May 13 2010, 11:17) *
Под соседним регистром вы имеете ввиду ODSR?
Да. И в него можно писать состояние всего порта, как и в PORTx в AVR (записав единицы в нужные биты OWSR).
Цитата(zheka @ May 13 2010, 11:17) *
Я понимаю, что более гибкий доступ к функциям камня это хорошо, мне непонятно, почему так сделано. Ведь в любом слчуае выполняется оперция присваивания.
Ну ведь логически проще написать ВЫХОД_Х=1, чем писать
Это вам на С кажется, что PORTC.1=1 это одна операция присваивания. На ассемблере (без оптимизации или для портов, не попавших в IO space, как PORTE) это операция чтения, наложения маски по "или" и запись обратно в порт. А перед этим еще загрузка маски в регистр, потому что AVR умеет "или" только с регистром. А в случае SODR/CODR это будет действительно одна операция записи (и одна загрузки маски в регистр). Причем если надо одной командой установить до восьми соседних битов, то даже загрузку маски можно уместить в эту же команду за счет использования аппаратного сдвигателя ARM.

Цитата(zheka @ May 13 2010, 11:17) *
Вопрос такой, каковы преимущества порта в ARM по сравнению с AVR, кроме того, что можно читать состояние пинов, как пишет Редькин, непосредственно на выходе?
Хотелось бы спросить у Редькина - а что, у AVR чтение PINx/PORTx работает по-другому?
Цитата(zheka @ May 13 2010, 11:17) *
Вот скажем, в ODSR откуда берется информация? Она попадает туда во время записи в регистр SODR, или же состояние ODSR зависит от фактического состояни пина? Ну скажем, что-то на выходе порта выгорело, или на выходе значительная просадка напряжения, мы пишем в него единичку, а результата не имеем, можно ли это диагностировать с помощью ODSR ?
Нет, нельзя. Выкиньте Редькина, откройте даташит (на худой конец его перевод с gaw.ru), посмотрите картинку 15-3 и сразу увидете, что ODSR - это то, что вы хотите вывести на ноги (аналог PORTx в AVR). А PDSR - то, что читается с ног, аналог PINx у AVR.
Цитата(zheka @ May 13 2010, 11:17) *
Посмотрел я макросы Аскольда. А не слишком ли громоздко?
Например
Код
#define _setL(port,bit)         do { AT91C_BASE_PIO##port##->PIO_CODR = (1 << bit); } while(0)

Не до хрена ли это тактов займет?
Нет. Быстрее точно никак. К тому же сдвиг вычисляется на этапе компиляции.
Цитата(zheka @ May 13 2010, 11:17) *
Или вот еще круче - одно и то ж действие по-разному обзывается:
Да, с тех пор утекло много времени, все развивается. Вот более оптимальный с точки зрения исходника вариант для ARM под gcc (но компилится он в абсолютно те же команды).
Прикрепленные файлы
Прикрепленный файл  pin_macros.zip ( 1.17 килобайт ) Кол-во скачиваний: 35
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 11:27
Сообщение #53


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ну вот еще одна непонятка. Опять таки сравниваем c AVR
PORTA=0xF0;
PORTA=0x0F;
На выходе будет 0x0F, сразу же;

Если же работать с SAM7:
AT91C_BASE_PIOA->PIO_SODR = 0xFFFF0000;
AT91C_BASE_PIOA->PIO_SODR = 0x0000FFFF;

То на выходе будет 0xFFFFFFFF. Для того чтобы получить искомые 0x0000FFFF нужно сначала обнулить, а это лишние такты. А если я хочу это сделать быстро, как мне быть?

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


Цитата
Выкиньте Редькина, откройте даташит


А есть что-нибудь такое же правильное как даташит, но такое же русское, как Редькин?

В общем я чувствую что запутываюсь окончательно. Вы правы - тяжелое наследие работы с CodeVision. Еще тогда кто-то сказал, что COdeVision для новичка - лучший способ испортить стиль программирования.

У меня к присутствющим просьба: вот задача - есть PIOA c его 32 ножками. Есть два 8-ми битных числа a и b. Мне нужно поместить биты числа а в биты №№0-7 порта, а биты числа b вы биты №№24-31 порта.

Подскажите как это сделать, тогда мне будет от чего отталкиваться, а то от макроса в последнем вложении голова кругом пошла.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 13 2010, 11:44
Сообщение #54


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(zheka @ May 13 2010, 14:43) *
Ну вот еще одна непонятка. Опять таки сравниваем c AVR
PORTA=0xF0;
PORTA=0x0F;
На выходе будет 0x0F, сразу же;

Если же работать с SAM7:
AT91C_BASE_PIOA->PIO_SODR = 0xFFFF0000;
AT91C_BASE_PIOA->PIO_SODR = 0x0000FFFF;

То на выходе будет 0xFFFFFFFF. Для того чтобы получить искомые 0x0000FFFF нужно сначала обнулить, а это лишние такты. А если я хочу это сделать быстро, как мне быть?

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


А разве вSAM7 нет вывода в регистр?
Тогда переходите на кортекс
Там есть все три
LPC_GPIO0->FIOPIN=i // выводит значение i в регстр0
LPC_GPIO0->FIOSET=i // устанавливает в регстре0 в 1 те биты, которые в i равны 1, остальные не меняются
LPC_GPIO0->FIOCLR=i // устанавливает в регстре0 в 0 те биты, которые в i равны 1, остальные не меняются
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 11:51
Сообщение #55


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



vallav, спасибо за идею, теперь я понял как задать вопрос. Есть ли в SAM7 анало FIOPIN=i ? А то совершенно непонятно, почему я должен обнулять что-то прежде чем записать новое значение.

Сообщение отредактировал zheka - May 13 2010, 11:59
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 13 2010, 12:33
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Почитайте в мануале про OWER, ODSR.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 13 2010, 12:38
Сообщение #57


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zheka @ May 13 2010, 14:27) *
Ну вот еще одна непонятка. Опять таки сравниваем c AVR
PORTA=0xF0;
PORTA=0x0F;
На выходе будет 0x0F, сразу же;

Если же работать с SAM7:
AT91C_BASE_PIOA->PIO_SODR = 0xFFFF0000;
AT91C_BASE_PIOA->PIO_SODR = 0x0000FFFF;

То на выходе будет 0xFFFFFFFF. Для того чтобы получить искомые 0x0000FFFF нужно сначала обнулить, а это лишние такты. А если я хочу это сделать быстро, как мне быть?
Читать даташит. В крайнем случае его перевод на русский язык с сайта gaw.ru.
Код
AT91C_BASE_PIOA->PIO_OWER = 0xFFFFFFFF; // <-- один раз в начале программы
AT91C_BASE_PIOA->PIO_ODSR = 0x12345678;        // Записали 32 бита в порт

Цитата(zheka @ May 13 2010, 14:27) *
У меня к присутствющим просьба: вот задача - есть PIOA c его 32 ножками. Есть два 8-ми битных числа a и b. Мне нужно поместить биты числа а в биты №№0-7 порта, а биты числа b вы биты №№24-31 порта.
А что вы хотите сделать с остальными битами (8-23)? Если не хотите их менять:
Код
// Вариант А:
uint32_t Tmp = AT91C_BASE_PIOA->PIO_OWSR;
AT91C_BASE_PIOA->PIO_OWER = 0xFF0000FF;
AT91C_BASE_PIOA->PIO_OWDR = ~0xFF0000FF;
AT91C_BASE_PIOA->PIO_ODSR = (b << 23) | (a<<0);
AT91C_BASE_PIOA->PIO_OWER = Tmp;
AT91C_BASE_PIOA->PIO_OWDR = ~Tmp;
// Вариант B:
AT91C_BASE_PIOA->PIO_SODR = (b << 23) | (a<<0);
AT91C_BASE_PIOA->PIO_CODR = ~((b << 23) | (a<<0) | (0xFFFF << 8));
А как бы вы записали по 2 бита из каждой переменной в биты 0,1 и 6,7 на AVR?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 14:44
Сообщение #58


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



С битами 8-23 я ничего не собирался делать. А в АВР я делал бы точно так же как и с АРМ, так как вы написали с этим то проблем не было, я даже в симулятор гонял. В от только когда в 0-7 записано 0xFF, а затем 0xAA, то все равно остается 0xFF. Ваш ответ про OWDR я прочел, сейчас буду пробовать.

Код
// Вариант B:
AT91C_BASE_PIOA->PIO_SODR = (b << 23) | (a<<0);
AT91C_BASE_PIOA->PIO_CODR = ~((b << 23) | (a<<0) | (0xFFFF << 8));


А второй строкой вы что хортели сделать? НИже код - наличие/присутствие строки ничего в симуляторе не изменило.


Код
AT91C_BASE_PIOA->PIO_SODR = 0x00AAAA00; //записываем AAAA в биты 8-23, неузявимость которых хотим проверить
      AT91C_BASE_PIOA->PIO_SODR = (0xFF << 23) | (0xFF<<0); ///записываем 0xFF по краям.
      //AT91C_BASE_PIOA->PIO_CODR = ~((0xFF << 23) | (0xFF<<0) | (0xFFFF << 8) );   ///Ваша строка
       AT91C_BASE_PIOA->PIO_SODR = (0xAA << 23); // Записываем 0xAA в биты 24-31, чтобы проверить, затирается ли 0xFF после записи и остается ли сохранной информация в битах 8-23. Результат - в битах 24-31 остается 0xFF, биты 8-23 целы. Комментирование/раскомментирование Вашей строки не меняет результат.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2010, 14:46
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vallav @ May 13 2010, 14:44) *
Тогда переходите на кортекс
Там есть все три
LPC_GPIO0->FIOPIN=i // выводит значение i в регстр0
LPC_GPIO0->FIOSET=i // устанавливает в регстре0 в 1 те биты, которые в i равны 1, остальные не меняются
LPC_GPIO0->FIOCLR=i // устанавливает в регстре0 в 0 те биты, которые в i равны 1, остальные не меняются

А причем тут какое-либо ядро к организации GPIO конкретного контроллера? В отношении Cortex-M3, ну там разве только от ядра bit-band может быть использован для частичной эмуляции помянутых Вами LPC-шных SET/CLR


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 14:58
Сообщение #60


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Значит так, господа давайте изложу проблему детально.
1. Записываю информацию в серединку 8-23, записываю, скажем так, навсегда.
2. Пишу в биты 0-7 и 23-31 числа 0xFF.
3. Убеждаюсь что биты 8-23 не тронуты.
4. Снова пишу другое число - 0xAA в биты 0-7 и 23-31. Очень хочу, чтобы там оказались AA - чередование 0 и 1. Можно ли это сделать без предварительной очистки в ноль битов 0-7 и 23-31 ???
Пока сделал так:
Код
AT91C_BASE_PIOA->PIO_PER  = 0xFFFFFFFF;
  AT91C_BASE_PIOA->PIO_OER  = 0xFFFFFFFF;
  AT91C_BASE_PIOA->PIO_OWER  = 0xFFFFFFFF;


      AT91C_BASE_PIOA->PIO_SODR = 0x00AAAA00;
      AT91C_BASE_PIOA->PIO_SODR = (0xFF << 24) | (0xFF<<0);
      //AT91C_BASE_PIOA->PIO_CODR = ~((0xFF << 24) | (0xFF<<0) | (0xFFFF << 8) );
       AT91C_BASE_PIOA->PIO_SODR = (0xAA << 24) | (0xAA<<0);


Средние биты защищены. А вот в крайних так и остается 0xFF.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 13 2010, 15:09
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Код
AT91C_BASE_PIOA->PIO_OWER  = 0xFF0000FF;
AT91C_BASE_PIOA->PIO_ODSR  = 0xYY0000ZZ;
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 15:45
Сообщение #62


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



aaarrr спасибо, то что надо.
то есть OWER нужно включать единожды? И все что в нем единица будет рабоать как старый добрый PORTA=0xAA ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 13 2010, 16:10
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 13 2010, 19:45) *
то есть OWER нужно включать единожды?

Можно единожды.

Цитата(zheka @ May 13 2010, 19:45) *
И все что в нем единица будет рабоать как старый добрый PORTA=0xAA ?

При записи в ODSR - да.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 13 2010, 17:33
Сообщение #64


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zheka @ May 13 2010, 17:44) *
А второй строкой вы что хортели сделать?
Сбросить в 0 те биты, которые равны нулю в байтах a и b. Для этого на месте этих битов надо записать единицы в CODR.
Цитата(zheka @ May 13 2010, 17:44) *
НИже код - наличие/присутствие строки ничего в симуляторе не изменило.
Естественно - результат вашего выражения - ноль, а запись нулевых битов в CODR не имеет эффекта. Именно поэтому ваши средние биты остаются нетронутыми в моей записи.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zheka
сообщение May 13 2010, 18:45
Сообщение #65


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Тьфу, тфу разобрался. Напаял на плату светодиодов, сделал через (1<<i) в цикле бегущий огонь (OSDR) и заполняющийся столбик (SODR).
Разобрался почему у меня не запускался код в RAM.
ТОлько объясните моему детскому мозгу, чем же контроллер порта в ARM круче чем в AVR, коль требует к себе такого отношения?


P.S. Сцк, интересный однако, камень, почему я не напрягся с ним раньше?...

Сообщение отредактировал zheka - May 13 2010, 18:47
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 13 2010, 19:52
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 13 2010, 22:45) *
ТОлько объясните моему детскому мозгу, чем же контроллер порта в ARM круче чем в AVR, коль требует к себе такого отношения?

Какого отношения - чтения документации?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2010, 21:13
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ May 13 2010, 22:52) *
Какого отношения - чтения документации?

Представляю, что случится с zheka, когда он узнает о, например, существовании Luminary smile.gif - там 20 регистров за каждым восьмибитовым GPIO + еще восемь в bit-band итого 28 smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 02:51
Сообщение #68


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Какого отношения - чтения документации?

Не спорю. Но описание OWER и ODSR в документации не сразу наталкивает на мысль что это решение моей проблемы. Если бы вам дали задание найти кухонный нож, а на коробке было бы написано что-то вроде "твердотельный дезинтегратор органических энергоносителей для питания билогических систем" вы бы сразу догадались что в коробке то что вам нужно?
Go to the top of the page
 
+Quote Post
vallav
сообщение May 14 2010, 05:22
Сообщение #69


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(zltigo @ May 13 2010, 18:46) *
А причем тут какое-либо ядро к организации GPIO конкретного контроллера? В отношении Cortex-M3, ну там разве только от ядра bit-band может быть использован для частичной эмуляции помянутых Вами LPC-шных SET/CLR


А при чем тут bit-band и частичная эмуляция?
Bit-band - это четвертый способ ввода/вывода в регистры - с побитовой адресацией.
И все они не эмулируются а существуют на аппаратном уровне - в железе.

Или Вы имели в виду, что нужно было вместо "переходите на кортекс" сказать "переходите на lpc1xxx"?
Но прямо об этом сказать постеснялись...




Цитата(zheka @ May 13 2010, 22:45) *
Тьфу, тфу разобрался. Напаял на плату светодиодов, сделал через (1<<i) в цикле бегущий огонь (OSDR) и заполняющийся столбик (SODR).
Разобрался почему у меня не запускался код в RAM.
ТОлько объясните моему детскому мозгу, чем же контроллер порта в ARM круче чем в AVR, коль требует к себе такого отношения?


P.S. Сцк, интересный однако, камень, почему я не напрягся с ним раньше?...


Да не, просто чип кривоватый.
Ваша задача на lpc1768 делается так:

LPC_GPIO0->FIOPIN0=a; // вывод в младший байт порт_0 байта a
LPC_GPIO0->FIOPIN3=b; // вывод в старший байт порт_0 байта b

Но тут беда в другом - не все биты порта выведены на пины.
Почему? А кто же его знает...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 14 2010, 06:49
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vallav @ May 14 2010, 08:22) *
Или Вы имели в виду...

Я имел ввиду, то, что я написал - Ваши расуждения о свойствах GPIO конкретного LPC нималейшего отношения к какому-либо ядру не имеют и только по факту переходе на ядро Cortex-M3 счастья от обладания такими GPIO не появится. Все.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vallav
сообщение May 14 2010, 07:01
Сообщение #71


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(zltigo @ May 14 2010, 10:49) *
Я имел ввиду, то, что я написал - Ваши расуждения о свойствах GPIO конкретного LPC нималейшего отношения к какому-либо ядру не имеют и только по факту переходе на ядро Cortex-M3 счастья от обладания такими GPIO не появится. Все.


Только у lpc GPIO реализовано корректно? Как ячейка памяти.
То есть поддерживает команду - вывод значения регистра в память?
У остальных производителей микропроцессоров на ядре кортекс GPIO не поддерживает этой команды и ее приходится эмулировать?
Извините, я этого не знал.

И что Вы так нервничаете?
Сказали бы - есть производители кортексов, у которых GPIO кривое, и все дела...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 14 2010, 07:54
Сообщение #72


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(vallav @ May 14 2010, 10:01) *
Сказали бы - есть производители кортексов, у которых GPIO кривое, и все дела...

Есть производители микроконтроллеров, использующие Cortex ядро. Как они сделают порты - их дело. Обычно делают, как надо. Это не вытекает из Cortex напрямую.
Кстати, bit-band для портов - вещь мало нужная. Вполне должно хватать и тех регистров, которые отвечают за биты порта. Для того они и созданы.
Go to the top of the page
 
+Quote Post
vallav
сообщение May 14 2010, 10:35
Сообщение #73


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(ViKo @ May 14 2010, 11:54) *
Есть производители микроконтроллеров, использующие Cortex ядро. Как они сделают порты - их дело. Обычно делают, как надо. Это не вытекает из Cortex напрямую.
Кстати, bit-band для портов - вещь мало нужная. Вполне должно хватать и тех регистров, которые отвечают за биты порта. Для того они и созданы.


Вы в курсе, что в кортексе нет пространства ввода-вывода.
И GPIO отображается на память.
В кортексе есть команды записи в память значения региситра.
Если по адресу GPIO стандартная команда ядра не работает - GPIO реализовано криво.
Согласны?

Кстати, есть такие кортексы, в которых эта команда для GPIO не реализована?
Или это чисто теоретические рассуждения - мол вполне может быть не реализована...

А в SAM7 насамом деле нет команды записи из регистра в GPIO?

А вот что Вы сюда bit-band пристроили, непонеятно.
Если и мало нужная то вроде и не мешает...
А понадобится, используем.

По этому поводу не ко мне, это не я заявлял -
"В отношении Cortex-M3, ну там разве только от ядра bit-band может быть использован для частичной эмуляции помянутых
Вами LPC-шных SET/CLR"
На мой вопрос - это про что - ответа не получено...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 14 2010, 11:36
Сообщение #74


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Вот и Вы, похоже, нервничаете smile.gif
У ядра Cortex, которое Вы упомянули, есть только адресное пространство для периферийных устройств 0x40000000-0x5FFFFFFF. Какие там будут устройства, зависит от производителя конкретного микропроцессора. Когда Вы сказали "переходите на Cortex", подразумевая там некие регистры портов, это вызвало справедливое замечание zltigo. Надеюсь, я объяснил правильно?
А bit-band я просто так упомянул, высказал свое мнение.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 14 2010, 12:46
Сообщение #75


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(vallav @ May 14 2010, 13:35) *
Вы в курсе, что в кортексе нет пространства ввода-вывода.
И GPIO отображается на память.
В кортексе есть команды записи в память значения региситра.

Вы в курсе, что в ARM7 (и в AT91SAM7 в частности) нет пространства ввода-вывода?
И GPIO отображается на память?
В ARM7 есть команды записи в память значения регистра.

И чем же тогда кортекс лучше?

Цитата(vallav @ May 14 2010, 13:35) *
А в SAM7 насамом деле нет команды записи из регистра в GPIO?
Если вы этого не знаете, то как можете делать вывод что кортекс лучше?

Цитата(vallav @ May 14 2010, 13:35) *
На мой вопрос - это про что - ответа не получено...
Это про LPC и SAM7, которые вы обвиняете в кривизне. Как выясняется - даже не зная, как они устроены.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 13:05
Сообщение #76


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Как выясняется - даже не зная, как они устроены.


Дык известный принцип - "Пастернака не читал, но осуждаю".
Go to the top of the page
 
+Quote Post
vallav
сообщение May 14 2010, 13:35
Сообщение #77


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(Сергей Борщ @ May 14 2010, 16:46) *
Вы в курсе, что в ARM7 (и в AT91SAM7 в частности) нет пространства ввода-вывода?
И GPIO отображается на память?
В ARM7 есть команды записи в память значения регистра.

И чем же тогда кортекс лучше?

Если вы этого не знаете, то как можете делать вывод что кортекс лучше?

Это про LPC и SAM7, которые вы обвиняете в кривизне. Как выясняется - даже не зная, как они устроены.


Вы о чем?
Был пост, в котором интересовались, как одной командой записать значение в порт.
И куча ответов с паравозами вместо одной команды.
Они не знали, как этот чип устроен?
Я подумал, что в этом контроллере почему то нет команды записи в порт.
Ну не мог же я подумать, что отвечающий не знает, на что отвечает...
Вот и предложил - перейти на кортекс, где такая команда и даже команды побайтовой и побитовой записи есть.

Где Вы углядели, что я заявил - кортекс лучше всех?
Кортекс как контроллер - полный отстой по сравнению с ADI_шным ADSP21xx.
Им бы переферию туда добавит и разрядность до 32 поднять - цены бы этой игрушке не было...
Она без конвеера и на старинной технологии выдавала 80 МГц при всех командах - строго однотактовых.
А в кортексе - однотактность команд - это чисто враки.
А уж быстрые прерывания - через 20 тактов после запроса, или быстрое ПДП - по 5 тактов на пересылку...

Но что есть, то есть - GPIO у него на высоте.
Добавить бы сигналы синхронизации и однотактное ПДП в память с кольцевым буфером да все биты порта вывести на
пины...



Цитата(zheka @ May 14 2010, 17:05) *
Дык известный принцип - "Пастернака не читал, но осуждаю".


Это Вы про тех, кто выдал паровозы в ответ на вопрос, как записать значение в порт.
Не зная, что там это делается одной командой?

Или про меня?
Так как я выдал следующее:
"А разве вSAM7 нет вывода в регистр?
Тогда переходите на кортекс
Там есть все три"



Цитата(ViKo @ May 14 2010, 15:36) *
Вот и Вы, похоже, нервничаете smile.gif
У ядра Cortex, которое Вы упомянули, есть только адресное пространство для периферийных устройств 0x40000000-0x5FFFFFFF. Какие там будут устройства, зависит от производителя конкретного микропроцессора. Когда Вы сказали "переходите на Cortex", подразумевая там некие регистры портов, это вызвало справедливое замечание zltigo. Надеюсь, я объяснил правильно?
А bit-band я просто так упомянул, высказал свое мнение.


Он что то отмалчивается.

Может Вы ответите - есть кортекс, у которого нет команды вывода регистра в порт?
Или он разразился этим исходя из чисто теоретической возможности, что такой кортекс сделать можно?
В этом случае замечание ну очень справедливое...
И даже не замечание а целый разнос.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 14 2010, 13:50
Сообщение #78


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(vallav @ May 14 2010, 16:35) *
Может Вы ответите - есть кортекс, у которого нет команды вывода регистра в порт?

Отвечу (еще раз) - у Cortex вообще нет портов!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 14 2010, 14:04
Сообщение #79


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(vallav @ May 14 2010, 16:35) *
Был пост, в котором интересовались, как одной командой записать значение в порт.
И куча ответов с паравозами вместо одной команды.
Они не знали, как этот чип устроен?
Был вопос - как записать 2 байта в порт не трогая остальные 16. Ваш вариант из одной команды, пусть даже для кортекса?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vallav
сообщение May 14 2010, 14:21
Сообщение #80


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(Сергей Борщ @ May 14 2010, 18:04) *
Был вопос - как записать 2 байта в порт не трогая остальные 16. Ваш вариант из одной команды, пусть даже для кортекса?


Это был второй вопрос.
Первый - как в порт записать 0x0000ffff а затем 0xaaaa5555.

И именно посмотрев ответы на этот вопрос я предложил перейти на кортекс.

А п овторому вопросу - полагаете, то, как это делается в кортексе, корявее чем приведенные для исходного чипа?


Цитата(ViKo @ May 14 2010, 17:50) *
Отвечу (еще раз) - у Cortex вообще нет портов!


Ага. У него всего навсего 6 букв из латинского алфавита. И что?
А вот если Вы про то, что под этим названием - то возможны разные варианты...

Уточню для любителей строгости - есть ли микропроцессоры с ядром Cortex M3, у которых не реализована команда вывода из
регистра в порт?

Если это не совсем строго, Вы не стесняйтесь, поправляйте.
Я не гордый, переспрошу...

Мне же интересно, на меня просто так наехали ( мимоходом ) или за этим хоть что то есть...
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 14:24
Сообщение #81


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Vallav, я конечно еще лох, но попробую тявкнуть - те три варианта, которые вы написали для Кортекса, в АРМ пишутся как SODR, CODR и ODSR. Про ODSR вы не знали, вот и предложили Кортекс, решив что там этот третий вариант есть.
Господа, давайте не будетм засорять тему спорами об архитектуре камней. Я пришел с работы, сел за плату, сейчас ведь вновь засыплю вас глупыми вопросами)))
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 17:46
Сообщение #82


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Подскажите, как грамотно организовать задержку на милли и микросекунды. "Тяжелое наследие CodeVision" навевает что-то вроде #include <delay.h> delay_ms(x) delay_us(x)
Go to the top of the page
 
+Quote Post
rezident
сообщение May 14 2010, 17:56
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(zheka @ May 14 2010, 23:46) *
Подскажите, как грамотно организовать задержку на милли и микросекунды.
С помощью таймера.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 14 2010, 18:03
Сообщение #84


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А можно я еще чуть-чуть про Cortex-M3? Вернее, про STMicroelectronics.
Для STM32F103 написал следующий код
Код
  while (1) {
   GPIOB->BSRR = 0x0002;
   GPIOB->BRR = 0x0002;
  }

Скомпилировалось в
Код
  0x08000226 F8C01C10  STR      r1,[r0,#0xC10]
  0x0800022A F8C01C14  STR      r1,[r0,#0xC14]
  0x0800022E E7FA      B        0x08000226

Весь цикл выполняется за 7 тактов - 2 + 2 + 3. Итого, на частоте 72MHz имеем "дрыгание ножкой" с частотой чуть больше 10MHz.
А вам с вашим SAM... слабо?
Я, извините, SAM... "не читал" smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 14 2010, 18:15
Сообщение #85


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vallav @ May 14 2010, 16:35) *
Он что то отмалчивается.

Я даже полным дятлам третий раз повторять не буду. А пытаться замазать потоками флейма свое ламерство ( причем уже не в первый раз ), это уже, как администратор, настоятельно не советую - флейм наказуем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 18:29
Сообщение #86


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



С помощью таймера можно было и в АВР. А можно было и библиотечной функцией
Неужели нет каких-нибудь библиотек?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 14 2010, 18:47
Сообщение #87


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 14 2010, 21:29) *
Неужели нет каких-нибудь библиотек?

А какая, простите Вам "библиотека" нужна, дабы организовать тупой цикл?
Код
void delay3t( unsigned long value )
{
__asm(    "    subs    r0, #1\n"
          "    bne.n   delay3t\n"
          "    bx      lr"    );
}

Мегагерцы по три такта в задержку сможете сказать препроцессору пересчитать?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zheka
сообщение May 14 2010, 19:13
Сообщение #88


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



ЧТо помешает? Например вот это:
Цитата
Blinky.c(32): error: #1094: Expected a register expression
Blinky.c(33): error: #1083: Inline assembler syntax error
Blinky.c(34): error: #1083: Inline assembler syntax error
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 14 2010, 19:27
Сообщение #89


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 14 2010, 22:13) *
ЧТо помешает? Например вот это:

А чем компилим-то? А.... еще у меня крыша на Cortrex последние дни заклинила для ARM надо subs r0, r0, #1 и bne
Ну и задержки будут достаточно отфонарные, ибо waistates на Flash, ну и уcкорители с кэшами тоже встречаются даже на младшеньких ARM7
А вообще такие вещи надо куда-ибудь в ассеблерный фальчик, например, в startup запихивать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vallav
сообщение May 15 2010, 07:37
Сообщение #90


Частый гость
**

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(zheka @ May 14 2010, 18:24) *
Vallav, я конечно еще лох, но попробую тявкнуть - те три варианта, которые вы написали для Кортекса, в АРМ пишутся как SODR, CODR и ODSR. Про ODSR вы не знали, вот и предложили Кортекс, решив что там этот третий вариант есть.
Господа, давайте не будетм засорять тему спорами об архитектуре камней. Я пришел с работы, сел за плату, сейчас ведь вновь засыплю вас глупыми вопросами)))


Так вопрос решен?
И в SAM7 есть вывод значения регистра в порт?
Просто те, кто на этот вопрос отвечал, этого не знали...
Так что было бодягу разводить - сразу запостили бы это.
Или поговорить захотелось?

Цитата(zltigo @ May 14 2010, 22:15) *
Я даже полным дятлам третий раз повторять не буду. А пытаться замазать потоками флейма свое ламерство ( причем уже не в первый раз ), это уже, как администратор, настоятельно не советую - флейм наказуем.


Тык Вы просто на вопрос ответьте, буквально коротко -
В таком то чипе с ядром кортекса от такой то фирмы нет вывода значения регистра в порт.

И флейм сразу прекратится...

Или не знаете такого чипа и решили включить административный ресурс?
А дятлом быть не хочется...
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 07:38
Сообщение #91


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
А чем компилим-то?


Компилим в KEIL uVisioin4.

Цитата
для ARM надо subs r0, r0, #1 и bne


Я так понял, что дело не только в этом - компилятору само объявление ассемблерной строки не понравилось.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 15 2010, 07:59
Сообщение #92


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zheka @ May 15 2010, 10:38) *
Компилим в KEIL uVisioin4.

Это оболочка поддерживающая разные компиляторы. А компилятор Вы не назвали sad.gif.
Для ARM:
Код
__asm void __loopx( unsigned long cnt )
{
    subs    r0, r0, #1;
    bne     __loopx;
    bx      lr;
}

для GCC:
Код
void __attribute__((naked)) __loopx( unsigned long cnt )
{
    __asm("    subs    r0, r0, #1\n"
          "    bne     __loopx\n"
          "    bx      lr");
}

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 15 2010, 08:02
Сообщение #93


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Для Cortex у меня есть такая штука. Ассемблер тут ни к чему, я думаю.
Код
/*!
*******************************************************************************
* @brief Delay (in sec)
* @details Программа задержки
* @note предполагается частота процессора 72000000 Hz \n
*  при задержке до 3.640 ms программа занимает 3 команды \n
*  при большей задержке используется 4-5 команд ассемблера
* @param TIME - время в секундах (максимум 238.609 сек)
* @return нет
*******************************************************************************/
#define  Delay(TIME)  for (uint32 i = (72000000 / 4 * TIME); i; i--);
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 08:09
Сообщение #94


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Это оболочка поддерживающая разные компиляторы. А компилятор Вы не назвали


Не знаю, там ли я смотрю: Project->manage->Components,Environments,Books->Вкладка Folders,Extensions и две галки - "Use RealView COmpiler" и "Use GNU COmpiler". У меня выбран RealView.


ЕЩе один вопрос: в папке с проектом у меня есть хидер. ПОдключаю его #include "TimesNR_8.h"
КОмпилятор пишет: "Blinky.c(14): error: #5: cannot open source input file "TimesNR_8.h": No such file or directory"

Ковыряюсь, лезу в Project->manage->Components,Environments,Books->Project COmponents. Там выбираю Project targets - SAM7 RAM ULINK; Groups - Source COde; Files - добавляю нужный хидер.

Компилятор все равно выдает ту же ошибку. ВОпрос - где он ищет этот хидер? Как заставить его искать в корневой папке проекта?
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 15 2010, 08:18
Сообщение #95


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zheka @ May 15 2010, 11:09) *
ВОпрос - где он ищет этот хидер? Как заставить его искать в корневой папке проекта?

Project / Options for ... / C/C++ / IncludePath ...
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 08:30
Сообщение #96


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



VIKO спасибо, помогло.

Смотрим дальше, что ему не нравится:
Код
#define TimesNR_8_WIDTH 10
#define TimesNR_8_HEIGHT 8

const char TimesNR_8[] PROGMEM = {  // В ЭТОЙ СТРОКЕ ОШИБКА: "..\..\..\..\Examples\Blinky\TimesNR_8.h(7): error:  #65: expected a ";" "
    0x04, 0x1E, 0x0A, 0x08, 0x01, 0x20, 0xFF,
    0x05, 0x03, 0x03, 0x05, 0x05, 0x06, 0x05, 0x01, 0x02, 0x02, 0x05, 0x05, 0x01, 0x05, 0x01, 0x05,
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 15 2010, 08:33
Сообщение #97


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



PROGMEM уберите, это от АВР.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zheka
сообщение May 15 2010, 08:36
Сообщение #98


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Получилось. Идем дальше...

Еще такой вопросец, а как перенести из текстового файла в KEIL русский текст? В файле были русские комментарии, при включении в KEIL видны крякозяблики.

Сообщение отредактировал zheka - May 15 2010, 08:48
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 15 2010, 10:47
Сообщение #99


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zheka @ May 15 2010, 11:36) *
Еще такой вопросец, а как перенести из текстового файла в KEIL русский текст? В файле были русские комментарии, при включении в KEIL видны крякозяблики.

Да, есть такая шняга.
Решений 2:
- изменить вид шрифта для комментариев с курсива на прямой
- изменить в ключе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage значение «1252» на «1251»
Я пользовался первым до недавнего времени. Теперь перешел на второй способ.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 15 2010, 11:05
Сообщение #100


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AHTOXA @ May 15 2010, 11:33) *
PROGMEM уберите, это от АВР.

Если таскать исходники туда сюда, то лучше
Код
#define PROGMEM

добавить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

9 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.02726 секунд с 7
ELECTRONIX ©2004-2016