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

 
 
 
Reply to this topicStart new topic
> Одновременная работа нескольких UART в LPC2368, не могу настроить сабж...
Алекс1981
сообщение Jun 22 2010, 08:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 16-03-09
Из: Волгоградская обл
Пользователь №: 46 144



В общем никак не получается настроить несколько Уартов в МК LPC2368. Работает только UART0. Код привожу ниже. (прерывания по приему символа не испольую так как данные по уарту только отправляю)
Код
#include "LPC23xx.h"                     /* LPC23xx definitions               */
#include "target.h"

#include <string.h>
#include "comm.h"

//#define UART0
#define BPS         115200

// KEIL MCP2300
// UART0 TX P0.2 RX P0.3 MAIN diagnostic
#define U0_TX_PINSEL_REG  PINSEL0
#define U0_TX_PINSEL     (1UL<<4)  /* PINSEL0 Value for UART0 TX */
#define U0_TX_PINMASK    (3UL<<4)  /* PINSEL0 Mask  for UART0 RX */
#define U0_RX_PINSEL_REG  PINSEL0
#define U0_RX_PINSEL     (1UL<<6)  /* PINSEL0 Value for UART0 TX */
#define U0_RX_PINMASK    (3UL<<6)  /* PINSEL0 Mask  for UART0 RX */
// UART1 TX P0.15 RX P0.16 1)RS485
#define U1_TX_PINSEL_REG  PINSEL0
#define U1_TX_PINSEL     (1UL<<30)  /* PINSEL0 Value for UART1 TX */
#define U1_TX_PINMASK    (3UL<<30)  /* PINSEL0 Mask  for UART1 RX */
#define U1_RX_PINSEL_REG  PINSEL1
#define U1_RX_PINSEL     (1UL<<0)  /* PINSEL0 Value for UART1 TX */
#define U1_RX_PINMASK    (3UL<<0)  /* PINSEL0 Mask  for UART1 RX */
// UART2 TX P0.10 RX P0.11 2)RS485
#define U2_TX_PINSEL_REG  PINSEL0
#define U2_TX_PINSEL     (1UL<<20)  /* PINSEL0 Value for UART2 TX */
#define U2_TX_PINMASK    (3UL<<20)  /* PINSEL0 Mask  for UART2 RX */
#define U2_RX_PINSEL_REG  PINSEL0
#define U2_RX_PINSEL     (1UL<<22)  /* PINSEL0 Value for UART2 TX */
#define U2_RX_PINMASK    (3UL<<22)  /* PINSEL0 Mask  for UART2 RX */

BYTE uart_get(void)
{
    while ( !uart_test() ) {; }
    
    return U0RBR;
}

BYTE uart_get_ex(BYTE nUart)
{
    while ( !uart_test_ex(nUart) ) {; }

    if(nUart==1)
        return U1RBR;
    if(nUart==2)
        return U2RBR;
}

static void uart_xmit( BYTE d )
{
    while ( !( U0LSR & 0x20 ) ) {
        // wait for send possible
    ;
    }
    U0THR = d;
}

static void uart_xmit_ex( BYTE d, BYTE nUart )
{
    if(nUart==1)
    {
        while ( !( U1LSR & 0x20 ) ) {
            // wait for send possible
        ;
        }
    U1THR = d;
    }
    if(nUart==2)
    {
        while ( !( U2LSR & 0x20 ) ) {
            // wait for send possible
        ;
        }
    U2THR = d;
    }
}
void uart_init (void)
{
    U0_TX_PINSEL_REG = ( U0_TX_PINSEL_REG & ~U0_TX_PINMASK ) | U0_TX_PINSEL;
    U0_RX_PINSEL_REG = ( U0_RX_PINSEL_REG & ~U0_RX_PINMASK ) | U0_RX_PINSEL;
    //
    U1_TX_PINSEL_REG = ( U1_TX_PINSEL_REG & ~U1_TX_PINMASK ) | U1_TX_PINSEL;
    U1_RX_PINSEL_REG = ( U1_RX_PINSEL_REG & ~U1_RX_PINMASK ) | U1_RX_PINSEL;
    //
    U2_TX_PINSEL_REG = ( U2_TX_PINSEL_REG & ~U2_TX_PINMASK ) | U2_TX_PINSEL;
    U2_RX_PINSEL_REG = ( U2_RX_PINSEL_REG & ~U2_RX_PINMASK ) | U2_RX_PINSEL;
    //
    U0FDR = 0;
    U0LCR = 0x83; // 8,n,1
    U0DLL = ( Fpclk / 16 ) / BPS; // divider
    U0DLM = 0;
    U0LCR = 0x03;
    //
    U1FDR = 0;
    U1LCR = 0x03; // 8,n,1
    U1DLL = ( Fpclk / 16 ) / BPS; // divider
    U1LCR = 0;
    U1IER = 0x03;
    //
    U2FDR = 0;    
    U2LCR = 0x83; // 8,n,1
    U2DLL = ( Fpclk / 16 ) / BPS; // divider
    U2DLM = 0;
    U2LCR = 0x03;
}
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jun 22 2010, 08:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Телепатирую:
U1LCR = 0x03; // 8,n,1
должно быть
U1LCR = 0x83; // 8,n,1

