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

 
 
> задержка в отправке пакета из буфера uart, lpc2478 & uClinux
andybeg
сообщение Jul 1 2010, 05:11
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954



странная картина наблюдается - из уарта делаем RS485, соответственно при посылке пакета в порт на конвертер 485го на одной ноге выставляю строб начала передачи
Цитата
stat = write( ttyfd, query, length );
setP01(0,24, 1);
delay(20);

но посмотрев по осцилографу вижу что delay отрабатывается ровно, а посылка гуляет на протяжении 200милисекунд от начала строба, но не случайно, а по какой то линейной зависимости. пробовал следить за U3LSR, но толи что не так делал, толи этот регистр тут не помошник

Сообщение отредактировал andybeg - Jul 1 2010, 05:12
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andybeg
сообщение Jul 7 2010, 19:46
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 133
Регистрация: 30-11-06
Пользователь №: 22 954



проблему не решил, но обуздал фронт посылки. сначала, посмотрел в сторону регистра U3LSR в итоге имеем - ставим строб отправки пакета, отправляем пакет данных и ждём пока этот регистр сообщит нам , что данные сначала поступили на отправку, а затем , что они ушли из буфера , затем ставим строб на приём ответа и слушаем ...
Цитата
int write_stat,fd;
unsigned char *U3LSR,data,res;
fd = open("/dev/mem", O_RDWR);
U3LSR = mmap(0, 0x100, PROT_READ, MAP_SHARED, fd, 0xE007C000);
if (U3LSR == MAP_FAILED)
{
printf("Error mmapping the file");
return 0;
}
#ifdef DEBUG
int i;
#endif
modbus_query( query, string_length );
string_length += 2;
#ifdef DEBUG
fprintf( stderr, "\n" );
for( i = 0; i < string_length; i++ )
{
fprintf( stderr, "[%0.2X]", query[ i ] );
} fprintf( stderr, "\n" );
#endif
tcflush( ttyfd, TCIOFLUSH );
setP01(1,13, 1);

write_stat = write( ttyfd, query, string_length );
data = 1; //ждём захода данных в буфер отправки
while(data) { data = *(U3LSR+0x14)&(1<<6); res = *(U3LSR+0x14); printf("\ndata =%x",res); }
printf("\n"); //ждём когда они покинут буфер
while(!data) { data = *(U3LSR+0x14)&(1<<6); res = *(U3LSR+0x14); printf("\nres =%x",res); }
printf("\n");
//delay(220);
setP01(1,13, 0); if (munmap(U3LSR, 0x100) == -1) { perror("Error un-mmapping the file");

} close(fd); return( write_stat );


завтра наверное надо будет добавить таймаутов, а в целом код рабочий, правда по большому счёту не устраивает и надо будет искать другое решение
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- andybeg   задержка в отправке пакета из буфера uart   Jul 1 2010, 05:11
- - etoja   Линукс не является системой реального времени и вы...   Jul 1 2010, 07:35
|- - sasamy   Цитата(etoja @ Jul 1 2010, 11:35) Для син...   Jul 1 2010, 08:25
|- - etoja   согласен   Jul 1 2010, 09:01
- - andybeg   ЦитатаНужно править драйвер uart - после передачи ...   Jul 1 2010, 12:20
|- - etoja   A driver for 8250/16550 compatible serial ports ar...   Jul 1 2010, 14:04
- - andybeg   спасибо, ценный документ   Jul 1 2010, 14:31
- - andybeg   интересно, а флаг O_DIRECT для записи в порт в uCl...   Jul 5 2010, 06:30
|- - etoja   Есть очевидное решение: запретить прерывания и раб...   Jul 8 2010, 07:00
- - andybeg   лучше время будем копать   Jul 8 2010, 09:30
|- - LeshaL   Цитата(andybeg @ Jul 8 2010, 15:30) лучше...   Jul 8 2010, 09:36
- - andybeg   откопаю, ибо деваться некуда, с понедельнка начну   Jul 8 2010, 10:38
- - andybeg   ооооо ееее нииигааа ... нашёл регистр для отправки...   Jul 9 2010, 14:06
- - andybeg   насчёт дочернего устройства я ошибся - оно мою пос...   Jul 9 2010, 17:58
- - andybeg   возвращаясь к вопросу о подчинённом устройстве - м...   Jul 12 2010, 12:40
- - andybeg   товарищ столкнулся с сабжевой проблемой, покопался...   Jul 16 2010, 06:29


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

 


RSS Текстовая версия Сейчас: 6th August 2025 - 00:50
Рейтинг@Mail.ru


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