One question. Despite of TC0 not working does your UART_ISR receives
any byte?
I think that you should write:
if(interruptMask & 0x01)
...
or just omit this check. The check (IIR&0x04)!=0 is enough.
--- In lpc2000@yahoogroups.com, "soren_t_hansen" <soren_t_hansen@y...>
wrote:
>
> Hi there
>
> Im making a system where I'm using all the above mentioned interrupts.
> I have had the TC0, PWM and the ADC running nicely until now, but when
> I add the UART0 the TC0 goes dead (it's running a 1 Khz clock)
>
> I want the UART0 to give me interrupts when it receives a byte and
> only when that occours. When I send data I don't want to receive any
> interrupts (It's a Master/Slave configuration where I send som
> commands and the remote unit answers)
>
> I have configured TC0 at Vic slot 0, the ADC at 1 and now the UART0
at 2.
>
> I've read some posts that could indicate that all those interrupts
> might not work together. On the other hand, it could be my init or ISR
> that is wrong ...
>
> My init and ISR for the UART0 is as follows:
> void UART::init()
> {
> PINSEL0 |= 0x000000005; // Enable RxD0 and TxD0
> U0LCR = 0x03; // 8 bits, no Parity, 1 Stop bit
> U0IER = 0; // Disable UART0 RX
>
> setBaudRate(9600); // 9600 Baud Rate @ 15MHz VPB Clock
>
> VICVectAddr2 = (unsigned long)UART_ISR;
> VICVectCntl2 = 0x20 | 6; /* UART1 Interrupt */
> VICIntEnable = 1 << 6; /* Enable UART1 Interrupt */
>
> U0FCR = 0x07; // Enable FIFOs and reset them
> U0IER = 1; // Enable UART0 RX
> uint32_t dummy = U0IIR; // Read IrqID - Required to Get Interrupts
> Started
> }
>
> void UART::setBaudRate(uint32_t baudRate)
> {
> uint32_t DLreload;
> //Hardcoded to 15 MHz PClk (VPBDIV = 0x0)
> DLreload = static_cast<uint32_t>((15000000u / baudRate) / 16u);
>
> U0LCR |= 0x80; /* Set DLAB */
> U0DLL = DLreload;
> U0DLM = (DLreload >> 8);
> U0LCR &= ~0x80; /* Clear DLAB */
> }
>
> void UART_ISR(void)
> {
>
> uint8_t interruptMask = U0LSR; //Also resets interrupts in LSR
>
> uint8_t IIR = U0IIR;
>
> //Active low
> if((IIR & 0x1) == 0)
> {
> //Data ready in RxBuffer
> if((IIR & 0x04) != 0)
> {
> if(!(interruptMask & 0x01))
> {
> uint8_t byte = U0RBR;
> //Handle byte ......
> }
> }
> }
>
> // Acknowledge interrupt in VIC
> VICVectAddr = 0u;
> }
>Message
Re: UART0, TC0, PWM & ADC at once on LPC2132
2005-11-26 by Zdravko
Attachments
- No local attachments were found for this message.