|
|
  |
LPC1769 - требуется помощь! |
|
|
|
Feb 24 2012, 05:23
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 20-08-09
Пользователь №: 51 964

|
Добрый день! Только начал работать с отладочной платой 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)? объясните пожалуйста
|
|
|
|
|
Feb 24 2012, 05:26
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

|
Цитата(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: Погуглите по битовым операциям в Си...
Сообщение отредактировал sparcmaster - Feb 24 2012, 05:33
|
|
|
|
|
Feb 24 2012, 05:33
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 20-08-09
Пользователь №: 51 964

|
Цитата(sparcmaster @ Feb 24 2012, 11:26)  В регистре PCONP выставляются 3ий и 15ый биты. Погуглите по битовым операциям... А биты начинаем считать с нуля? тогда получается в регистре PCONP будет: 1000 0000 0000 1000?
|
|
|
|
|
Feb 24 2012, 05:36
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

|
Цитата(cinema_effect @ Feb 24 2012, 09:33)  А биты начинаем считать с нуля? тогда получается в регистре PCONP будет: 1000 0000 0000 1000? Начинаем считать с нуля, но не факт, что в регистре PCONP в остальных местах будут нули. Правильнее сказать, мы выставляем 3 и 15 биты не затрагивая остальные.
Сообщение отредактировал sparcmaster - Feb 24 2012, 05:36
|
|
|
|
|
Feb 24 2012, 05:51
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 20-08-09
Пользователь №: 51 964

|
Спасибо. С конструкцией типа (1<<X) вроде разобрался. Но конструкцию (2 << 0), (2 << 2) понять не могу.
В первом случае (2 << 0), можно понять как начиная с нулевого бита, записать значение 2? Т.е. 10. Тогда второй случай (2 << 2) можно понять как начиная со второго бита записать значение 2, т.е. 10. В итоге получаем слово 1010. Ну вроде так по логике? или опять туплю?
|
|
|
|
|
Feb 24 2012, 06:05
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

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

Группа: Участник
Сообщений: 47
Регистрация: 20-08-09
Пользователь №: 51 964

|
Цитата(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 двигается же не вправо, а влево вроде?
|
|
|
|
|
Feb 24 2012, 06:37
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

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

Группа: Участник
Сообщений: 47
Регистрация: 20-08-09
Пользователь №: 51 964

|
От души благодарю!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|