Включить (включить) контроллер UART в пользовательском приложении в Linux.Linux

Ответить Пред. темаСлед. тема
Anonymous
 Включить (включить) контроллер UART в пользовательском приложении в Linux.

Сообщение Anonymous »

Я пытался использовать последовательный порт UART в пользовательском приложении на SoC под управлением Linux (LX2160ARDB).
Есть 2 порта UART, использующие оборудование PL011 UART ( UART1, UART2).
После загрузки Linux я могу найти узлы устройств двух портов UART (/dev/ttyAMA0, /dev/ttyAMA1).
Приложение открывает(/dev/ttyAMAX) и записывает() в файл устройства.

Код: Выделить всё

#include 
#include 
#include 
#include 

int main( void )
{
int fd;

int retn;
int buf[10] = "write...\n";

/* Open UART */
fd = open( "/dev/ttyAMA1", O_RDWR );
if( fd < 0 )
{
perror("Open /dev/ttyAMA1 error!");
exit(-1);
}
printf("Opening /dev/ttyAMA1 -> success!\n");

/* Write Operation - Tx start */
int i;
for( i = 0; i < 10; i++ )
{
retn = write( fd, buf, 10 );
if( retn < 0 )
printf("Write() failed... retn=%d\n);
else
printf("Write() succeeded! retn=%d\n");
sleep(1);
}

/* Close UART */
printf("Closing /dev/ttyAMA1\n");
close(fd);

return 0;
}
Я подключил порт UART SoC и свой ноутбук кабелем RS232, запустил приложение и проверил сигнал с помощью эмулятора терминала.
при попытке /dev /ttyAMA0(UART1), я вижу сигнал (строка "write...\n") на эмуляторе терминала, подключенном к порту UART1, но при попытке /dev/ttyAMA1(UART2) я не вижу сигнал(" write...\n" string) на эмуляторе терминала, подключенном к порту UART2, и процесс приложения не завершается.
( В обоих случаях функции open(), write() вернули допустимое значение. )
Я проверил значение Регистр управления каждого UART, обратившись к /dev/mem, и обнаружил, что бит ENABLE UART2 не установлен в 1 в то время как UART1 установлен в 1.
(то же самое касается регистров, связанных с установкой скорости передачи данных и битов данных.)

Код: Выделить всё

...
int main( void )
{
...
fd = open("/dev/mem", O_RDWR | O_SYNC);
...
/* mmap() UART, x can be 1 or 2 */
baseaddr = mmap(0,
UARTx_SIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fd,
UARTx_BASE);
if( baseaddr == NULL )
{
perror("mmap() error");
exit(-1);
}
printf("mmap succeeded!\n");

/* set pointer of UART Control Register */
uartcr = ( uint32_t * )( baseaddr + UARTCR_OFFSET );

/* check value of Control Register */
printf("Current UARTCR value: %#010x\n", *( uartcr ));

...
}

----------
[RESULT]

UART1: Current UARTCR value: 0x00000b01 ( bit[0] is 1 )
UART2: Current UARTCR value: 0x00000300 ( bit[0] is 0 )

UARTCR's bit[0] is UARTEN bit

Для консоли выбран UART1, поэтому кажется, что загрузчик настраивает UART1 и устанавливает бит ENABLE, но не настраивает UART2.
Мой вопрос:< /p>
Как установить бит ENABLE UART2 из пользовательского приложения в Linux?
(точнее, как вызвать инициализацию UART2, не используя / dev/mem)
не можем ли мы установить бит ENABLE контроллера UART в Linux? можно только в загрузчике?
Я искал некоторые коды драйверов (amba-pl011.c и т. д.), но не смог понять уровень для последовательного устройства..

Подробнее здесь: https://stackoverflow.com/questions/786 ... n-on-linux
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Включить (включить) контроллер UART в пользовательском приложении в Linux.
    Anonymous » » в форуме Linux
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Dma неправильно получает данные от uart в Linux
    Anonymous » » в форуме Linux
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • C++ получает байты стандартного ввода Linux и записывает в UART
    Anonymous » » в форуме C++
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • C++ получает байты стандартного ввода Linux и записывает в UART [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Как изменить ядро ​​Linux, чтобы оно дольше ждало UART перед возвратом из read()?
    Anonymous » » в форуме Linux
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»