проблему не решил, но обуздал фронт посылки. сначала, посмотрел в сторону регистра 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 );
завтра наверное надо будет добавить таймаутов, а в целом код рабочий, правда по большому счёту не устраивает и надо будет искать другое решение