Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование STM8
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс окт 05, 2025 21:28:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2579 ]     ... , , , 12, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 06, 2012 18:59:08 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Вектора в таблице прерываний трехбайтные и в "рыбе", которую предлагает STVD при старте нового проекта, все метки в прграмме с типом long.
Еще вопрос. При настройке прерывания от таймера TIM4 мне пришлось первой командой в обработчике обнулять соответствующий флаг прерывания (UIF в регистре TIM4_SR) вручную, потому как МК зависал при обработке прерывания, даже в отладке. Это действительно так надо делать или я чего-то не понимаю?
Второй день разбираюсь с STM8S. Общие впечатление (после AVR) - хороший контроллер, система команд намного лучше, но есть приколы.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 06, 2012 19:42:32 
Сверлит текстолит когтями
Аватар пользователя

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 06, 2012 22:11:52 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Ага, а что тогда 0х82? И почему именно 82? При дизассемблировании вектора переходов обозначены как INT {трехбайтный адрес}. Я посчитал, что 82 это код команды. Хотя сама структура long - четырехбайтное число.
По поводу рассчета длительности выполнения команд. IMHO, при достаточном быстродействии CPU и периферии - это теряет актуальность. Может это к STM8S и не относится, но в современных PC это точно уже никто не делает.
Я сомневаюсь, что понадобится с такой точностью формировать именно командами какие-либо задержки. Хотя, было дело, на АВР 90S2313 писал полностью на прерываниях формирование сигнала синхронизации для ТВ. Как положено, с чересстрочной разверткой, уравнительными импульсами. Работало с уравнивающими (на время реакции на прерывание) процедурами. Работало все четко, еще и частоту прерываний по алгоритму Брезентхэма подстраивал. Где-то проект валяется...

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пт сен 07, 2012 11:15:18 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
Цитата:
Я посчитал, что 82 это код команды
... 0х82 - код команды INT - команда INT + 3 байта адреса = 4. Для МК у которых больше 64К памяти второй (т.е после кода 0х82) байт представляет расширенный адрес.

ЗЫ. на самом деле все эти "детали" хорошо описаны в datasheet_e


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пт сен 07, 2012 18:27:47 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
В ПДФ я про код 82 ничего не находил. В списке команд ее нет. Может у меня не те ПДФ? А про расширенные адреса знаю, читал. В таком случае, похоже, что они прикручивают универсальное ядро к набираемой периферии. Отсюда, с одной стороны порядок и универсальность, а с другой стороны - сплошные непонятности. В частности, применение в МК STM8S003F3 команд с дальними (трехбайтными) адресами лишено смысла. Но это лишь в том случае, если я не пишу портируемые программы на другие STM8S с большой памятью (>32K)

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пт дек 21, 2012 04:47:54 
Родился

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб дек 22, 2012 04:53:27 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
Вложение:
timer1.JPG [81.24 KiB]
Скачиваний: 736

Выдернул из даташита структуру. Каким образом можно исполнить задуманное? Маршрут получается такой, Ch1 - TI1 - Filter - TI1F - TI1F_ED, TIFP1.
По событию TIFP1 можно вызвать прерывание, а как быть с запуском?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб дек 22, 2012 13:16:02 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Просчитать такты может понадобится для взаимодействия с медленной периферией. Например многоразрядными регистрами сдвига(64, 128 разрядов), может понадобится задержка на десяток-другой тактов для того чтобы последний регистр успел отреагировать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб дек 22, 2012 13:42:10 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
Мне нужно считать для приемника. Алгоритм в двух словах такой:
- Инициализируем приемник: разрешаем прерывание, сбрасываем флаг, ждем импульса
- По прерыванию смотрим какой сменой уровня было вызвано прерывание
если фронтом ( синхра ), мерим длительность пульса
если спадом ( данные ), мерим длительность паузы до след пульса
обрабатываем, ложим в память
еще попутный вопрос, как можно объявить байт или слово в памяти и начначить ей какоенить человеческое имя. чтобы не писать все время адрес ячейки куда обращаться нужно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб дек 22, 2012 14:29:30 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Длительность импульса измеряется таймером, тут такты считать не надо. Благо в STM-ках таймеры умеют делать и не такое...

Ссылка на константу делается меткой. Или если нужна константа не в памяти контроллера(строка текст и т.д.) то есть специальные директивы, DEFINE, EQU... вроде бы такие элементарные вещи есть во всех компиляторах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб дек 22, 2012 15:00:46 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
Эту часть кода создает 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'
что ей надо от меня?
и еще один вопрос. зачем она чистит озу? никто же не станет читать память если в нее ниего не ложили? можно ли затереть эти строки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс дек 23, 2012 13:41:21 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
Добрый день!!
Помогите записать данные в регистр таймера, мои познания в контроллерах этой фирмы хелловордовские, поэтому сильно не ругайтесь
пробовал так:
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
притом в порты в/в все отлично пишется всеми способами
в чем может быть проблема


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс дек 23, 2012 14:56:08 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Надо читать внимательней даташиты. Таймеры довольно сложные из-за своей универсальности, я думаю что имеет значение последовательность записи в старшую/младшую половины регистра. Там вероятно имеется защелка с целью предотвращения несинхронной записи половинок многоразрядных регистров. Уточните этот момент в даташите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс дек 23, 2012 14:59:36 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
Спасибо за совет, уточнил, все верно, но результата нету
Разобрался, в STM8L по дефолту периферия выкл. ее включать нужно


Последний раз редактировалось casus Вс дек 23, 2012 15:17:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс дек 23, 2012 15:12:57 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Хорошо, а откуда ты взял что регистр прескалера не загружен? Может он и не должен читаться, работает только на запись. Или работает только когда разрешен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс дек 23, 2012 15:18:38 
Родился

Зарегистрирован: Вс дек 16, 2012 01:53:53
Сообщений: 13
Откуда: Новый Уренгой
Рейтинг сообщения: 0
нужно было поставить бит1 в CLK_PCKENR2
и стало все писаться/читаться. спасибо!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт янв 10, 2013 18:00:59 
Родился

Зарегистрирован: Чт янв 10, 2013 17:42:14
Сообщений: 1
Рейтинг сообщения: 0
Кто-нибудь подскажет, для чего нужен в таймерах/счетчиках бит 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?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт янв 10, 2013 23:23:11 
Вымогатель припоя

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

_________________
С уважением,
Виктор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср фев 06, 2013 08:58:11 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вт сен 15, 2009 16:23:06
Сообщений: 693
Откуда: Москва
Рейтинг сообщения: 0
Доброе время суток.

Народ подскажите у STM8S105K4B6 есть заводской Bootloader?
Хочу прошить, но ST-Link не имею хочу попробывать через RS232.

_________________
Только абсолютная пустота бездны принесёт мне покой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Ср фев 06, 2013 09:44:21 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 16:19:17
Сообщений: 190
Откуда: Россия, Томск
Рейтинг сообщения: 0
Да, имеет.

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

Можно же купить дисковери (STM8SVLDISCOVERY ) вместо ST-link-ка, значительно дешеве...

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2579 ]     ... , , , 12, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y