Разбираем код прошивки ARM

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
201bazza
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Разбираем код прошивки ARM

Сообщение 201bazza »

Здравствуйте! Подскажите, пожалуйста, точнее разжуйте новичку вот такой код:

//Выставим бит 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
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Разбираем код прошивки ARM

Сообщение Ser60 »

Сначала формируем константу (1<<5), содержащую 1 только в бите 5. Затем логически добавляем её к значению PORTA. Иными словами, выставляем бит 5 в регистре PORTA, как и написано в комментарии.
Реклама
201bazza
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Re: Разбираем код прошивки ARM

Сообщение 201bazza »

Вот еще непонятная строчка. Тут вообще не знаю что предположить. Отсюда взято с примера: 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
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Разбираем код прошивки ARM

Сообщение Myp3ik »

(1<<5) == 0b100000 . 5 бит будет шестым по счету. Нумерация начинается с 0.
Иван Сусанин - первый полупроводник :solder:
Реклама
Эиком - электронные компоненты и радиодетали
201bazza
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Re: Разбираем код прошивки ARM

Сообщение 201bazza »

[uquote="Myp3ik",url="/forum/viewtopic.php?p=3615631#p3615631"](1<<5) == 0b100000 . 5 бит будет шестым по счету. Нумерация начинается с 0.[/uquote]

1) Получается сначала имеем вот такую константу 0b1
2) На следующей операции сдвига вот это 0b10
3) Далее это 0b100
4) После 5-го сдвига имеем 0b100000
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Разбираем код прошивки ARM

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Разбираем код прошивки ARM

Сообщение Ser60 »

[uquote="201bazza",url="/forum/viewtopic.php?p=3615628#p3615628"]RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_IOPCEN;
1) Что это за слово: RCC_APB2ENR_IOPCEN ?
2) Что такое RCC ?[/uquote]

RCC - это Reset and Clock Control регистр в STM32. Константа RCC_APB2ENR_IOPCEN определена в хедерe rcc.h и содержит бит установки разрешения тактирования шины порта С.
Сделайте поиск в Гугле по ней и RCC и получите ответ на эти и многие подобные вопросы.
Ответить

Вернуться в «ARM»