Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Виснет UDP AT91SAM7S64
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
prottoss
Всем привет. Проблема такая.

В первом варианте устройства установлено 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 */
}


Где собака зарылась?
prottoss
Локализовал проблему.
Все линии, кроме одной - BRD_CFG_PIN_CLK - меняют состояние программно. BRD_CFG_PIN_CLK подключена к выходу TIOA1 таймера TC1. Он используется для формирования импульса определенной длины. То бишь для изменения частоты порта.
Так вот, я раскомментировал все дефайны для всех линий, кроме этой. Зависоны прекратились.
prottoss
Нашел косяк. Забыл сказатьsmile.gif что к линии BRD_CFG_PIN_CLK поключена еще одна линия контроллера. И, хотя она была сконфигурирована как вход, почему то мешала работе... Сделал все линии, как мультидрайв, глюк исчез...
prottoss
Похоже, в этом топике только мой логsmile.gif Проблема осталась открытой sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.