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

 
 
> как проверить работоспособность ttyS* на lpc2478 под uClinux
andybeg
сообщение Jun 21 2010, 21:23
Сообщение #1


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

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



залил на сабж стандартный олимексовский vmlinux.bin, так как тот который сам компилил почему то весил 2.5 Гб, в этом ещё не разобрался, так вот, а romfs_5.img беру своего производства + в нём есть моя откомпилированная погама работы с компортом по модбасу с шелезякой(шелезяка исправная, проверялось с ББ), открываю порт стандартно
fd = open("/dev/ttyS2",O_RDWR);
записываю, читаю стандартно
write(fd,query,8);
read(fd,&rxchar,1);
только при счиывании получаю FF во всех байтах sad.gif
как бы проверить порт, на педмет его живости?

Сообщение отредактировал andybeg - Jun 21 2010, 21:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andybeg
сообщение Jun 28 2010, 15:23
Сообщение #2


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

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



виноват, зарапортовался - действительно не 5, а 3, а 2.5 и есть 2.5

пересмотрел сейчас убут и кернел уцлинукса, в убуте вроди бы все порты проинициализированы как надо по ману, а вот с настройками в кернеле непонятно - прерывания установлены по моему не верно (если это имеет значение)
Цитата
#include <asm/hardware.h>

#define BASE_BAUD (LPC22xx_Fpclk / 16)
#define UART0_BASE 0xE000C000
#define UART1_BASE 0xE0010000
#define UART2_BASE 0xE0078000
#define UART3_BASE 0xE007C000
/* Standard COM flags */
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
#define RS_TABLE_SIZE 4
/*
* Rather empty table...
* Hardwired serial ports should be defined here.
* PCMCIA will fill it dynamically.
*/
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */ \
{ 0, BASE_BAUD, UART0_BASE, 6, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART0_BASE, \
.io_type = UPIO_MEM}, \
{ 1, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART1_BASE, \
.io_type = UPIO_MEM},\
{ 2, BASE_BAUD, UART2_BASE, 5, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART2_BASE, \
.io_type = UPIO_MEM}.\
{ 3, BASE_BAUD, UART3_BASE, 5, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART3_BASE, \
.io_type = UPIO_MEM}
из мана пока что не очевидны значения прерываний

Сообщение отредактировал andybeg - Jun 28 2010, 15:30
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 29 2010, 07:33
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Прилагаю инструкцию
и рекомендую зарегистрироваться в конференции
http://tech.groups.yahoo.com/group/lpc2400_uClinux/messages

Прикрепленные файлы
Прикрепленный файл  How_to_configure_new_UARTs_on_uCLinux.pdf ( 88.06 килобайт ) Кол-во скачиваний: 231
 
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jun 29 2010, 08:30
Сообщение #4


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

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



Цитата(etoja @ Jun 29 2010, 11:33) *
Прилагаю инструкцию
и рекомендую зарегистрироваться в конференции
http://tech.groups.yahoo.com/group/lpc2400_uClinux/messages

ага, в одном посте выше делал ссылку на эту инструкцию, вот что у меня сейчас
lowlevel_init.c
Цитата
void

UART0init(void)//uart debug

{
PINSEL0 = 0x00000050;
PINSEL1 = 0x00000000;
U0LCR = 0;
U0IER = 0;
U0LCR = 0x80; /* DLAB=1 */
U0DLL = (Fpclk/16)/CONFIG_BAUDRATE;
U0DLM = 0;
U0LCR = 0x03; /* 8N1, DLAB=0 */
U0FCR = 0x07; /* Enable RX and TX FIFOs */
}

//ARM p0.10 p0.11
void
UART1init(void)
{
PINSEL0 |= 0x00500000;//0x30003fff
PCONP |= (1<<24);
U1LCR = 0;
U1IER = 0;
U1LCR = 0x80;
U1DLL = ((Fpclk/16)/9600) & 0xff;
U1DLM = ((Fpclk/16)/9600) >> 8;
U1LCR = 0x03;
U1FCR = 0x07;
U1THR = '\n';
}
//p0.25 p.026
void
UART2init(void)
{
PINSEL1 |= 0x003C0000;
PCONP |= (1<<25);
U2LCR = 0;
U2IER = 0;
U2LCR = 0x80;
U2DLL = ((Fpclk/16)/9600) & 0xff
U2DLM = ((Fpclk/16)/9600) >> 8;
U2LCR = 0x03;
U2FCR = 0x07;
U2THR = '\n';
}
void//p2.0 p2.1
UART3init(void)
{
PINSEL4 |= 0x0000000A;
PCONP |= (1<<4);
U3LCR = 0;
U3IER = 0;
U3LCR = 0x80;
U3DLL = ((Fpclk/16)/9600) & 0xff;
U3DLM = ((Fpclk/16)/9600) >> 8;
U3LCR = 0x03;
U3FCR = 0x07;
U3THR = '\n';
}


Цитата
lowlevel_init(void)

{
...
UART0init();
UART1init();
UART2init();
UART3init();


uClinux
serial.h
Цитата
#define BASE_BAUD (LPC22xx_Fpclk / 16)
#define UART0_BASE 0xE000C000
#define UART1_BASE 0xE0010000
#define UART2_BASE 0xE0078000
#define UART3_BASE 0xE007C000

/* Standard COM flags */
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)

#define RS_TABLE_SIZE 4
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */ \
{ 0, BASE_BAUD, UART0_BASE, 6, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART0_BASE, \
.io_type = UPIO_MEM}, \
{ 1, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART1_BASE, \
.io_type = UPIO_MEM},\
{ 2, BASE_BAUD, UART2_BASE, 8, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART2_BASE, \
.io_type = UPIO_MEM},\
{ 3, BASE_BAUD, UART3_BASE, 9, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART3_BASE, \
.io_type = UPIO_MEM}

Makefile
Цитата
ttyS0,c,4,64 ttyS1,c,4,65 ttyS2,c,4,66 ttyS3,c,4,67 \

собственная прога

Цитата
int set_port( )

{
ttyfd = open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY);
ioctl(ttyfd,TCGETA,&tsaved);
tnew.c_line = 0;
tnew.c_oflag &=~ OPOST;
tnew.c_lflag &=~ ICANON;
tnew.c_cflag &=~ CBAUD;
tnew.c_cflag |= B9600; /* baud rate 9600 setserial -g -abGv */
tnew.c_cflag &=~ CSIZE;
tnew.c_cflag |= CS8; /* 8 bits RTU */
tnew.c_cflag |= (PARENB | PARODD); /* odd parity */
tnew.c_cflag |= CREAD; /* enable read */
tnew.c_cflag |= CLOCAL; /* ignore modem lines */
tnew.c_cc[VMIN] = 0;
tnew.c_cc[VTIME] = 0;
ioctl(ttyfd,TCSETA,&tnew);
}
......
unsigned char msg[8];
write(ttyfd,msg,8);
......
read(ttyfd,&rxchar,1);

пишу в порт и осцилограф показывает тишину sad.gif, причём после вчерашнего копания на всех портах на выходе стоит 3 вольта

Сообщение отредактировал andybeg - Jun 29 2010, 08:45
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 29 2010, 09:07
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



У вас инициализация уартов неправильная.
Вот работающий код:
// --------------------------------------------------------------------------------
void UART2_Init(long baud)
{
char cuart;
unsigned int divisor = peripheralClockFrequency() / (16 * baud);

#define PCUART2 24
PCONP |= 1<<PCUART2; // включаю питание на UARTe

U2LCR = 0x83; // 8N1, enable Divisor latch bit
U2IER = 0X00; // 0: запретить прерывания
U2DLL = divisor & 0xFF;
U2DLM = (divisor >> 8) & 0xFF;
U2LCR &= ~0x80;

U2FCR = 1; //1: Enable FIFO's
Uart_Init_Delay();
U2FCR = 7; //6: Reset TX and RX FIFO
Uart_Init_Delay();
while(U2LSR & 1) // чистим входное FIFO
cuart = U2RBR;
#ifdef U2RXTXENABLE
// U2IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART2 interrupt */
#else
U2IER = 0X01; // 0: запретить прерывания
#endif
}
// --------------------------------------------------------------------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- andybeg   как проверить работоспособность ttyS* на lpc2478 под uClinux   Jun 21 2010, 21:23
- - Совсем старый Бабай   На педмет его живости? А Rx - Tx между собой замкн...   Jun 22 2010, 02:21
- - PrSt   как уже ранее советовали замкнуть rx+tx это пины 2...   Jun 22 2010, 04:43
- - andybeg   что то мне подскзывает что замыкание организовать ...   Jun 22 2010, 05:18
- - Совсем старый Бабай   А 485 интерфейса далее нет физического разъема? Ко...   Jun 22 2010, 06:56
- - andybeg   после 485 идёт другая железка или конвертер USB на...   Jun 22 2010, 11:06
- - Совсем старый Бабай   А что или кто мешает убрать лишнее железа. На край...   Jun 22 2010, 11:34
- - andybeg   пока что есть надежда на железку с которой будет у...   Jun 22 2010, 11:50
- - andybeg   нашёл небольшой HOW-TOв нём вокончании есть слова ...   Jun 23 2010, 04:19
- - Совсем старый Бабай   Команды вводяться в консоле. Читайте литературу ме...   Jun 23 2010, 05:21
- - andybeg   кидаю посылки на ttyS3, ставлю осцилограф на TXD ...   Jun 28 2010, 11:50
|- - etoja   Цитата(andybeg @ Jun 28 2010, 15:50) кида...   Jun 28 2010, 13:47
- - andybeg   что делает Uart_Init_Delay(); ? в uClinux это буде...   Jun 29 2010, 09:36
|- - etoja   1) // --------------------------------------------...   Jun 29 2010, 12:47
- - andybeg   отыскал ссылко и нога на уарте задёргалась без Uar...   Jun 29 2010, 12:51
- - andybeg   что то совсем запутался, настроил в финале беседы ...   Sep 9 2010, 10:18
- - andybeg   проблемы с ком портом не закончились раньше, когд...   Jan 11 2011, 09:35
- - andybeg   ещё по старту uClinux показываются следующие ошибк...   Jan 11 2011, 12:05
- - andybeg   вобщем с портами разобрался окончательно, основное...   Jan 29 2011, 01:47


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:40
Рейтинг@Mail.ru


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