U1LCR = 0;
должно быть
U1LCR = 0x03;

и далее по тексту.

Для UART2 смотритe PCONP


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Алекс1981
сообщение Jun 22 2010, 10:18
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 16-03-09
Из: Волгоградская обл
Пользователь №: 46 144



Сделал как по user manual по МК, но ничего не изменилось, как UART1 и UART2 не работал, так и не работает
Код
void uart_init (void)
{
    PCONP |=(1<<3);
    PCONP |=(1<<24);
    PCONP |=(1<<25);
    U0FDR = 0;    // no extended uart
    U0LCR = 0x83; // 8,n,1
    U0DLL = ( Fpclk / 16 ) / BPS; // divider
    U0DLM = 0;
    //
    U0_TX_PINSEL_REG = ( U0_TX_PINSEL_REG & ~U0_TX_PINMASK ) | U0_TX_PINSEL;
    U0_RX_PINSEL_REG = ( U0_RX_PINSEL_REG & ~U0_RX_PINMASK ) | U0_RX_PINSEL;
    //
    U0LCR = 0x03;
    //
    //
    PCONP |=(1<<4);
    PCLKSEL0 |=(1<<8);
    PCLKSEL0 |=(1<<9);
    U1FDR = 0;    // no extended uart
    U1LCR = 0x83; // 8,n,1
    U1DLL = ( Fpclk / 16 ) / BPS; // divider
    U1DLM = 0;
    //
    U1_TX_PINSEL_REG = ( U1_TX_PINSEL_REG & ~U1_TX_PINMASK ) | U1_TX_PINSEL;
    U1_RX_PINSEL_REG = ( U1_RX_PINSEL_REG & ~U1_RX_PINMASK ) | U1_RX_PINSEL;
    //
    U1LCR = 0x03;
    //
    PCLKSEL1 |=(1<<17);
    PCLKSEL1 |=(1<<16);
    U2FDR = 0;    // no extended uart
    U2LCR = 0x83; // 8,n,1
    U2DLL = ( Fpclk / 16 ) / BPS; // divider
    U2DLM = 0;
    //
    U2_TX_PINSEL_REG = ( U2_TX_PINSEL_REG & ~U2_TX_PINMASK ) | U2_TX_PINSEL;
    U2_RX_PINSEL_REG = ( U2_RX_PINSEL_REG & ~U2_RX_PINMASK ) | U2_RX_PINSEL;
    //

    U2LCR = 0x03;
}
Go to the top of the page
 
+Quote Post
Алекс1981
сообщение Jun 22 2010, 19:59
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 16-03-09
Из: Волгоградская обл
Пользователь №: 46 144



Кстати, немного неверно протестировал железо я. С тем кодом что привел выше заработал UART2 на скорость 56200 бод, но UART1 не заработал ни на какой скорости. Насколько я понимаю UART1 совмещает в себе функции модема, может их надо как то отключить?
Go to the top of the page
 
+Quote Post
uriy
сообщение Jun 23 2010, 05:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Проблема то у вас в чем. Вы хоть осцилом тыкались? Скорости получаются не те или данные вовсе не выходят с порта?
Go to the top of the page
 
+Quote Post
Алекс1981
сообщение Jun 23 2010, 05:55
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 16-03-09
Из: Волгоградская обл
Пользователь №: 46 144



Осциллографом проверял. На UART1 вообще данные не выходят ни на какой скорости
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jun 29 2010, 15:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



В прикркплении работающий код.
Обратите внимание на BOOL UART_open(...)
Прикрепленные файлы
Прикрепленный файл  UART.c.zip ( 3 килобайт ) Кол-во скачиваний: 65
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:01
Рейтинг@Mail.ru


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