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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> как проверить работоспособность ttyS* на lpc2478 под uClinux
etoja
сообщение Jun 29 2010, 09:07
Сообщение #16


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

Группа: Свой
Сообщений: 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
сообщение Jun 29 2010, 09:36
Сообщение #17


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

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



что делает Uart_Init_Delay(); ?
в uClinux это будет как понимаю /dev/ttyS2 ?
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 29 2010, 12:47
Сообщение #18


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

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



1)
// --------------------------------------------------------------------------------
void Uart_Init_Delay(void)
{
int i;
for(i=0; i<2500; i++);
}
// --------------------------------------------------------------------------------

2) да
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jun 29 2010, 12:51
Сообщение #19


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

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



отыскал ссылко и нога на уарте задёргалась без Uart_Init_Delay, гранд мерси, должен ...
Go to the top of the page
 
+Quote Post
andybeg
сообщение Sep 9 2010, 10:18
Сообщение #20


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

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



что то совсем запутался, настроил в финале беседы порт ttyS3 , понадобилось подключить ttyS2, сделал всё по аналогии и согласно мануалу постом выше указанному
lowlevel_init.c
Цитата
void UART2init( void )

{
char cuart;
unsigned int divisor = Fpclk / (16 * 9600);
PINSEL0 |= 0x00500000; //configure uart2 on pins P0.10 and P0.11
PCONP |= 1<<24; // включаю питание на 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;
}
void UART3init(void)//p2.0 p2.1
{
char cuart;
unsigned int divisor = Fpclk / (16 * 9600);
PINSEL1 |= 0x003C0000; //configure uart2 on pins P0.25 and P0.26
PCONP |= 1<<25; // включаю питание на UARTe
U3LCR = 0x83; // 8N1, enable Divisor latch bit
U3IER = 0X00; // 0: запретить прерывания
U3DLL = divisor & 0xFF;
U3DLM = (divisor >> 8) & 0xFF;
U3LCR &= ~0x80;
U3FCR = 1; //1: Enable FIFO's
Uart_Init_Delay();
U3FCR = 7; //6: Reset TX and RX FIFO
Uart_Init_Delay();
while(U3LSR & 1) // чистим входное FIFO
cuart = U3RBR;
}

uClinux-dist-\include\asm\arch-lpc22xx\serial.h
Цитата
#define BASE_BAUD (57600000 / 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}, \
{ 0, BASE_BAUD, UART1_BASE, 7, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART1_BASE, \
.io_type = UPIO_MEM},\
{ 0, BASE_BAUD, UART2_BASE, 28, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART2_BASE, \
.io_type = UPIO_MEM},\
{ 0, BASE_BAUD, UART3_BASE, 29, STD_COM_FLAGS, \
.iomem_reg_shift = 2, \
.iomem_base = UART3_BASE, \
.io_type = UPIO_MEM}

\uClinux-dist\include\asm\serial.h
Цитата
#ifndef __ASM_SERIAL_H
#define __ASM_SERIAL_H

//#define BASE_BAUD (1843200 / 16)
#include <asm/arch-lpc22xx/serial.h>

#endif



в коде прогруммы
Цитата
int setupComm( )
{

ttyfd = open("/dev/ttyS3",O_RDWR | O_NOCTTY);// | O_SYNC | O_NDELAY | O_DIRECT

ioctl(ttyfd,TCGETA,&tsaved);
tnew.c_line = 0;
tnew.c_oflag &=~ OPOST;
tnew.c_lflag &= ~(ICANON | ECHO | ISIG);
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 &= ~CSTOPB;
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);

}
в таком виде данные на 3й порт приходят, меняю на /dev/ttyS2 и тишина ... голову уже поломал sad.gif

Сообщение отредактировал andybeg - Sep 9 2010, 10:20
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jan 11 2011, 09:35
Сообщение #21


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

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



проблемы с ком портом не закончились sad.gif раньше, когда работа с компортом наладилась я работал в режиме дебага, тоесть линукс грузился оставляя мне командную строку из которой я вручную запускал свою программу и она работала корректно с ttyS3 ..2 ...
сейчас в uClinux задействовал init и программа стартует автоматически при старте платы, но ... с портов ничего не идёт, код соответствует тому , что выложил в предыдушем сообщени.
ещё по старту заметил ошибки по отработки стартового файла rc
Цитата
#!/bin/sh
hostname MTK
/bin/expand /etc/ramfs.img /dev/ram1
mount -t proc proc /proc
mount -t ext2 /dev/ram1 /var
mkdir /var/tmp
mkdir /var/log
mkdir /var/run
mkdir /var/lock
mkdir /var/empty
/bin/mknod /dev/ttyS0 c 4 64
/bin/mknod /dev/ttyS1 c 4 65
/bin/mknod /dev/ttyS2 c 4 66
/bin/mknod /dev/ttyS3 c 4 67
/bin/mknod /dev/rtc0 c 254 0
ifconfig lo 127.0.0.1
#ifconfig eth0 192.168.0.220 broadcast 192.168.0.255 netmask 255.255.255.0 G2420HDBL
#httpd &
cat /etc/motd
#/bin/fbtest
/bin/uart
# that's it... success
exit 0

а ошибки следующие
Цитата
Command: /bin/mknod /dev/ttyS0 c 4 64
mknod: cannot make device /dev/ttyS0
Command: /bin/mknod /dev/ttyS1 c 4 65
mknod: cannot make device /dev/ttyS1
Command: /bin/mknod /dev/ttyS2 c 4 66
mknod: cannot make device /dev/ttyS2
Command: /bin/mknod /dev/ttyS3 c 4 67
mknod: cannot make device /dev/ttyS3
Command: /bin/mknod /dev/rtc0 c 254 0
mknod: cannot make device /dev/rtc0
где тут собака порылась? sad.gif
причём при открытии портов ошибок не возникает sad.gif

Сообщение отредактировал andybeg - Jan 11 2011, 09:36
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jan 11 2011, 12:05
Сообщение #22


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

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



ещё по старту uClinux показываются следующие ошибки
Цитата
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x0 (irq = 6) is a 16550A
serial8250: ttyS1 at MMIO 0x0 (irq = 7) is a 16550A
serial8250: ttyS2 at MMIO 0x0 (irq = 28) is a 16550A
serial8250: ttyS3 at MMIO 0x0 (irq = 29) is a 16550A
serial8250 serial8250.0: unable to register port at index 0 (IO0 MEMe000c000 IRQ6): -28
serial8250 serial8250.0: unable to register port at index 1 (IO0 MEMe0010000 IRQ7): -28
serial8250 serial8250.0: unable to register port at index 2 (IO0 MEMe0078000 IRQ28): -28
serial8250 serial8250.0: unable to register port at index 3 (IO0 MEMe007c000 IRQ29): -28
Go to the top of the page
 
+Quote Post
andybeg
сообщение Jan 29 2011, 01:47
Сообщение #23


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

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



вобщем с портами разобрался окончательно, основное резюме для себя вижу в том что если занимаешься адаптацией линукса отладочной платы надо быть готовым что где то далеко в дебрях "отладочный" софт вносит свои настройки среды, которые ... есть вероятность и не найти. так и получилось у меня с 1-м портом, изначально он был заведён на ноги 2 го порта которые отвечают за какие то там функции LCD , с горем пополам из убута вычистил их работу, а вот в уклинуксе уже не хватило терпения, в итоге перекинул ноги порта на другие контакты и всё тут же взошло
Go to the top of the page
 
+Quote Post

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

 


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


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