Форум РадиоКот https://radiokot.ru/forum/ |
|
Разбираем код прошивки ARM https://radiokot.ru/forum/viewtopic.php?f=59&t=162335 |
Страница 1 из 1 |
Автор: | 201bazza [ Сб апр 13, 2019 20:16:22 ] |
Заголовок сообщения: | Разбираем код прошивки ARM |
Здравствуйте! Подскажите, пожалуйста, точнее разжуйте новичку вот такой код: //Выставим бит 5 в порте А (к нему должен быть подключен светодиод) #define LED_ON PORTA|=(1<<5) Это пример кода с соседнего сайта http://cxem.net/mc/mc132.php. Не очень понятна вот эта строчка: PORTA|=(1<<5). 1) Мы взяли в общем случае 8 разрядов порта А (для STM8), при помощи выражения 1<<5 образуется двоичное слово 0b10000. 2) Выражение PORTA|=(1<<5) аналогично PORTA=PORTA | (1<<5) 3) Иначе PORTA=PORTA | 0b10000 4) Таким образом в 5 разряде порта А получили 1. Верно я рассуждаю? |
Автор: | Ser60 [ Сб апр 13, 2019 20:39:51 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
Сначала формируем константу (1<<5), содержащую 1 только в бите 5. Затем логически добавляем её к значению PORTA. Иными словами, выставляем бит 5 в регистре PORTA, как и написано в комментарии. |
Автор: | 201bazza [ Сб апр 13, 2019 20:54:45 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
Вот еще непонятная строчка. Тут вообще не знаю что предположить. Отсюда взято с примера: http://cxem.net/mc/mc133.php RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_IOPCEN; 1) Что это за слово: RCC_APB2ENR_IOPCEN ? 2) Что такое RCC ? В источнике так написано, хотя очень понятно: "Для разрешения тактирования шины порта С необходимо в регистре RCC_APB2ENR установить бит IOPCEN в единицу. Чтобы при установке данного бита, мы не сбросили другие, установленные в данном регистре, нам необходимо к текущему состоянию регистра применить операцию логического сложения (логического «ИЛИ») и после этого записать полученное значение в содержимое регистра. В соответствии со структурой библиотеки ST, обращение к значению регистра для его чтения и записи производится через указатель на структуру RCC->APB2ENR". |
Автор: | Myp3ik [ Сб апр 13, 2019 21:00:02 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
(1<<5) == 0b100000 . 5 бит будет шестым по счету. Нумерация начинается с 0. |
Автор: | 201bazza [ Сб апр 13, 2019 21:12:44 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
(1<<5) == 0b100000 . 5 бит будет шестым по счету. Нумерация начинается с 0. 1) Получается сначала имеем вот такую константу 0b1 2) На следующей операции сдвига вот это 0b10 3) Далее это 0b100 4) После 5-го сдвига имеем 0b100000 |
Автор: | Myp3ik [ Сб апр 13, 2019 21:49:30 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
https://habr.com/ru/post/406889/ |
Автор: | Ser60 [ Вс апр 14, 2019 01:15:31 ] |
Заголовок сообщения: | Re: Разбираем код прошивки ARM |
RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_IOPCEN; 1) Что это за слово: RCC_APB2ENR_IOPCEN ? 2) Что такое RCC ? RCC - это Reset and Clock Control регистр в STM32. Константа RCC_APB2ENR_IOPCEN определена в хедерe rcc.h и содержит бит установки разрешения тактирования шины порта С. Сделайте поиск в Гугле по ней и RCC и получите ответ на эти и многие подобные вопросы. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |