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

 
 
> LPC2148 проблема с UART, LPC2148 проблема с UART
Сергей1
сообщение Feb 9 2008, 11:50
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 9-02-08
Пользователь №: 34 886



Здраствуйте!
Пытаюсь получить с компа строку символов, ничего не получается.

void UART0init(unsigned int baudrate)
{
PINSEL0_bit.P0_0 = 0x01; //линию P0.0 сделать выходом TXD0 UART0
PINSEL0_bit.P0_1 = 0x01; //линию P0.1 сделать входом RXD0 UART0

U0LCR_bit.DLAB = 1; //разрешить запись в настройки делителя UART0
U0DLL = 15000000/(16*baudrate); // задание мл байта скорости обмена
U0DLM = ((15000000/(16*baudrate)) >> 8); // задание ст байта скорости обмена
U0LCR_bit.DLAB = 0; //разрешить обращение к буферам UART0
U0LCR_bit.WLS = 0x03; //длина символа 8 битов
U0LCR_bit.SBS=1; //1 стоповый бит

U0FCR_bit.FCRFE =0;
U0FCR_bit.RFR = 1; //сбросить приемный буфер FIFO
U0FCR_bit.TFR = 1; //сбросить передающий буфер FIFO
U0FCR_bit.RTLS =0;
U0FCR_bit.IIRFE =0;
U0FCR_bit.IP =0;
U0IER_bit.RDAIE = 1; //разрешить прерывание по приему данных в буфер
}

//Функция передачи байта через UART0
void UART0send_byte(unsigned char tx_byte)
{
while(U0LSR_bit.THRE==0);

U0THR = tx_byte; //запись в буфер передачи UART0
}

void INITInterrupt(void)
{
VICProtection=0;
VICIntSelect=0x00000000;

VICVectAddr2=(unsigned int)&Int0;
VICVectAddr1=(unsigned int)&Int2;
VICVectAddr0=(unsigned int)&UART0_tx;

VICVectCntl2=0x0000002E;
VICVectCntl1=0x00000030;
VICVectCntl0=0x00000026;

VICIntEnable=0x00014040;
}

#pragma vector=0x18
__irq __arm void irq_handler(void)
{
void (*interrupt_function)();
unsigned int vector;
vector=VICVectAddr;
interrupt_function=(void(*)())vector;
(*interrupt_function)();
VICVectAddr=0;
}

static void UART0_tx()
{
tx_byt=U0RBR;
while(U0LSR_bit.DR==0);
UART0send_byte(tx_byt);

}
При передаче одного символа все нормально, а если передавать строку все плохо.
Например если передавать 123, то возвращается 3, если 12345- 5, т.е. последний символ.
Подскажите, где может быть проблема.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей1
сообщение Feb 19 2008, 23:24
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 9-02-08
Пользователь №: 34 886



А ошибка то была идиотская!

U0LCR_bit.SBS=0=1; 2 стоп-бита

А на компе терминал настроен на 1.

Вот так!" lol.gif lol.gif lol.gif
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 20 2008, 07:11
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Сергей1 @ Feb 20 2008, 02:24) *
А ошибка то была идиотская!

U0LCR_bit.SBS=0=1; 2 стоп-бита

А на компе терминал настроен на 1.

Вот так!" lol.gif lol.gif lol.gif

И что помогло???
Насколько я помню количество стоп битов влияет только на передатчик, для лучшей синхронизаии если частоты отличаются. А приемнику главное принять 1 стоп бит иначе будет FRAME ERROR
Go to the top of the page
 
+Quote Post
Сергей1
сообщение Feb 20 2008, 19:34
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 9-02-08
Пользователь №: 34 886



Цитата(KRS @ Feb 20 2008, 10:11) *
И что помогло???
Насколько я помню количество стоп битов влияет только на передатчик, для лучшей синхронизаии если частоты отличаются. А приемнику главное принять 1 стоп бит иначе будет FRAME ERROR


В программе я поменял только U0LCR_bit.SBS=1 на U0LCR_bit.SBS=0
И больше ничего.Хотя это на самом деле не должно влиять на приемник!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:39
Рейтинг@Mail.ru


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