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

 
 
 
Reply to this topicStart new topic
> Stellaris Micro - LM3S...., Особенности этих микроконтроллеров
sonycman
сообщение Jan 23 2009, 14:44
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Осваиваю потихоньку младшую линейку этих камней - LM3S601.
По сравнению с младшими STM32 есть более компактные корпуса при похожей функциональности - что меня и привлекло.
Потребление, правда, в два раза выше, ну да бог с ним. smile.gif

Заметил сегодня интересную для меня особенность пинов GPIO.

Обычно, при переключении пина с состояния "ВХОД" на "ВЫХОД", приходится сначала записать в регистр данных порта (чтобы после переключения направления порт получил требуемое значение), а уже потом в регистр направления.

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

Это как у них такое реализовано? Получается, при записи в GPIODIR автоматически читается уровень пина и перезаписывается GPIODATA?

ЗЫ: а, понял - ведь GPIODATA и так содержит текущее состояние пина в режиме входа! А при переключении на выход это-же значение остаётся уже как выходное!
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 23 2009, 23:52
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Что меня немного покоробило, когда разбирался с I2C на этом чипе, это ощутимая задержка установки флага BUSY после записи очередной команды в регистр команд.
То есть пишу команду передать байт, следом сразу (по привычке) цикл ожидания, пока в регистре статуса не сбросится бит занятости. А проблема в том, что этот бит устанавливается не сразу, а спустя десяток (или около того) тактов. В общем, без доп. ожидания легко "пролететь" smile.gif

Чёрт, никогда с таким не сталкивался... sad.gif
Пришлось вместо бита в регистре статуса читать бит установки прерывания в другом регистре...
Go to the top of the page
 
+Quote Post
Mahagam
сообщение Jan 24 2009, 21:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 2-07-04
Из: Minsk
Пользователь №: 240



привыкай. весьма специфическая периферия. работаю с LM3S6965. дабы избежать проблем - пользуюсь только их библиотекой. хотя шаманить приходится даже с её использованием. например: имею два приложения во флешке (бутлодырь и основной код) переход из основного кода в бутлодырь - через ресет софтварный. из бутлодыря - прыг по стартовому адресу с предварительной загрузкой стека. проблема была в том, что несмотря на запрещение прерываний в момент перепрыга каким-то образом пыталось отработаться прерывание по уарту. всё висло. пришлось не только глобальное прерывание запрещать, ни и отдельно по каждому уарту.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 24 2009, 21:54
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Mahagam @ Jan 25 2009, 01:33) *
привыкай. весьма специфическая периферия.

Да. Однако тоже самое могу сказать и про STM32. Там вообще маловменяемый I2C. Весьма, как говорят, "non user friendly" biggrin.gif
Хотя работает хорошо.

После "железного" сброса прерывания (кроме NMI и HardFault) в кортексе запрещены. По идее, никакой уарт никак не сможет заставить проц выполнять свой обработчик...
Для этого надо выполнить __enable_irq() (CPSIE i) и установить бит уарта в NVIC_EN0_R.

Хотя не всегда, конечно, сразу удаётся докопаться до истины.

ЗЫ: что ещё из отличий - чтобы инициировать передачу через уарт, на AVR или на STM32 достаточно разрешить прерывание от передатчика. Когда передатчик свободен - защёлка всегда установлена и будет вызываться обработчик, который и положит байты...
У Стеллариса не так - надо обязательно сначала записать первый байт в регистр передатчика, а уже потом, после его передачи, будет устанавливаться защёлка...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 25 2009, 12:50
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Чёрт, только что обнаружил косяк LM3S601 rev.B5.
При подаче питания (3.3в) какое-то время (около 50 мксек) на многих (если не на всех) выводах контроллера устанавливается уровень напряжения около 1.2 вольта.
Даже в случае внешнего пулдаун резистора 10к. Даже с учётом того, что в этой ревизии не работают пулапы (еррата).
Силы тока хватает, чтобы включить ключ на NPN транзисторе...

Пойду на форум Luminary, поинтересуюсь, что происходит... unsure.gif
Go to the top of the page
 
+Quote Post
proba
сообщение May 15 2009, 05:21
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 358
Регистрация: 29-05-05
Пользователь №: 5 526



TI освоил Luminary микро:
"Today, TI has announced the acquisition of Luminary Micro and our Stellaris family of ARM® Cortex™-M3-based microcontrollers. "
http://focus.ti.com/general/docs/genconten...T+luminarymicro

недавно Maxim освоил Zilog, a NEC и Renesas соединяются.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:10
Рейтинг@Mail.ru


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