Spb_Alex
Nov 28 2007, 07:55
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 в порт пишутся, но пререывание - на запись не работает (((
Помогите новичку
alexander55
Nov 28 2007, 08:08
Цитата(Spb_Alex @ Nov 28 2007, 10:55)

Что-то мне подсказывает , что 0x00 у Вас является признаком конца сообщения (строки).
Spb_Alex
Nov 28 2007, 08:27
Цитата(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;
}
};да нет здесь никаких проверок на окончание строки
alexander55
Nov 28 2007, 08:34
Цитата(Spb_Alex @ Nov 28 2007, 11:27)

да нет здесь никаких проверок на окончание строки
А как насчет приема.
Spb_Alex
Nov 28 2007, 08:38
Цитата(alexander55 @ Nov 28 2007, 11:34)

А как насчет приема.
прием работет на ура,
лажа где-то в функции void Uart0_irq (void) __irq
Spb_Alex
Nov 28 2007, 09:39
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
};
Переписал так, вроде все заработало, но, как правильно - не знаю.