Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS-485 на AT91SAM7X256
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sailor
Добрый день.
В настоящий момент осваиваю МК AT91SAM7X256, который был выбран в качестве основы для разработки системы управления.
В наличии имеется отладочный комплект AS-SAM7X от Аргуссофта.
Столкнулся с проблемой, что никак не получается "завести" работу по протоколу RS-485. Драйвер 485-го на плате установлен (ADM348). С 485-м интерфейсом успешно работал на других контроллерах. С 232-м интерфейсом (и через USART и через DBGU) проблем не возникло. Да и вообще пока ни с чем проблем не возникало в освоении данного МК. А тут не удается ни принять, ни передать хоть одного байта. К тому же смущает наличие некоего режима AT91C_US_USMODE_RS485. Вот и не могу понять, толи я неправильно что-то делаю, толи это аппаратная проблема конкретного экземпляра платы.
Не поможет ли кто-либо с примером, содержащим однозначно работающий код для AT91? Неважно X это или S. Разберусь.
Мой мыл: sailor{собака}konver.ru
С уважением.
NickB
Работать в режиме 485 интерфейса в эитх контроллерах уч удобно.
Режим AT91C_US_USMODE_RS485 включает аппаратное управление через ногу RTS переключением режима прием/передача. Просто соедените ногу RTS со входами DE-RE ADM348.
И будет Вам счастье
sailor
Цитата(NickB @ Oct 19 2007, 11:31) *
Работать в режиме 485 интерфейса в эитх контроллерах уч удобно.
Режим AT91C_US_USMODE_RS485 включает аппаратное управление через ногу RTS переключением режима прием/передача. Просто соедените ногу RTS со входами DE-RE ADM348.
И будет Вам счастье

Нога сия соединена. Мне нужен пример правильной инициализации и дальнейшей работы по данному протоколу для данного девайса. Или заработает или нет. Я вот тоже подумал, что предусматривается в режиме AT91C_US_USMODE_RS485 аппаратное управление по дефаулту. Но данные не передаются. Возможен аппаратный глюк. У меня всего один девайс и собственаручно написанный код. Так что или железо или моя голова. Но как мне определиться?
NickB
В прикрепленном файле простейшая программа
Один канал -RS232 второй - RS485
Передаются данные из одного канала в другой
И обратно
Работает
sailor
Цитата(NickB @ Oct 19 2007, 13:01) *
В прикрепленном файле простейшая программа
Один канал -RS232 второй - RS485
Передаются данные из одного канала в другой
И обратно
Работает

Огромное спасибо за присланный материал. Я на почту уже написал, что в выложенном файле нет описания инициализации PIO. В остальном принципиальном отличий в коде не обнаружил.
Но проблема решена. Вы будете смеяться, все оказалось в моей голове. Я перепутал нумерацию контактов на разъеме. В документации и на девайсе первая нога обозначена не была. А я с чего-то решил, что нумерация должна быть именно такой-то, и до последнего момента даже не возникало мысли усомниться в этом smile.gif
Сорри всем за беспокойство. *тупо бьется головой об стол, предварительно отодвинув в сторону девайс*
defunct
Код
{
    AT91PS_USART COM0 = AT91C_BASE_US0; // USART0
    
    AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
        ((U32) AT91C_PA0_RXD0 ) |
        ((U32) AT91C_PA1_TXD0 ) |
        ((U32) AT91C_PA3_RTS0 ),  /// < ---- Обязательно (RTS соединить с notRE/DE драйвера 485)
        0);

    // Enable USART clock
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 );
    
    // Usart Configure
    AT91F_US_Configure (COM0, AT91B_MCK, AT91C_US_ASYNC_MODE | AT91C_US_USMODE_RS485, 115200, 0);

    // Enable usart
    COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    COM0->US_TTGR = 0x04; // 4-bits time-guard for rs485
....

Все остальное (в т.ч. обработчик перывания) как у 232-го.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.