Перейти к содержанию
    

Уважаемые форумчане. Помогите, пожалуйста чайнику.

Написал первую прогу под АРМ.

По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть.

Прошиваю МК. Никакой реакции на кнопку.

Видимо я как-то неправильно считываю вход с кнопки...

:help: :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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кнопку и светодиод не перепутали? А то описание программе не соответствует.

По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть.

 

Ну и стандартные грабли: 0x00040000 - это 1 << 18, а не 19. Старайтесь избегать подобных записей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?..

Если на PIO нет тактирования, то на вход пин работать не будет. Как раз для работы в режиме периферии тактирование PIO не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, ошибку с нумерацией я исправил.

 

Ура!!! Спасибо большое. Заработало!!! Буду двигаться дальше.

Изменено пользователем Markfly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, пожалуйста, а что означает запись "1UL"? :laughing:

Значит что компилятор будет рассматривать эту константу как Unsigned Long.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могли бы вы еще кое-что разъяснить, уважаемый aaarrr,:..

 

Эта строка означает, если я правильно понимаю,

 

AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_PIOA;

 

означает, если я правильно понимаю,:

 

Запись в регистр PMC_PCER 1-цы сдвинутой на 2, т.е. 1 в PID2.

 

В даташите написано, что регистр PMC_PCER - регистр разрешения периферийного тактирования...

 

Запись 1-цы в бит этого регистра означает разрешение тактирования соответствующего периферийного

 

устройства.

 

Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. :laughing:

Изменено пользователем Markfly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. :laughing:

Что-то у Вас все смешалось. Найдите в даташите табличку Peripheral Identifiers и все, надеюсь, станет ясно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При чем тут периферия, если мы ее не используем

А PIO - это что, сарафан бабы Маши?

и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м

Сложное дело. Бит 2 - это бит разрешения тактирования в регистре разрешений тактирования.

Какое он имеет отношение к номерам битов PIO - никакого.

 

А вот к самому PIO - как периферийному устройству - имеет. Он разрешает подавать на него сигналы тактирования.

Почему именно бит 2? Да ни почему. Решили, что пусть бит 2 заведует тактированием PIO.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...