А как насчет примерчика работы с УАРТ вручную? Что-то не клеится.
Вот код функции чтения. Ставим CTS, после чего девай начинает передавать данные моему УАРТу. Я просто анализирую флаг приема.
Вроде бы все элементарно, но нихрена не работает

.
Код
void vnc_rx( alt_vnc* vnc,
char* msg
) {
int tmp2 = 0;
alt_u16 tmp, tmp1;
int timeout = 0;
IOWR(vnc->UART_BASE,2,0);
tmp = IORD(vnc->UART_BASE,2) & 0x00000080;
vnc_rts_on(vnc); //разрешаем устройству передать данные
while(timeout < 350000) { //ждем приема пока таймаут не сработает
tmp = IORD(vnc->UART_BASE,2) & 0x0080; //анализируем флаг приема УАРТ
if(tmp) {
timeout = 0;
tmp1 = IORD(vnc->UART_BASE,0); //читаем принятый байт
*msg = tmp1;
msg++;
tmp2++; //считаем число принятых символов
}
timeout++;
}
vnc_rts_off(vnc);
}
После того как я устанавливаю CTS, девайс сразу выдает мне все данные, что у него накопились. Если я пошагово лезу в эту функцию, то первый байт принимаю (остальные, ясно, теряются).
Но если я выполняю функцию целиком, у меня вообще ничего не принимает, ни одного байта. Ну иногда могу словить часть сообщения.
Может где-то задержка нужна или еще чего?
С сигналами CTS, RTS все в норме, они включаются и выключаются как надо. Отказаться от них не могу изначально, т.к. они для винклума нужны обязательно.
Цитата
В даташите нет примера работы вручную
Быть. torizin-liteha@yandex.ru