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

 
 
> Проблема с UART в LPC2103
EXeGLuMATOR
сообщение Aug 22 2006, 23:50
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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МГц. Кейл.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andy Mozzhevilov
сообщение Aug 23 2006, 03:17
Сообщение #2


Знающий
****

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



Цитата(EXeGLuMATOR @ Aug 23 2006, 05:50) *
Имеется команда, например "u08 Play_CMD[]={0xFF,0x55,0x03,0x02,0x00,0x01,0xFA};"

l=3+string[2]; //string[2]-длина команды

При втором способе - 0х00 проходит, но передается на 2 байта меньше,


Если пример приведен полностью верный, то string[2] тут равно 0x03,
соотвественно l = 6, а 'i' будет перебирать индексы от 0 до 5. В вашей же строке 7 символов.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение Aug 23 2006, 15:12
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



[/quote]

Если пример приведен полностью верный, то string[2] тут равно 0x03,
соотвественно l = 6, а 'i' будет перебирать индексы от 0 до 5. В вашей же строке 7 символов.
[/quote]

Это да... просто после экспериментов осталось... реально выглядит так:
l=4+string[2]; (l=7)
цикл: for (i=0;i<=l;i++)

Вот что получается при записи в порт нескольких команд (смотрю в симуляторе):
выполняется пошагово след.код:
puts1(Play_CMD);
puts1(Play_CMD);
puts1(Play_CMD);

После первой команды: FF 55 03 02 00 01
После второй команды: FF 55 03 02 00 01 FA FF FF 55 03 02 00 01
И после третьей: FF 55 03 02 00 01 FA FF FF 55 03 02 00 01 FA FF FF 55 03 02 00 01

исправляем:for (i=0;i<l;i++) - поскольку от 0 до 6 - нужные нам 7 элементов...

получаем:
После первой команды: FF 55 03 02 00
После второй команды: FF 55 03 02 00 01 FA FF 55 03 02 00
И после третьей: FF 55 03 02 00 01 FA FF 55 03 02 00 01 FA FF 55 03 02 00

Где застревают эти байтики? Мож с указателями что-то не так делаю?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EXeGLuMATOR   Проблема с UART в LPC2103   Aug 22 2006, 23:50
|- - 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
- - GetSmart   zltigo, опять издеваетесь над людьми?   Aug 24 2006, 20:30
|- - EXeGLuMATOR   Цитата(GetSmart @ Aug 25 2006, 00:30) zlt...   Aug 24 2006, 20:33
|- - zltigo   Цитата(GetSmart @ Aug 24 2006, 23:30) zlt...   Aug 24 2006, 20:42
|- - EXeGLuMATOR   Добро, зло... Гесер, Завулон... Эх... Вы, господин...   Aug 24 2006, 21:29
|- - zltigo   Цитата(EXeGLuMATOR @ Aug 25 2006, 00:29) ...   Aug 24 2006, 21:49
|- - EXeGLuMATOR   Цитата(zltigo @ Aug 25 2006, 01:49) Цитат...   Aug 25 2006, 17:27
|- - zltigo   Цитата(EXeGLuMATOR @ Aug 25 2006, 20:27) ...   Aug 25 2006, 17:46
|- - serj_obninsk   zltigo, не сочтите за труд разъяснить, чем грозит ...   Sep 4 2006, 12:28
||- - zltigo   Цитата(serj_obninsk @ Sep 4 2006, 15:28) ...   Sep 4 2006, 18:58
|- - EXeGLuMATOR   О! Пошел конструктив! Это радует. Значит т...   Sep 11 2006, 18:19
- - aaarrr   Цитата(GetSmart @ Aug 25 2006, 00:30) zlt...   Aug 24 2006, 20:37
- - EXeGLuMATOR   Кстати, опять аналогичные проблемы - теперь при пр...   Sep 11 2006, 20:23


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:52
Рейтинг@Mail.ru


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