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

 
 
> LPC2103, UART, 9 бит
toweroff
сообщение Apr 20 2012, 09:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!
Что-то не соображу как сделать. Есть протокол MDB, он использует 9 бит данных. Этот 9й бит не контроль четности, он используется как выбор режима.
В LPC2103 нет как таковых 9 бит в UART,зато есть возможность включения Parity Enable с двумя режимами - Forced "1" stick parity и Forced "0" stick parity.
Я так понимаю, эти 0 или 1 будут всегда в этом режиме вставляться в 9й бит

Хорошо, передавать данные смогу. Но как принимать? Ведь с таким контролем я могу не принять данные...

Или я что-то упустил и долблюсь не в ту дверь?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
toweroff
сообщение Jun 28 2012, 13:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Что-то не пойму, где наступил на граблю

Код
#define PARITY_ENABLE            0x08
#define    ODD_PARITY            (0x00|PARITY_ENABLE)
#define    EVEN_PARITY            (0x10|PARITY_ENABLE)
#define    FORCED_1_PARITY            (0x20|PARITY_ENABLE)
#define    FORCED_0_PARITY            (0x30|PARITY_ENABLE)


Код
//переключение в режим чётности форсированая 1
void UART0_PAR_1(void)
{
  U0LCR = STOP_BITS_1|BITS_8|FORCED_1_PARITY;   /* 8 bits, Parity forced 1, 1 Stop bit */
}

//переключение в режим чётности форсированый 0
void UART0_PAR_0(void)
{
  U0LCR = STOP_BITS_1|BITS_8|FORCED_0_PARITY;   /* 8 bits, Parity forced 0, 1 Stop bit */
}

Код
void putbyte0 (U16 c)
{
    while (!(U0LSR& 0x20));

    //проверка режима
    if(c & MDB_MODE_MSK)
    {
        //передача команды
        UART0_PAR_1();
    }
    else
    {
        //передача данных
        UART0_PAR_0();
    }

    U0THR = c;             /* transmit a character                 */
    
    return;                                
}


и функция, отправляющая пакет:

Код
void send_packet0 (U16 *buf, int length)
{
    while (length--)
    {
        putbyte0(*buf++);
    }
    return;
}


выполняю пошагово - все четко, 9-й бит корректно выставляется. Как только выполнение без отладки - 9й бит никак не хочет выставляться sad.gif
Go to the top of the page
 
+Quote Post



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

 


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


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