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

 
 
> задержка в отправке пакета из буфера 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 9 2010, 14:06
Сообщение #2


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

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



ооооо ееее нииигааа ... нашёл регистр для отправки посылки путём прямого доступа в память
Цитата
4.2 UARTn Transmit Holding Register (U0THR - 0xE000 C000, U2THR -
0xE007 8000, U3THR - 0xE007 C000 when DLAB = 0, Write Only)
The UnTHR is the top byte of the UARTn TX FIFO. The top byte is the newest character in
the TX FIFO and can be written via the bus interface. The LSB represents the first bit to
transmit.
The Divisor Latch Access Bit (DLAB) in UnLCR must be zero in order to access the
UnTHR. The UnTHR is always Write Only.
Table 379. UART0 Transmit Holding Register (U0THR - address 0xE000 C000,
U2THR - 0xE007 8000, U3THR - 0xE007 C000 when DLAB = 0, Write Only) bit
description
Bit Symbol Description Reset Value
7:0 THR Writing to the UARTn Transmit Holding Register causes the data NA
to be stored in the UARTn transmit FIFO. The byte will be sent
when it reaches the bottom of the FIFO and the transmitter is
available.


пишем функцию отсылки чара

Цитата
int putC(unsigned char ch)
{
int write_stat,fd;
unsigned char *map,data,res;

fd = open("/dev/mem", O_RDWR);
map = mmap(0, 0x100, PROT_READ, MAP_SHARED, fd, UnLCR_BASE_ADDR);
if (map == MAP_FAILED)
{
printf("Error mmapping the file");
return 0;
}

while(!(U0LCR && 0x20));

if (munmap(map, 0x100) == -1)
{
perror("Error un-mmapping the file");
}
close(fd);

fd = open("/dev/mem", O_RDWR);
map = mmap(0, 0x100, PROT_READ, MAP_SHARED, fd, UnTHR_BASE_ADDR);
if (map == MAP_FAILED)
{
printf("Error mmapping the file");
return 0;
}
U3THR = ch;
if (munmap(map, 0x100) == -1)
{
perror("Error un-mmapping the file");
}
close(fd);
return 0;
}


модернизируем отправку
Цитата
tcflush( ttyfd, TCIOFLUSH ); /* flush the input & output streams */
setP01(1,13, 1);

//write_stat = write( ttyfd, query, string_length );
for( i = 0; i < string_length; i++ )
putC(query[i]);

fd = open("/dev/mem", O_RDWR);
map = mmap(0, 0x100, PROT_READ, MAP_SHARED, fd, UnLCR_BASE_ADDR);
if (map == MAP_FAILED)
{
printf("Error mmapping the file");
return 0;
}

while(!(U0LCR && 0x20));

if (munmap(map, 0x100) == -1)
{
perror("Error un-mmapping the file");
}
close(fd);

printf("\n");


setP01(1,13, 0);

и получаем посылку почти чётко вписанную в строб, за качество кода прошу не ругать, ибо делал енто на коленях, по наитию и не успел ещё отредактировать, опять же почему то не получаю ответа от дочернего устройства где то есть косяк, вобщем объективная критика принимается
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
- - andybeg   проблему не решил, но обуздал фронт посылки. снача...   Jul 7 2010, 19:46
|- - 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, 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 Текстовая версия Сейчас: 8th August 2025 - 02:26
Рейтинг@Mail.ru


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