Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Уважаемые форумчане. Помогите, пожалуйста чайнику. Написал первую прогу под АРМ. По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть. Прошиваю МК. Никакой реакции на кнопку. Видимо я как-то неправильно считываю вход с кнопки... :help: #include <board.h> #include <pio/pio.h> #include <pio/pio_it.h> #include <pit/pit.h> #include <aic/aic.h> #include <tc/tc.h> #include <utility/led.h> #include <utility/trace.h> #include <stdio.h> //Configure PIO static void ConfigureButton() { AT91C_BASE_PIOA->PIO_PER = 0xFFFFFFFF; //Enable PortA like PIO AT91C_BASE_PIOA->PIO_ODR = 1 << 19; //PA19 like IN AT91C_BASE_PIOA->PIO_PPUER = 1 << 19; //Pull-Up PA19 AT91C_BASE_PIOA->PIO_OER = 1 << 0; //PA0 like OUT } int main() { ConfigureButton(); while(1) { if(( AT91C_BASE_PIOA->PIO_PDSR & 0x00040000) == 0) { AT91C_BASE_PIOA->PIO_CODR = 0x00000001; //0 on PA0, LED on } else { AT91C_BASE_PIOA->PIO_SODR = 0x00000001; //1 on PA0, LED off } } } http://electronix.ru/forum/style_emoticons/default/help.gif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Наверное, забыли тактирование PIO включить: AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_PIOA; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Вписал эту строку в "static void ConfigureButton()". Эффекта нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Кнопку и светодиод не перепутали? А то описание программе не соответствует. По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть. Ну и стандартные грабли: 0x00040000 - это 1 << 18, а не 19. Старайтесь избегать подобных записей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?.. Если на PIO нет тактирования, то на вход пин работать не будет. Как раз для работы в режиме периферии тактирование PIO не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 (изменено) · Жалоба Спасибо, ошибку с нумерацией я исправил. Ура!!! Спасибо большое. Заработало!!! Буду двигаться дальше. Изменено 8 июля, 2009 пользователем Markfly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Скажите, пожалуйста, а что означает запись "1UL"? :laughing: Значит что компилятор будет рассматривать эту константу как Unsigned Long. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 (изменено) · Жалоба Не могли бы вы еще кое-что разъяснить, уважаемый aaarrr,:.. Эта строка означает, если я правильно понимаю, AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_PIOA; означает, если я правильно понимаю,: Запись в регистр PMC_PCER 1-цы сдвинутой на 2, т.е. 1 в PID2. В даташите написано, что регистр PMC_PCER - регистр разрешения периферийного тактирования... Запись 1-цы в бит этого регистра означает разрешение тактирования соответствующего периферийного устройства. Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. :laughing: Изменено 8 июля, 2009 пользователем Markfly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. :laughing: Что-то у Вас все смешалось. Найдите в даташите табличку Peripheral Identifiers и все, надеюсь, станет ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба При чем тут периферия, если мы ее не используем А PIO - это что, сарафан бабы Маши? и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м Сложное дело. Бит 2 - это бит разрешения тактирования в регистре разрешений тактирования. Какое он имеет отношение к номерам битов PIO - никакого. А вот к самому PIO - как периферийному устройству - имеет. Он разрешает подавать на него сигналы тактирования. Почему именно бит 2? Да ни почему. Решили, что пусть бит 2 заведует тактированием PIO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Markfly 0 8 июля, 2009 Опубликовано 8 июля, 2009 · Жалоба Спасибо, буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться