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

 
 
 
Reply to this topicStart new topic
> uart не передает 0x00, LPC 213x Keil RV
Spb_Alex
сообщение Nov 28 2007, 07:55
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 26-10-07
Пользователь №: 31 745



LPC 213x Keil RV,

проблема, выставил прерывание на UART, пишу по RX, отсылаю по THRE

void Uart0_irq (void) __irq
{

if (!((U0IIR&IIR_THRE)))
{
if (U0LSR & LSR_RX)
{
AMI1.CApuLibAMI::Get2Buf();
}
}
else{
AMI1.Write_from_bufer();
}



VICVectAddr = NULL_REG; //Dummy write to signal end of interrupt


};



пишу в Uart -

U8 CApuLibUART0::putchar(U8 ch) // ïåðåäàòü ñèìâîë â ïåðåäàþùèé áóôåð
{

while (!(U0LSR & LSR_THRE));
return (U0THR = ch);
}


вопрос, почему putchar(0x00) - не работает

putchar(0x01) - работает на ура?

если убрать
else{
AMI1.Write_from_bufer();
}


да,
#define LSR_RX 0x01 // RX
#define LSR_THRE 0x20 // THRE

то 0x00 в порт пишутся, но пререывание - на запись не работает (((
Помогите новичку

Сообщение отредактировал Spb_Alex - Nov 28 2007, 08:29
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 28 2007, 08:08
Сообщение #2


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Spb_Alex @ Nov 28 2007, 10:55) *

Что-то мне подсказывает , что 0x00 у Вас является признаком конца сообщения (строки).
Go to the top of the page
 
+Quote Post
Spb_Alex
сообщение Nov 28 2007, 08:27
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 26-10-07
Пользователь №: 31 745



Цитата(alexander55 @ Nov 28 2007, 11:08) *
Что-то мне подсказывает , что 0x00 у Вас является признаком конца сообщения (строки).


void CApuLibUART0::Write_from_bufer()
{
for (U32 w=0;w<15;w++)
{
if (tx_index_hi != tx_index_low)
{
putchar(tx_bufer[tx_index_low]);
if ((++tx_index_low)==BUF_UART_MAXX)
tx_index_low = BUF_UART_0;

}
else break;
}
};


да нет здесь никаких проверок на окончание строки
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 28 2007, 08:34
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Spb_Alex @ Nov 28 2007, 11:27) *
да нет здесь никаких проверок на окончание строки

А как насчет приема.
Go to the top of the page
 
+Quote Post
Spb_Alex
сообщение Nov 28 2007, 08:38
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 26-10-07
Пользователь №: 31 745



Цитата(alexander55 @ Nov 28 2007, 11:34) *
А как насчет приема.



прием работет на ура,

лажа где-то в функции void Uart0_irq (void) __irq
Go to the top of the page
 
+Quote Post
Spb_Alex
сообщение Nov 28 2007, 09:39
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 26-10-07
Пользователь №: 31 745



void Uart0_irq (void) __irq // ôóíêöèÿ ïðåðûâàíèÿ ïî UART0
{

if (U0LSR & LSR_RX)
{
AMI1.CApuLibAMI::Get2Buf();
}

else{
AMI1.Write_from_bufer();
(U0IIR&IIR_THRE);
}


VICVectAddr = NULL_REG; //Dummy write to signal end of interrupt


};

Переписал так, вроде все заработало, но, как правильно - не знаю.
Go to the top of the page
 
+Quote Post

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

 


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


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