Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC1769 - требуется помощь!
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
cinema_effect
Добрый день! Только начал работать с отладочной платой LPC1769. Использую стандартные примеры, чтобы разобраться. Помогите понять код:

void SER_Init (void) {
#ifndef __DBG_ITM

#ifdef __UART0 /* UART0 */
LPC_SC->PCONP |= ((1 << 3) | (1 << 15)); /* enable power to UART0 & IOCON */

LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 */
LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 */
#else /* UART1 */
LPC_SC->PCONP |= ((1 << 4) | (1 << 15)); /* enable power to UART1 & IOCON */

LPC_PINCON->PINSEL4 |= (2 << 0); /* Pin P2.0 used as TXD1 */
LPC_PINCON->PINSEL4 |= (2 << 2); /* Pin P2.1 used as RXD1 */
#endif

Это инициализация UART. Не могу понять, что значит LPC_SC->PCONP |= ((1 << 3) | (1 << 15));
здесь не ясно, что значит (1 << 3), (1 << 15), как и все выражение в целом. Так же не понимаю значение выражения (2 << 0)? объясните пожалуйста
sparcmaster
Цитата(cinema_effect @ Feb 24 2012, 09:23) *
Это инициализация UART. Не могу понять, что значит LPC_SC->PCONP |= ((1 << 3) | (1 << 15));

В регистре PCONP выставляются 3ий и 15ый биты.
Цитата(cinema_effect @ Feb 24 2012, 09:23) *
Так же не понимаю значение выражения (2 << 0)?

Тут в регистре PINSEL4 в биты 0 и 1 заносится число 2, чтобы ножка P2.0 выполняла функции TXD1. Аналогично для ножки P2.1 задается функция RXD1:
Код
LPC_PINCON->PINSEL4 |= (2 << 2);

PS: Погуглите по битовым операциям в Си...
cinema_effect
Цитата(sparcmaster @ Feb 24 2012, 11:26) *
В регистре PCONP выставляются 3ий и 15ый биты. Погуглите по битовым операциям...

А биты начинаем считать с нуля? тогда получается в регистре PCONP будет: 1000 0000 0000 1000?
sparcmaster
Цитата(cinema_effect @ Feb 24 2012, 09:33) *
А биты начинаем считать с нуля? тогда получается в регистре PCONP будет: 1000 0000 0000 1000?

Начинаем считать с нуля, но не факт, что в регистре PCONP в остальных местах будут нули. Правильнее сказать, мы выставляем 3 и 15 биты не затрагивая остальные.
cinema_effect
Спасибо. С конструкцией типа (1<<X) вроде разобрался. Но конструкцию (2 << 0), (2 << 2) понять не могу.

В первом случае (2 << 0), можно понять как начиная с нулевого бита, записать значение 2? Т.е. 10. Тогда второй случай (2 << 2) можно понять как начиная со второго бита записать значение 2, т.е. 10. В итоге получаем слово 1010. Ну вроде так по логике? или опять туплю?
sparcmaster
Цитата(cinema_effect @ Feb 24 2012, 09:51) *
В первом случае (2 << 0), можно понять как начиная с нулевого бита, записать значение 2? Т.е. 10. Тогда второй случай (2 << 2) можно понять как начиная со второго бита записать значение 2, т.е. 10. В итоге получаем слово 1010. Ну вроде так по логике? или опять туплю?

Все верно. Только не "записать", а просто передвинуть число 2 влево на 0 и 2 бита от начала.
cinema_effect
Цитата(sparcmaster @ Feb 24 2012, 12:05) *
Все верно. Только не "записать", а просто передвинуть число 2 вправо на 0 и 2 бита от начала.

Спасибо. Вроде все понял. Только число 2 двигается же не вправо, а влево вроде?

Цитата(sparcmaster @ Feb 24 2012, 12:05) *
Все верно. Только не "записать", а просто передвинуть число 2 вправо на 0 и 2 бита от начала.

Спасибо. Вроде все понял. Только число 2 двигается же не вправо, а влево вроде?

Цитата(sparcmaster @ Feb 24 2012, 12:05) *
Все верно. Только не "записать", а просто передвинуть число 2 вправо на 0 и 2 бита от начала.

Спасибо. Вроде все понял. Только число 2 двигается же не вправо, а влево вроде?

Цитата(sparcmaster @ Feb 24 2012, 12:05) *
Все верно. Только не "записать", а просто передвинуть число 2 вправо на 0 и 2 бита от начала.

Спасибо. Вроде все понял. Только число 2 двигается же не вправо, а влево вроде?
sparcmaster
Цитата(cinema_effect @ Feb 24 2012, 10:35) *
Спасибо. Вроде все понял. Только число 2 двигается же не вправо, а влево вроде?

Да, конечно, влево - я ошибся.
cinema_effect
От души благодарю!
Сергей Борщ
Очень перекликается с соседней темой про радиокружок. "Давайте научим детей паять схемы из микросхем" "Давайте научим детей программировать процики". "Устройство и работа транзистора уже не актуальны".

Наглядный пример такого подхода. Если бы автор этой темы, перед тем как заняться программированием, усвоил базовые для программирования разделы - булеву алгебру и двоичную арифметику, то этот вопрос просто не возник бы. Все понималось бы на интуитивном уровне.
ViKo
Цитата(Сергей Борщ @ Feb 24 2012, 10:50) *
Если бы автор этой темы, перед тем как заняться программированием, усвоил базовые для программирования разделы - булеву алгебру и двоичную арифметику, то этот вопрос просто не возник бы.

Вот он и усвоил... наиболее простым способом - задав вопрос и получив ответ. И спасибо сказал.
Уверен, что даже "гуру" когда-то не знали, сколько будет "e в степени j*Пи"...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.