Цитата(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++;
}