Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Re: Программирование STM8

Сообщение eufs »

Вектора в таблице прерываний трехбайтные и в "рыбе", которую предлагает STVD при старте нового проекта, все метки в прграмме с типом long.
Еще вопрос. При настройке прерывания от таймера TIM4 мне пришлось первой командой в обработчике обнулять соответствующий флаг прерывания (UIF в регистре TIM4_SR) вручную, потому как МК зависал при обработке прерывания, даже в отладке. Это действительно так надо делать или я чего-то не понимаю?
Второй день разбираюсь с STM8S. Общие впечатление (после AVR) - хороший контроллер, система команд намного лучше, но есть приколы.
C0FFEE=‭12648430‬
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Программирование STM8

Сообщение ChipKiller »

eufs писал(а):Вектора в таблице прерываний трехбайтные...
... на самом деле 4 байта 0х82,0х00,0хHH,0хLL, где HH,LL - старшая и младшая часть адреса размещения кода.
eufs писал(а):При настройке прерывания от таймера TIM4 мне пришлось первой командой в обработчике обнулять соответствующий флаг ...
.. да так и должно быть.
eufs писал(а):хороший контроллер, система команд намного лучше, но есть приколы
... самый приятный "прикол" ИМХО - возможность выполнения кода в RAM, "минусы" по сравнению с AVR - более "хитрый" конвейер и как следствие рассчитать все до такта гораздо сложней ....
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Re: Программирование STM8

Сообщение eufs »

Ага, а что тогда 0х82? И почему именно 82? При дизассемблировании вектора переходов обозначены как INT {трехбайтный адрес}. Я посчитал, что 82 это код команды. Хотя сама структура long - четырехбайтное число.
По поводу рассчета длительности выполнения команд. IMHO, при достаточном быстродействии CPU и периферии - это теряет актуальность. Может это к STM8S и не относится, но в современных PC это точно уже никто не делает.
Я сомневаюсь, что понадобится с такой точностью формировать именно командами какие-либо задержки. Хотя, было дело, на АВР 90S2313 писал полностью на прерываниях формирование сигнала синхронизации для ТВ. Как положено, с чересстрочной разверткой, уравнительными импульсами. Работало с уравнивающими (на время реакции на прерывание) процедурами. Работало все четко, еще и частоту прерываний по алгоритму Брезентхэма подстраивал. Где-то проект валяется...
C0FFEE=‭12648430‬
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Программирование STM8

Сообщение ChipKiller »

Я посчитал, что 82 это код команды
... 0х82 - код команды INT - команда INT + 3 байта адреса = 4. Для МК у которых больше 64К памяти второй (т.е после кода 0х82) байт представляет расширенный адрес.

ЗЫ. на самом деле все эти "детали" хорошо описаны в datasheet_e
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Re: Программирование STM8

Сообщение eufs »

В ПДФ я про код 82 ничего не находил. В списке команд ее нет. Может у меня не те ПДФ? А про расширенные адреса знаю, читал. В таком случае, похоже, что они прикручивают универсальное ядро к набираемой периферии. Отсюда, с одной стороны порядок и универсальность, а с другой стороны - сплошные непонятности. В частности, применение в МК STM8S003F3 команд с дальними (трехбайтными) адресами лишено смысла. Но это лишь в том случае, если я не пишу портируемые программы на другие STM8S с большой памятью (>32K)
C0FFEE=‭12648430‬
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

Доброго времени
Опять накопилось куча вопросов по этим камням, изза огромных возможностей конфигурации периферии совсем запутался, хочу сделать на аппаратном уровне счетчик длительности импульса. Тоесть включать таймер и сбрасывать по фронту и останавливать и вызывать прерывание по спаду внешнего сигнала.
80 страниц английского текста никак немогу освоить.
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

timer1.JPG
(81.24 КБ) 754 скачивания

Выдернул из даташита структуру. Каким образом можно исполнить задуманное? Маршрут получается такой, Ch1 - TI1 - Filter - TI1F - TI1F_ED, TIFP1.
По событию TIFP1 можно вызвать прерывание, а как быть с запуском?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Просчитать такты может понадобится для взаимодействия с медленной периферией. Например многоразрядными регистрами сдвига(64, 128 разрядов), может понадобится задержка на десяток-другой тактов для того чтобы последний регистр успел отреагировать.
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

Мне нужно считать для приемника. Алгоритм в двух словах такой:
- Инициализируем приемник: разрешаем прерывание, сбрасываем флаг, ждем импульса
- По прерыванию смотрим какой сменой уровня было вызвано прерывание
если фронтом ( синхра ), мерим длительность пульса
если спадом ( данные ), мерим длительность паузы до след пульса
обрабатываем, ложим в память
еще попутный вопрос, как можно объявить байт или слово в памяти и начначить ей какоенить человеческое имя. чтобы не писать все время адрес ячейки куда обращаться нужно
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Длительность импульса измеряется таймером, тут такты считать не надо. Благо в STM-ках таймеры умеют делать и не такое...

