|
Проблема с UART в LPC2103 |
|
|
|
Aug 22 2006, 23:50
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Имеется команда, например "u08 Play_CMD[]={0xFF,0x55,0x03,0x02,0x00,0x01,0xFA};" которую надо отправить через UART1 на МП3-плеер. Пытаюсь это сделать несколькими способами: 1. const char *puts(const char *string) { unsigned char ch; while ((ch = *string)) { putchar(ch); string++; } return string; }
int putchar(int ch) /* Write character to Serial Port */ { while (!(U1LSR & ULSR_THRE)) ; // wait for TX buffer to empty U1THR = ch; // put char to Transmit Holding Register return ch; }
2. const char *puts1(const char *string) { u08 i,l; l=3+string[2]; //string[2]-длина команды for (i=0;i<l;i++) { putchar(string[i]); }; return string; }
но происходит следующее - по первому способу - останавливается передача на 0х00, причем при отправке следующей команды, застрявшие байтики не пропихиваются на выход (ну оно и понятно - 0х00 - вроде как завершение строки). При втором способе - 0х00 проходит, но передается на 2 байта меньше, причем при последующей команде они пропихиваются., но застревают байтики от следующей команды... Причем пропихиваться может и при записи чего-либо в другой сериальный порт...
В чем могут быть грабли? с 0-вым юартом - также.
инится ЮАРТ:
void uart1Init(unsigned int baud) {
// setup Pin Function Select Register (Pin Connect Block) // make sure old values of Bits 0-4 are masked out and // set them according to UART0-Pin-Selection PINSEL0 |= 0x00050000; U1IER = 0x00; // disable all interrupts U1IIR = 0x00; // clear interrupt ID register U1LSR = 0x00; // clear line status register // set the baudrate - DLAB must be set to access DLL/DLM U1LCR = ULCR_DLAB_ENABLE; // set divisor latches (DLAB) U1DLL = (unsigned char)baud; // set for baud low byte U1DLM = (unsigned char)(baud >> 8); // set for baud high byte // set the number of characters and other // user specified operating parameters // Databits, Parity, Stopbits - Settings in Line Control Register U1LCR = (UART_8N1);// | ULCR_DLAB_ENABLE); // clear DLAB "on-the-fly" // setup FIFO Control Register (fifo-enabled + xx trig) U1FCR = UFCR_FIFO_ENABLE | UFCR_TX_FIFO_RESET | UFCR_FIFO_TRIG8; }
частота работы ядра - 60МГц. Кейл.
|
|
|
|
|
 |
Ответов
|
Aug 24 2006, 20:42
|

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

|
Цитата(GetSmart @ Aug 24 2006, 23:30)  zltigo, опять издеваетесь над людьми?  А читать написанное Автором с претензией на "сокровенные знания" не пробовали :-). Попробуйте прочитать! - хотелось-бы получить урок "мягкоти" и "доброты" в оценке таких творений: Код const char *puts1(const char *string) {
unsigned char ch; u08 i,l,c; c=string[2]; l=4+c; for (i=0;i<l;i++) { ch = *string; while (!(U1LSR & ULSR_THRE)); U1THR = ch; while (!uart1TxEmpty()) while (!(U1LSR & ULSR_THRE)); string++; }; return string; }
int uart1TxEmpty(void) { return (U1LSR & (ULSR_THRE | ULSR_TEMT)) == (ULSR_THRE | ULSR_TEMT); } Знаю, что грешен :-(, но пройти мимо такого не смог :-(
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 24 2006, 21:29
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Добро, зло... Гесер, Завулон... Эх... Вы, господин так ничего и не поняли... Специально потратил время на попробовать... код void puts11(const char *Mes, int Len) { int i; for(i=0; i<Len; i++, Mes++) { while (!(U1LSR & ULSR_THRE)); U1THR = *Mes; while (!uart1TxEmpty()) while (!(U1LSR & ULSR_THRE)); }; } работает корректно. Полностью корректно. код void puts11(const char *Mes, int Len) { int i; for(i=0; i<Len; i++, Mes++) { while (!(U1LSR & ULSR_THRE)); U1THR = *Mes; }; } Который собсно и есть то, что Вы предложили - работает некорректно, поскольку не отслеживает правильно опустошение буфера передачи, почему - отдельная тема, но так есть. Проверь то, что Вы написал  в работе, хотя-бы на симуляторе, убедишься. Застревает последний байт сообщения. Понимаю конечно, что ваш вариант передачи полностью передран из примеров и верен по определению, но надо иметь и воображение. Добро... Зло... Хвост!!!
|
|
|
|
|
Aug 24 2006, 21:49
|

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

|
Цитата(EXeGLuMATOR @ Aug 25 2006, 00:29)  Специально потратил время на попробовать... Рекомендую еще потратить время на разборки с тем где в "попробовать" ошибка вышла. Одно радует, что исходный код уже причесали :-). Осталось муть голубую выкинуть: Цитата while (!uart1TxEmpty()) while (!(U1LSR & ULSR_THRE)); Если вдруг "проблемы" - то не сочите за труд осмотреть сгенеренный код, посмотреть на Ваше определение U1LSR и прочитать про "volatile".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 25 2006, 17:27
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(zltigo @ Aug 25 2006, 01:49)  Цитата(EXeGLuMATOR @ Aug 25 2006, 00:29)  Специально потратил время на попробовать...
Рекомендую еще потратить время на разборки с тем где в "попробовать" ошибка вышла. Одно радует, что исходный код уже причесали :-). Осталось муть голубую выкинуть: Цитата while (!uart1TxEmpty()) while (!(U1LSR & ULSR_THRE)); Если вдруг "проблемы" - то не сочите за труд осмотреть сгенеренный код, посмотреть на Ваше определение U1LSR и прочитать про "volatile". Мда.. бывают же люди... Понты, понты... И круче только яйца... А из аргументов - "такого не может быть, потому что не может быть никогда!". Неконструктивно. Считаете что так неправильно - ну так объясните убогим и тупым в чем проблема! Спуститесь с небес на нашу грешную! Где конструктивная критика? Конструктивные замечания? А так - ну считайте... флаг, барабан, все аксессуары. Одна вода и абстракция...  А код причесывать - это после того как он заработает. Код на этапе разработки и релиз - две большие разницы. Думаю в данной теме все всё для себя выяснили. Хватит Вам уже за строгого клоуна работать - народ развлекать.
Сообщение отредактировал EXeGLuMATOR - Aug 25 2006, 17:29
|
|
|
|
|
Aug 25 2006, 17:46
|

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

|
Цитата(EXeGLuMATOR @ Aug 25 2006, 20:27)  - ну так объясните убогим и тупым в чем проблема! Уже отвечал. Повторяю для "особо".... Это главная "проблема": Цитата что написали Вы одно, думаете, что написали другое, а сюда постите третье :-( Это что делать: Цитата то не сочите за труд осмотреть сгенеренный код, посмотреть на Ваше определение U1LSR и прочитать про "volatile" Если для Вас это пустой звук - продалжайте стучать в бубен, только не надо своими "открытиями" сделанными в "результате" "делится".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 11 2006, 18:19
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
О! Пошел конструктив! Это радует. Значит таки можно с Вами общаться. Цитата то не сочите за труд осмотреть сгенеренный код, посмотреть на Ваше определение U1LSR и прочитать про "volatile" Наше определение - это то что в LPC2103.h Все там определено. Компилер - Кейл. CARM. Соотв все из его поставки. #define U1LSR (*((volatile unsigned char *) 0xE0010014)) Что не так?
|
|
|
|
Сообщений в этой теме
EXeGLuMATOR Проблема с UART в LPC2103 Aug 22 2006, 23:50 Andy Mozzhevilov Цитата(EXeGLuMATOR @ Aug 23 2006, 05:50) ... Aug 23 2006, 03:17 EXeGLuMATOR [/quote]
Если пример приведен полностью верный, т... Aug 23 2006, 15:12  zltigo Цитата(EXeGLuMATOR @ Aug 23 2006, 18:12) ... Aug 23 2006, 16:01   EXeGLuMATOR Цитата(zltigo @ Aug 23 2006, 20:01) Цитат... Aug 23 2006, 17:08    zltigo Цитата(EXeGLuMATOR @ Aug 23 2006, 20:08) ... Aug 23 2006, 17:53     EXeGLuMATOR [/quote]
Долго методом тыка чего-то писалось :-(
В... Aug 24 2006, 18:32      zltigo Цитата(EXeGLuMATOR @ Aug 24 2006, 21:32) ... Aug 24 2006, 19:11       EXeGLuMATOR [quote name='zltigo' date='Aug 24 2006... Aug 24 2006, 19:46        zltigo Цитата(EXeGLuMATOR @ Aug 24 2006, 22:46) ... Aug 24 2006, 19:50         EXeGLuMATOR Цитата(zltigo @ Aug 24 2006, 23:50) Цитат... Aug 24 2006, 19:58 EXeGLuMATOR Цитата(GetSmart @ Aug 25 2006, 00:30) zlt... Aug 24 2006, 20:33      serj_obninsk zltigo, не сочтите за труд разъяснить, чем грозит ... Sep 4 2006, 12:28       zltigo Цитата(serj_obninsk @ Sep 4 2006, 15:28) ... Sep 4 2006, 18:58 aaarrr Цитата(GetSmart @ Aug 25 2006, 00:30) zlt... Aug 24 2006, 20:37 EXeGLuMATOR Кстати, опять аналогичные проблемы - теперь при пр... Sep 11 2006, 20:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|