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

 
 
 
Reply to this topicStart new topic
> Почему на PA22 всегда "1", независимо от того, что туда записывается, at91sam7s256
Bulat
сообщение Mar 14 2008, 06:12
Сообщение #1


Местный
***

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



Контроллер at91sam7s256. Записываю данные в параллельный порт, на всех выводах устанавливаются нужные мне уровни, кроме порта PA22 (pin 14). На РА22 всегда "1", в независимости от того, что я туда записываю. На плате этот вывод нигде не коротит и на питание не заводится. Ниже приведена функция, инициализирующая порты ввода-вывода.

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


Заранее благодарен!
Go to the top of the page
 
+Quote Post
Goofy
сообщение Mar 14 2008, 06:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Глупый конечно вопрос: Может где то ниже по коду пин переключается на один из модулей переферии (скажем библиотечной процедурой инициализации модуля)? а именно на USART1 или SPI ?

Сообщение отредактировал Goofy - Mar 14 2008, 06:37
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2008, 06:47
Сообщение #3


Гуру
******

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



Цитата(Bulat @ Mar 14 2008, 09:12) *
Контроллер at91sam7s256. Записываю данные в параллельный порт, на всех выводах устанавливаются нужные мне уровни, кроме порта PA22 (pin 14). На РА22 всегда "1", в независимости от того, что я туда записываю. На плате этот вывод нигде не коротит и на питание не заводится. Ниже приведена функция, инициализирующая порты ввода-вывода.

Пардон, но Вы же сами его определили как периферийный пин:

Код
  regs->PIOA_PER=0xFFBFFFFF;//Все порты настр. на исп. в качестве в\в, кроме PA18 <-- а на самом деле PA22
  regs->PIOA_PDR=~0xFFBFFFFF;
Go to the top of the page
 
+Quote Post
deadman
сообщение Mar 14 2008, 06:50
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 13-09-07
Пользователь №: 30 506



Как вариант: посмотреть, точно ли отключен PULLUP на PA22?
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 14 2008, 07:07
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(Bulat @ Mar 14 2008, 09:12) *
regs->PIOA_PER=0xFFBFFFFF;//Все порты настр. на исп. в качестве в\в, кроме PA18

А надо писать
regs->PIOA_PER = 0xFFFFFFFF & ~(1<<18)
Тогда не будет таких глупых ошибок.
Go to the top of the page
 
+Quote Post
Bulat
сообщение Mar 14 2008, 08:42
Сообщение #6


Местный
***

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



Goofy: После инициализации PIO контроллер ожидает посылки от Хоста и никакие периф модули не инициализируются.

aaarrr: согласен, тут я ошибся, д.б.:
regs->PIOA_PER=0xFFFBFFFF;
Нок сожалению это картины не меняет, та же единице на выводе РА22.

eadman: PULLUP на PA22 отключен: regPIO->PIO_PPUDR = 0x63ddffff;

А может такое быть из-за неисправности порта?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2008, 08:46
Сообщение #7


Гуру
******

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



Цитата(Bulat @ Mar 14 2008, 11:42) *
aaarrr: согласен, тут я ошибся, д.б.:
regs->PIOA_PER=0xFFFBFFFF;
Нок сожалению это картины не меняет, та же единице на выводе РА22.

А это
Код
regs->PIOA_PDR=~0xFFBFFFFF;
не забыли исправить, часом?
Go to the top of the page
 
+Quote Post
Bulat
сообщение Mar 14 2008, 09:12
Сообщение #8


Местный
***

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



Цитата
А это
regs->PIOA_PDR=~0xFFBFFFFF;
не забыли исправить, часом?


нет, не забыл)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2008, 09:24
Сообщение #9


Гуру
******

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



Цитата(Bulat @ Mar 14 2008, 12:12) *
нет, не забыл)

Тогда код в студию.
Go to the top of the page
 
+Quote Post
Bulat
сообщение Mar 14 2008, 10:14
Сообщение #10


Местный
***

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



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

int main(void)                                    
{    
   AT91F_USB_Open();                                
   USB_init();    
   AT91C_BASE_RSTC -> RSTC_RMR=AT91C_RSTC_URSTEN|(0x4<<8)|(unsigned int)(0xA5<<24);// Enable  User Reset and set its minimal assertion to 960 us

   PIO_ini();

   regs->PMC_SCDR|=0x400;  
   pmc->PMC_PCKR[2]=0xF;//Источник прогр. такт. сигнала - PLLCK, значение
                      //предделителя-8, т.е. вых. частота на выходе PA6-12 МГЦ.
                      //(исп. для тактирования DD1)
   regs->PMC_SCER|=0x400; //Разрешает подачу такт. сигн. PCK2

   while(1);
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2008, 10:32
Сообщение #11


Гуру
******

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



Ничего не понимаю: что Вы ждете от PA22 после этого:
Код
regs->PIOA_ODR = ~0x80000; //Запрет всех линий PA, кроме PA19
Go to the top of the page
 
+Quote Post
Bulat
сообщение Mar 14 2008, 10:53
Сообщение #12


Местный
***

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



Цитата(aaarrr @ Mar 14 2008, 15:32) *
Ничего не понимаю: что Вы ждете от PA22 после этого:
Код
regs->PIOA_ODR = ~0x80000; //Запрет всех линий PA, кроме PA19


да, но ведь на остальных то выводах "0", кроме PA19, конечно! Почему именно на РА22 весит "1"?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2008, 11:07
Сообщение #13


Гуру
******

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



Цитата(Bulat @ Mar 14 2008, 13:53) *
да, но ведь на остальных то выводах "0", кроме PA19, конечно! Почему именно на РА22 весит "1"?

А почему бы и не "1" - вывод-то отключен. В "0" внешним резистором его перевести можно?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 17:25
Рейтинг@Mail.ru


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