Ссылка на константу делается меткой. Или если нужна константа не в памяти контроллера(строка текст и т.д.) то есть специальные директивы, DEFINE, EQU... вроде бы такие элементарные вещи есть во всех компиляторах.
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

Эту часть кода создает STVD автоматом

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

   #ifdef RAM0   
   ; clear RAM0
ram0_start.b EQU $ram0_segment_start
ram0_end.b EQU $ram0_segment_end
   ldw X,#ram0_start
clear_ram0.l
   clr (X)
   incw X
   cpw X,#ram0_end   
   jrule clear_ram0
   #endif

Тоесть ram0_start.b должна находится по адресу 0x00 и быть длинной 256 байтов?
пробую так:
RamByte0 equ $ram0_segment_start
на что STVD жестко выругалась:
Error 56: unrecognised opcode ' RamByte0 equ $0'
что ей надо от меня?
и еще один вопрос. зачем она чистит озу? никто же не станет читать память если в нее ниего не ложили? можно ли затереть эти строки?
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

Добрый день!!
Помогите записать данные в регистр таймера, мои познания в контроллерах этой фирмы хелловордовские, поэтому сильно не ругайтесь
пробовал так:
mov $52C1,#$00 ; Прескаллер 00AA
mov $52C2,#$AA

и так: mov TIM1_PSCRH,#$00
mov TIM1_PSCRL,#$AA

и так: ld a,#$AA
ld TIM1_PSCRH,a ; Прескаллер AAAA
ld TIM1_PSCRL,a

и даже через bset пробовал

в результате всего этого, в регистре прескаллера 0x0000
притом в порты в/в все отлично пишется всеми способами
в чем может быть проблема
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Надо читать внимательней даташиты. Таймеры довольно сложные из-за своей универсальности, я думаю что имеет значение последовательность записи в старшую/младшую половины регистра. Там вероятно имеется защелка с целью предотвращения несинхронной записи половинок многоразрядных регистров. Уточните этот момент в даташите.
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

Спасибо за совет, уточнил, все верно, но результата нету
Разобрался, в STM8L по дефолту периферия выкл. ее включать нужно
Последний раз редактировалось casus Вс дек 23, 2012 15:17:16, всего редактировалось 1 раз.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование STM8

Сообщение Alexeyslav »

Хорошо, а откуда ты взял что регистр прескалера не загружен? Может он и не должен читаться, работает только на запись. Или работает только когда разрешен.
casus
Родился
Сообщения: 13
Зарегистрирован: Вс дек 16, 2012 01:53:53
Откуда: Новый Уренгой

Re: Программирование STM8

Сообщение casus »

нужно было поставить бит1 в CLK_PCKENR2
и стало все писаться/читаться. спасибо!!!
menster
Родился
Сообщения: 1
Зарегистрирован: Чт янв 10, 2013 17:42:14

Re: Программирование STM8

Сообщение menster »

Кто-нибудь подскажет, для чего нужен в таймерах/счетчиках бит URS?
В документации сказано:
URS: Update request source
0: When enabled, an update interrupt request is sent as soon as registers are updated (counter
overflow).
1: When enabled, an update interrupt request is sent only when the counter reaches the
overflow/underflow.

Что было переведено мною примерно как:
Когда равен нулю, то запрос на прерывание формируется как только регистр обновлен (счетчик переполнен)
Когда равен еденице, то запрос на прерывание формируется только когда счетчик достигает значения переполнения/опустошения?
Тогда какая разница в данном случаем между еденицей и нулем?
Может, в первом случае имеется ввиду перышение счетчиком значения в регистре ARR?
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Программирование STM8

Сообщение ut1wpr »

menster писал(а):Кто-нибудь подскажет, для чего нужен в таймерах/счетчиках бит URS?
Что было переведено мною примерно как:
Когда равен нулю, то запрос на прерывание формируется как только регистр обновлен (счетчик переполнен)
Когда равен еденице, то запрос на прерывание формируется только когда счетчик достигает значения переполнения/опустошения?
Тогда какая разница в данном случаем между еденицей и нулем?
Может, в первом случае имеется ввиду перышение счетчиком значения в регистре ARR?
Дубликат вопроса на Казусе. Там я ответил. Повторять здесь?
С уважением,
Виктор.
Аватара пользователя
TRIOD
Вымогатель припоя
Сообщения: 693
Зарегистрирован: Вт сен 15, 2009 16:23:06
Откуда: Москва

Re: Программирование STM8

Сообщение TRIOD »

Доброе время суток.

Народ подскажите у STM8S105K4B6 есть заводской Bootloader?
Хочу прошить, но ST-Link не имею хочу попробывать через RS232.
Только абсолютная пустота бездны принесёт мне покой.
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: Программирование STM8

Сообщение Zheleznjakov »

Да, имеет.

http://www.st.com/internet/com/TECHNICA ... 201192.pdf

Можно же купить дисковери (STM8SVLDISCOVERY ) вместо ST-link-ка, значительно дешеве...
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Ответить

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