Всем привет. Проблема такая.
В первом варианте устройства установлено 2-а драйвера 74HC244. Через один драйвер устройство передает данные на внешний разъем, через второй читает с этого же разъема. На разъеме используются 5 линий. Данные в последствии передаются по USB на РС. C USB проблем не было, плата эксплуатируется достаточно продолжительное время.
Сейчас в новом варианте заменил два драйвера 74HC244 на 5 штук 74LVC1T45. Сторона А к МК, сторона Б на разъем.
Столкнулся с проблемой, что при непродолжительной работе отваливается UDP. Думаю, что как то не правильно работаю с драйверами

Если убираю код управления(ногомахания) все работает замечательно.
Ниже объявление линий:
Код
/* Pins IO lines */
#define BRD_CFG_PIN_RXD AT91C_PIO_PA7 /* */
#define BRD_CFG_PIN_CLK AT91C_PIO_PA15 /* */
#define BRD_CFG_PIN_RST AT91C_PIO_PA11 /* */
#define BRD_CFG_PIN_SEL AT91C_PIO_PA26 /* */
#define BRD_CFG_PIN_TXD AT91C_PIO_PA20 /* */
#define BRD_PIN_MASK ((UINT32)(BRD_CFG_PIN_RXD | BRD_CFG_PIN_CLK | BRD_CFG_PIN_RST | BRD_CFG_PIN_SEL | BRD_CFG_PIN_TXD))
/* Pins Direction lines */
#define BRD_CFG_DIR_RXD AT91C_PIO_PA8 /* */
#define BRD_CFG_DIR_CLK AT91C_PIO_PA10 /* */
#define BRD_CFG_DIR_RST AT91C_PIO_PA12 /* */
#define BRD_CFG_DIR_SEL AT91C_PIO_PA25 /* */
#define BRD_CFG_DIR_TXD AT91C_PIO_PA23 /* */
#define BRD_DIR_MASK ((UINT32)(BRD_CFG_DIR_RXD | BRD_CFG_DIR_CLK | BRD_CFG_DIR_RST | BRD_CFG_DIR_SEL | BRD_CFG_DIR_TXD))
/* Pins enable - set as output, disable - set as input */
#define BRD_PIN_ENA(pin, mask) do { BRD_CFG_TGT_BASE->PIO_SODR = mask; BRD_CFG_TGT_BASE->PIO_OER = pin; } while(0)
#define BRD_PIN_DIS(pin, mask) do { BRD_CFG_TGT_BASE->PIO_ODR = pin; BRD_CFG_TGT_BASE->PIO_CODR = mask; } while(0)
#define BRD_PIN_CLR(pin) do { BRD_CFG_TGT_BASE->PIO_CODR = pin; } while(0)
#define BRD_PIN_SET(pin) do { BRD_CFG_TGT_BASE->PIO_SODR = pin; } while(0)
/* RXD pin methods */
#define BRD_CFG_RXD_ENA() BRD_PIN_ENA(BRD_CFG_PIN_RXD, BRD_CFG_DIR_RXD)
#define BRD_CFG_RXD_DIS() BRD_PIN_DIS(BRD_CFG_PIN_RXD, BRD_CFG_DIR_RXD)
#define BRD_CFG_RXD_CLR() BRD_PIN_CLR(BRD_CFG_PIN_RXD)
#define BRD_CFG_RXD_SET() BRD_PIN_SET(BRD_CFG_PIN_RXD)
#define BRD_CFG_RXD_STA() BRD_PIN_STATE(BRD_CFG_PIN_RXD)
.... И ТАК ДАЛЕЕ ДЛЯ ВСЕХ ЛИНИЙ (SEL, RST, CLK, TXD)
и инициализация
Код
void IO_Init(void)
{
/* Init IO controller */
AT91_PMC_PortEnable(AT91C_ID_PIOA); /* Enable port A */
AT91C_BASE_PIOA->PIO_ODR = MAXUINT32; /* Set all pins as input */
AT91C_BASE_PIOA->PIO_PPUDR = MAXUINT32; /* Disable pull-up's for all pins */
AT91C_BASE_PIOA->PIO_IDR = MAXUINT32; /* Disable interrupt for all pins */
AT91C_BASE_PIOA->PIO_PER = MAXUINT32; /* Enable all pins as IO */
/* Set passive state target port */
BRD_PIN_DIS(BRD_PIN_MASK, BRD_DIR_MASK); /* Disable all lines */
BRD_CFG_TGT_BASE->PIO_OER = BRD_DIR_MASK; /* Enable directions lines to output */
BRD_CFG_TGT_BASE->PIO_PPUER = BRD_DIR_MASK; /* Link pullups to direction lines */
BRD_CFG_TGT_BASE->PIO_PPUER = BRD_PIN_MASK; /* Link pullups to target lines */
}
Где собака зарылась?