Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM7S
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Markfly
Уважаемые форумчане. Помогите, пожалуйста чайнику.
Написал первую прогу под АРМ.
По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть.
Прошиваю МК. Никакой реакции на кнопку.
Видимо я как-то неправильно считываю вход с кнопки...
help.gif help.gif
Код
#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
Наверное, забыли тактирование PIO включить:
Код
    AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_PIOA;
Markfly
Вписал эту строку в "static void ConfigureButton()". Эффекта нет.
aaarrr
Кнопку и светодиод не перепутали? А то описание программе не соответствует.
Цитата
По задумке, при нажатии на кнопку (низкий уровень на PA0), светодиод на PA19 (к катоду) должен загораться, при отпускании кнопки - тухнуть.


Ну и стандартные грабли: 0x00040000 - это 1 << 18, а не 19. Старайтесь избегать подобных записей.
Markfly
И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?..
aaarrr
Цитата(Markfly @ Jul 8 2009, 16:44) *
И , может, я не правильно понял, но в даташите, вроде, написано, что это тактирование включается, если пин работает в режиме периферии?.. Или я ничего не понял?..

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

Ура!!! Спасибо большое. Заработало!!! Буду двигаться дальше.
aaarrr
Цитата(Markfly @ Jul 8 2009, 17:47) *
Скажите, пожалуйста, а что означает запись "1UL"? laughing.gif

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

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

AT91C_BASE_PMC->PMC_PCER = 1UL << AT91C_ID_PIOA;

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

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

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

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

устройства.

Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. laughing.gif
aaarrr
Цитата(Markfly @ Jul 8 2009, 18:40) *
Тогда я ничего не понимаю... При чем тут периферия, если мы ее не используем, и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м. laughing.gif

Что-то у Вас все смешалось. Найдите в даташите табличку Peripheral Identifiers и все, надеюсь, станет ясно.
DpInRock
Цитата
При чем тут периферия, если мы ее не используем

А PIO - это что, сарафан бабы Маши?
Цитата
и при чем тут бит 2, усли мы работаем только с 0-м и с 19-м

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

А вот к самому PIO - как периферийному устройству - имеет. Он разрешает подавать на него сигналы тактирования.
Почему именно бит 2? Да ни почему. Решили, что пусть бит 2 заведует тактированием PIO.
Markfly
Спасибо, буду разбираться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.