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

 
 
> Виснет UDP AT91SAM7S64, При управлении драйвером 74LVC1T45
prottoss
сообщение Sep 5 2010, 16:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Всем привет. Проблема такая.

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

Сейчас в новом варианте заменил два драйвера 74HC244 на 5 штук 74LVC1T45. Сторона А к МК, сторона Б на разъем.
Столкнулся с проблемой, что при непродолжительной работе отваливается UDP. Думаю, что как то не правильно работаю с драйверамиsmile.gif Если убираю код управления(ногомахания) все работает замечательно.

Ниже объявление линий:
Код
/* 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 */
}


Где собака зарылась?


--------------------
Go to the top of the page
 
+Quote Post



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

 


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


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