16.03.2011, 18:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.02.2008
Сообщений: 1,812
Сказал спасибо: 126
Сказали Спасибо 605 раз(а) в 422 сообщении(ях)
|
Re: FAQ по STM8
Если я хочу сигнализировать о переключении источника такта, то буду создавать соответствующий обработчик. Просто надо чтобы он начинал контроль после установившегося режима от HSE.
Т.е. создать свой флаг, установить его самому и контролировать его в данном обработчике прерывания CLK. Видимо так.
Последний раз редактировалось andries5; 16.03.2011 в 18:33.
|
|
|
|
16.03.2011, 18:48
|
|
Временная регистрация
Регистрация: 25.12.2007
Сообщений: 91
Сказал спасибо: 8
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: FAQ по STM8
Объясните, пожалуйста, суть строчки:
Код:
|
#define GPIOA ((GPIO_TypeDef *) GPIOA_BaseAddress) |
Не могу в голове развернуть ее никак ))) думаю не нужно рассказывать, откуда она ))
|
|
|
|
16.03.2011, 18:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: FAQ по STM8
Это приведение типа. Разворачивать ее не во что. Дословно GPIOA - указатель на переменную типа GPIO_TypeDef, содержит GPIOA_BaseAddress, т.е. переменная/константа на которую указывает этот указатель имеет адрес GPIOA_BaseAddress.
|
|
|
|
17.03.2011, 03:08
|
|
Прописка
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
|
Re: FAQ по STM8
Наверно будет понятней, если сказать: "по адресу GPIOA_BaseAddress расположена структура GPIO_TypeDef". Как бы в этом суть.
Ну а обращение к этой структуре, как по указателю.
GPIOA-›ODR - обращение к регистру ODR, ну и т.д.
|
|
|
Сказали "Спасибо" akimych
|
|
|
04.05.2011, 22:01
|
|
Прохожий
Регистрация: 30.09.2010
Сообщений: 2
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Discovery. При компиляции Cosmic выдаёт ошибку "bad struct/union operand" на любую строку с обращением к ADC1, например: ADC1-›CR1=0; Тогда, как на ADC2-›CSR=0; - всё в порядке. Но в STM8S105C6 нет ADC2. Понятно, что что-то с определением типа процессора. В настройках всё правильно. Что может быть?
|
|
|
|
05.05.2011, 07:43
|
|
Прописка
Регистрация: 09.12.2003
Сообщений: 116
Сказал спасибо: 5
Сказали Спасибо 23 раз(а) в 19 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Hrumm
|
Discovery. При компиляции Cosmic выдаёт ошибку "bad struct/union operand" на любую строку с обращением к ADC1, например: ADC1-›CR1=0; Тогда, как на ADC2-›CSR=0; - всё в порядке. Но в STM8S105C6 нет ADC2. Понятно, что что-то с определением типа процессора. В настройках всё правильно. Что может быть?
|
Про космик не в курсе но обычно тип процессора можно задать 2 способами.
1-опции в IDE
2-принудительно дефайном прямо в программе
может рудимент в исходниках?
|
|
|
|
05.05.2011, 07:56
|
|
Прохожий
Регистрация: 30.09.2010
Сообщений: 2
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от PlainUser
|
Про космик не в курсе но обычно тип процессора можно задать 2 способами.
1-опции в IDE
2-принудительно дефайном прямо в программе
может рудимент в исходниках?
|
Спасибо! Помог 2-й вариант. Всё заработало.
|
|
|
|
07.05.2011, 02:03
|
|
Частый гость
Регистрация: 15.11.2009
Сообщений: 28
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Недавно взялся за изучение микроконтроллеров STM8.
На данный момент читаю документацию
(programming manual)
там на странице 14 написано:
Global configuration register (CFG_GCR):
The global configuration register is a memory mapped register. It controls the configuration
of the processor. It contains the AL control bit:
● AL: Activation level
If the AL bit is 0 (main), the IRET will cause the context to be retrieved from stack and the
main program will continue after the WFI instruction.
If the AL bit is 1 (interrupt only active), the IRET will cause the CPU to go back to WFI/HALT
mode without restoring the context.
This bit is used to control the low power modes of the MCU. In a very low power application,
the MCU spends most of the time in WFI/HALT mode and is woken up (through interrupts)
at specific moments in order to execute a specific task. Some of these recurring tasks are
short enough to be treated directly in an ISR, rather than going back to the main program. In
this case, by programming the AL bit to 1 before going to low power (by executing WFI/HALT
instruction), the run time/ISR execution is reduced due to the fact that the register context is
not saved/restored each time.
Что я (с помощью переводчика) перевел как:
Глобальный регистр конфигурации.
Расположен в памяти программ. Управляет конфигурацией процессора. Состоит из бита AL.
Когда AL = 0 (основные), возврат из прерывания контекст восстанавливает из стека и продолжает выполнение программы после инструкции WFI.
Когда AL = 1, (только активные прерывания) после команды IRET ЦПУ идет обратно WFI/HALT режим через сохранение контекста.
Этот бит используется для режима энергосбережения ЦПУ. Для очень малопотребляющих приложений, в этом случае MCU проводит большую часть времени в способе WFI/HALT и пробуждается (через перерывы) в определенные моменты, чтобы выполнить определенную задачу. Некоторые из этих возвращающихся задач достаточно короткий, чтобы рассматриваться непосредственно в ISR, вместо того, чтобы возвратиться к главной программе. В этом случае, программируя AL = 1, контекст не будет восстанавливаться, и как следствие, длительность обработчика уменьшится.
В связи с этим вопросы:
1) Для чего используется этот бит (из перевода это не очень ясно)?
2) Что такое ISR?
3) Чем отличается сохранение контекста при AL = 0/1?
4) Связано ли это (и как) с приоритетом прерываний?
|
|
|
|
07.05.2011, 19:00
|
|
Прописка
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
|
Re: FAQ по STM8
Цитата:
|
В связи с этим вопросы:
1) Для чего используется этот бит (из перевода это не очень ясно)?
2) Что такое ISR?
3) Чем отличается сохранение контекста при AL = 0/1?
4) Связано ли это (и как) с приоритетом прерываний?
|
1) Этот бит используется для управления энергосберегающим режимом.
2) Interrupt Service Routine = обработчик прерывания
3) Сохранение - ничем.
4) Нет.
AL влияет на выход из энергосберегающего режима. Команда WFI переводит проц в спячку, прерывание его будит. А далее, если AL = 0, то после выхода из прерывания проц продолжит выполнение основной програмы (после инструкции WFI), если AL = 1, то после выхода из прерывания проц заснет опять.
Переводчик странно перевел "go back to WFI/HALT mode without restoring the context" Правильно будет не "через сохранение контекста", а "без восстановления контекста". Про контекст упомянуто, чтоб пояснить, если не надо возвращаться в основную программу, то и контекст восстанавливать из стека не надо.
|
|
|
Сказали "Спасибо" akimych
|
|
|
08.05.2011, 16:23
|
|
Частый гость
Регистрация: 15.11.2009
Сообщений: 28
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
В то же документе на стр. 50
Зачем нужны Pre-code и pre-bytes?
Это байт который стоит перед кодом операции и изменяет команду, которая следуют за ним.
Вот например один из них:
90h = PDY Replaces an X based instruction using immediate, direct, indexed or inherent addressing mode by a Y one. It also provides read/modify/write instructions using Y indexed addressing mode with long offset and two bit handling instructions
(BCPL and BCCM)
и мой перевод, из которого яснее не становится:
Заменяет команду, основанную на Х использованием непосредственный, прямой, индексной или inherent адресации основанной на Y . Это также обеспечивает работу команд типа чтение/модификация/запись, с использованием индексной адресации с регистром Y адресации с длинным смещением и двумя «ручными» битовыми командами (BCPL и BCCM).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:57.
|
|