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

 
 
 
Reply to this topicStart new topic
> UART0 в LPC2103, нихт корректн арбайтн
toweroff
сообщение May 20 2009, 20:01
Сообщение #1


Гуру
******

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



Инициализация такая:

Код
  PINSEL0 = 0x00000005;               /* Enable RxD0 and TxD0                */
  U0LCR = 0x83;                       /* 8 bits, no Parity, 1 Stop bit       */
  U0DLL = 4;                         /* 115200 Baud Rate @ 12MHz VPB Clock    */
  U0FDR = 0x85;
  U0LCR = 0x03;                       /* DLAB = 0                            */
  U0IER = 0x03;                       /* Enable RDA and THRE interrupts      */


значения взяты из юзер мануала на камень.

В результате в терминале вижу кашу, не соответствующую передаваемым данным.
В то же время симулятор в Keil показывает нормальный бодрейт - 115384, значение соответствует мануальному.

Грешил на MAX3232, но тот в порядке, т.к. пробовал камень программить через этот порт - все ОК.

На какие грабли я мог наткнуться?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 20 2009, 20:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(toweroff @ May 20 2009, 23:01) *
На какие грабли я мог наткнуться?

1. Читаем документацию о том как 16bit делитель в 8bit регистр записываеcя
2. Если хотите, что-бы Ваше творчество читали не пользуйте магические числа, которые мало кто будет расшифровывать.
Код
    // Setup the baud rate -  calculate the divisor value.
    divisor = configCPU_CLOCK_HZ / configBUS_DIVIDER / (baud * WANTED_CLOCK_SCALING);
    // Setup the divisor.
    U0LCR |= LCR_DLAB;
    U0DLL = (uchar)( divisor );
    U0DLM = (uchar)( divisor >> 8 );
    // Turn on the FIFO's and clear the buffers.
    U0FCR = (FCR_FCRE|FCR_CLEAR_FIFO);
    // Setup transmission format.
    U0LCR = (LCR_NO_PARITY|LCR_1STOP_BIT|LCR_8BIT_CHARS);
....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 21 2009, 11:25
Сообщение #3


Гуру
******

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



Цитата(zltigo @ May 21 2009, 00:55) *
1. Читаем документацию о том как 16bit делитель в 8bit регистр записываеcя


В приведенном мною куске кода я пытался записать 16-битное число в 8-битный регистр???

Цитата(zltigo @ May 21 2009, 00:55) *
2. Если хотите, что-бы Ваше творчество читали не пользуйте магические числа, которые мало кто будет расшифровывать.


я указал в каментах что происходит.
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 21 2009, 12:25
Сообщение #4


Гуру
******

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



Проблема решилась. Техник-мандалай впаял кварц на 14.7456, а не на 12.0 МГц... Все сразу и зашевелилось

Тема закрыта
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 05:50
Рейтинг@Mail.ru


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