|
|
  |
Xmega32E5 непонятка, проект на CVAVR |
|
|
|
Dec 8 2014, 13:35
|
Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017

|
Здравствуйте всем. Настроил PORTD на вход с pull-up, инверсию не включал. Пины не подключены, на всех Uпит. Считываю состояние порта в переменную, вместо FF нули.
1. Настройка порта
char t;//
// PORTD initialization // OUT register PORTD.OUT=0x00; // Pin0: Input ... // Pin7: Input PORTD.DIR=0x00; // Pin0 Output/Pull configuration: Totempole/Pull-up (on input) // Pin0 Input/Sense configuration: Sense both edges // Pin0 Inverted: Off PORTD.PIN0CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin1 Output/Pull configuration: Totempole/Pull-up (on input) // Pin1 Input/Sense configuration: Sense both edges // Pin1 Inverted: Off PORTD.PIN1CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin2 Output/Pull configuration: Totempole/Pull-up (on input) // Pin2 Input/Sense configuration: Sense both edges // Pin2 Inverted: Off PORTD.PIN2CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin3 Output/Pull configuration: Totempole/Pull-up (on input) // Pin3 Input/Sense configuration: Sense both edges // Pin3 Inverted: Off PORTD.PIN3CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin4 Output/Pull configuration: Totempole/Pull-up (on input) // Pin4 Input/Sense configuration: Sense both edges // Pin4 Inverted: Off PORTD.PIN4CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin5 Output/Pull configuration: Totempole/Pull-up (on input) // Pin5 Input/Sense configuration: Sense both edges // Pin5 Inverted: Off PORTD.PIN5CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin6 Output/Pull configuration: Totempole/Pull-up (on input) // Pin6 Input/Sense configuration: Sense both edges // Pin6 Inverted: Off PORTD.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // Pin7 Output/Pull configuration: Totempole/Pull-up (on input) // Pin7 Input/Sense configuration: Sense both edges // Pin7 Inverted: Off PORTD.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc; // PORTD Peripheral Output Remapping // USART0 XCK: Pin 1 // USART0 RXD: Pin 2 // USART0 TXD: Pin 3 PORTD.REMAP=(0<<PORT_USART0_bp) | (0<<PORT_TC4D_bp) | (0<<PORT_TC4C_bp) | (0<<PORT_TC4B_bp) | (0<<PORT_TC4A_bp); // Interrupt level: Disabled PORTD.INTCTRL=PORT_INTLVL_OFF_gc; // Pin0 Pin Change interrupt : Off ... // Pin7 Pin Change interrupt : Off PORTD.INTMASK=0x00;
2. Кусок моей проги
t=PORTD.IN;// if (t==0xFF) t=1;// else t=0;//
Переменная t всегда равна 0, хотя должна быть 1 при FF на входе порта. Что-то я не так делаю? Спасибо за ответ.
|
|
|
|
|
Dec 8 2014, 14:24
|
Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017

|
Цитата(Xenia @ Dec 8 2014, 16:01)  Распечатайте лучше значение t напрямую, таким, каково оно есть без замены на 0 или 1. Или объявите t как unsigned char t; Объявил t как unsigned char t - то же самое. А напрямую распечатать t не могу, МК на микроплате с семью выводами. Приходится анализировать по косвенным данным из осциллографа. Как я понял, с настройками порта у меня все в порядке. То есть, или МК битый или непонятно что.
|
|
|
|
|
Dec 8 2014, 16:42
|
Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017

|
Цитата(Xenia @ Dec 8 2014, 16:49)  Ага, непонятно. Во блин! Будем искать. Xenia, подскажите пожалуйста, как считать значение одного бита из порта, например PD4. С xmega_ми только начинаю работать, еще не разобрался.
|
|
|
|
|
Dec 8 2014, 16:52
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Фишер @ Dec 8 2014, 19:42)  Xenia, подскажите пожалуйста, как считать значение одного бита из порта, например PD4. С xmega_ми только начинаю работать, еще не разобрался. Только битовым сравнением: PORTD.IN & PIN4_bm Например: t = (PORTD.IN & PIN4_bm) ? 1 : 0; Это для вывода есть PORTD.OUTSET и PORTD.OUTCLR, чтобы каждой ножкой отдельно дрыгать, а для чтения это неактуально - PORTD.IN в любой момент времени отражает состояние порта целиком.
|
|
|
|
|
Dec 8 2014, 17:08
|
Группа: Новичок
Сообщений: 4
Регистрация: 7-12-14
Пользователь №: 84 017

|
Цитата(Xenia @ Dec 8 2014, 18:52)  Только битовым сравнением:
PORTD.IN & PIN4_bm
Например:
t = (PORTD.IN & PIN4_bm) ? 1 : 0;
Это для вывода есть PORTD.OUTSET и PORTD.OUTCLR, чтобы каждой ножкой отдельно дрыгать, а для чтения это неактуально - PORTD.IN в любой момент времени отражает состояние порта целиком. Понял, спасибо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|