Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:38

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Гуру Си, подскажите по записи в порт STM32
СообщениеДобавлено: 22 апр 2011, 23:25 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 13 апр 2010, 13:44
Сообщения: 30
Волею судеб вышло так, что 16-ти битное слово не могу выводить в один порт, железо подключено к двум разным портам. 3 бита выводится в порт C, 13 бит в порт А.
Пишу так

GPIOA->BSRR = ((~(Data&PortA_mask))<<16)+(Data&PortA_mask);
GPIOC->BSRR = ((~(Data>>3)&PortC_mask)<<16)+((Data>>3)&PortC_mask);

Data - то, что нужно вывести вовне
PortX_mask - маска чтоб соседние биты не повредить
Левая часть выражения ~(Data>>3)&PortC_mask)<<16) сбрасывает биты, т.к. за сброс отвечает старшая часть 32-х битного регистра BSRR, правая часть (Data&PortA_mask) соответственно устанавливает нужные биты.
Ну и это, скобок так много чтобы мне самому было понятнее и однозначнее.

Возможно ли как-то покрасивше сделать и побыстрее? В Си я конечно дуб =)

_________________
Hacked by ICE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Гуру Си, подскажите по записи в порт STM32
СообщениеДобавлено: 23 апр 2011, 04:28 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2010, 19:07
Сообщения: 930
Откуда: Тольятти
Цитата:
GPIOA->BSRR = ((~(Data&PortA_mask))<<16)+(Data&PortA_mask);

а если сначала сдвинуть на 16 и сложить ( (Data<<16)+Data ), а потом сразу наложить 32-битную маску PortA_mask?

Цитата:
GPIOC->BSRR = ((~(Data>>3)&PortC_mask)<<16)+((Data>>3)&PortC_mask);

а если сначала сдвигуть на 16 и сложить ((Data<<16)+Data), потом наложить 32-битную маску PortC_mask, а уж потом сдвинуть вправо на три?

порядок последних 2 действий непринципиален. в обоих случаях выигрыш в одной операции И. во втором случае выигрыш еще и в одном сдвиге на 3.

_________________
Роман


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB