реклама на сайте
подробности

 
 
> Вход контроллера при считывании 1 сбрасывает уровень на линии в 0?, at91sam7s
Bulat
сообщение Sep 5 2008, 05:08
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Вывод PA23 контроллера at91sam7s настроен на вход и подключен к выводу другой микросхемы-приемника, который устанавливается в 1, когда микросхема-приемник принимает слово.
При считывании контроллером данной 1 (RCV = regs->PIOA_PDSR&0x800000), на данной лини устанавливается 0!!! Таким образом, я могу считать слово, которое пришло микросхеме-приемнику только до того как я ввожу свой контроллер в режим ожидания:
Код
RCV = 0;
while(RCV == 0)
{
    RCV = regs->PIOA_PDSR&0x800000;
}

Потому что в режиме ожидания на линии, с кот. считывает данные вывод PA23 всегда держится 0 и 1 не может установится!
При считывании на линии всегда устанавливается 0?
Заранее благодарен!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
evgn
сообщение Sep 5 2008, 05:41
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 4-10-06
Пользователь №: 20 954



Проверьте настройку на вход пина PA23, ибо 0 устанавливаться при считывании не должен... на то он в общем-то и вход.
Go to the top of the page
 
+Quote Post
Bulat
сообщение Sep 5 2008, 05:51
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Цитата(evgn @ Sep 5 2008, 11:41) *
Проверьте настройку на вход пина PA23, ибо 0 устанавливаться при считывании не должен... на то он в общем-то и вход.


Да все нормально, вроде. Вот настройка порта:
Код
//Инициализация PIO
void PIO_ini()
{
  regs->PIOA_PER=0xFFFBFFFF;//Все порты настр. на исп. в качестве в\в, кроме PA18
  regs->PIOA_PDR=~0xFFFBFFFF;
  regs->PIOA_BSR=0x40000; //Передает управл. выводами PA18 периф. устр. PMC (PCK2)
  
    regPIO->PIO_PPUDR = 0xffffffff; //Запрещение подтягивающих резисторов на всех подключенных портах
  //(запрещение подтягивающих резисторов на используемых выводах для избежания большого тока)
  regPIO->PIO_PPUER = ~0xffffffff;
    
  //выставляем единицу на вывод передатчика STRB
    
  regs->PIOA_OER = 0x480000; //Настройка вывода PA19 на выход        
  regs->PIOA_ODR = ~0x480000; //Запрет всех линий PA, кроме PA19
  regs->PIOA_OWER = 0x480000; //Разрешение вывода на линию PA19 из ODSR
  regs->PIOA_OWDR = ~0x480000;
  regs->PIOA_ODSR = 0x080000; //единица на выводе PA19 д.б. всегда, кроме
                              //случаев записи и считывания данных у передатчика  
}

//А вот и сама функция приема слова от приемника, там тоже частично порты настраиваются:

//Monitor mode
void MT()
{
  //Настройка контроллера PIO на вход
    regs->PIOA_OER = 0x2490000; //Настройка выводов PA на вход        
    regs->PIOA_ODR = ~0x2490000; //Запрет части линий PA на вывод        
    regs->PIOA_OWER = 0x2490000; //Разрешение вывода на линию PA из ODSR  
    regs->PIOA_OWDR = ~0x2490000;
    regs->PIOA_ODSR = 0x0080000; //R/W=0, REG=0, STRB=1
    //Какой именно канал (A или B) определять нет необх., так как при передаче
    //ком. слова задается канал
    jj=0;
      RCV = 0;
      while(RCV == 0)
      {
        RCV = regs->PIOA_PDSR&0x800000;
      }
      
      //Прием слова статуса
      //Delay_50(); //ждем 50нс
      regs->PIOA_ODSR = 0x400000; //REG=0, R/W=1, STRB=0
      //Delay_50(); //ждем 50нс
      PIO_copy = regs->PIOA_PDSR; //считывание данных с порта контроллера
      //Delay_25();
      regs->PIOA_ODSR = 0x2080000; //REG=0, R/W=0, STRB=1
      reverse(PIO_copy); //зеркально отражаем полученное слово  
      CWord[jj] = PIO_copy&0xFFFF; //запись слова статуса
      //CWord[jj] = 2;
      send_to_host();      
      jj++;
}
Go to the top of the page
 
+Quote Post
mstr
сообщение Sep 5 2008, 07:24
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 6-03-07
Из: Воронеж
Пользователь №: 25 931



Включли контроллез GPIO в PMC?
AT91C_BASE_PMC->PMC_PCER = (1 << AT91_ID_PIOA);
Иначе PIO_PDSR будет возвращать некорректные значения.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 5 2008, 08:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



GPIO на SAM'ах работает нормально, на настроенных на вход выводах ничего само по себе не устанавливается.

Цитата
0xFFFBFFFF
~0x480000
0x2490000

Как Вы думаете, много ли найдется желающих считать биты в подобных константах?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 21:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016