Hey
Thanks for the hint, but it did'nt work... I still got problems...
Jesper
--- In lpc2000@yahoogroups.com, "javida13" <javida13@y...> wrote:
> You need to encapsulate UODLL and DODLM by setting and clearing the
> DLAB
>
> U0LCR |= 0x80; /* Set DLAB */
> U0DLL = divisor;
> U0DLM = (divisor>>8);
> U0LCR &= ~0x80; /* Clear DLAB */
>
>
> > my PC, the received byte is wrong.
> > This is my test program:
> >
> > void SetUART(int baud){
> > unsigned int divisor = pCF / (16 * baud);
> >
> > PINSEL0 |= 0x00050005; /* Enable UART0 & UART1 */
> >
> > U0IER = 0x00; // disable all interrupts
> > U0IIR; // clear interrupt ID
> > U0RBR; // clear receive register
> > U0LSR; // clear line status
> register
> >
> > U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit, DLAB=1*/
> > U0DLL = divisor;
> > U0DLM = (divisor >> 8);
> > U0LCR = 0x03; /* DLAB = 0 - no access to UART1 Div. */
> > U0IER = 1;
> >
> > U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit,
> DLAB=1*/
> > U1DLL = divisor;
> > U1DLM = (divisor >> 8);
> > U1LCR = 0x03;
> > U1IER = 1;
> >
> > U0FCR = 0x07; //enable the FIFO's
> > U1FCR = 0x07; //enable the FIFO's
> > }
> >
> > void __attribute__ ((interrupt("IRQ"))) tc0(void) {
> > timeval--;
> > T0_IR = 1; // Clear interrupt
> flag
> > VICVectAddr = 0; // Acknowledge
> Interrupt
> > }
> >
> > void __attribute__ ((interrupt("IRQ"))) u0(void) {
> > putcha(U0RBR);
> > U0IIR;
> > VICVectAddr = 0;
> > }
> >
> > void __attribute__ ((interrupt("IRQ"))) u1(void) {
> > status |= (1<<UART_1);
> > dummy = U1RBR;
> > U1IIR;
> > VICVectAddr = 0; // Acknowledge
> Interrupt
> > }
> >
> > void setInterrupt(void)
> > {
> > enableIRQ();
> >
> > VICIntEnClear = ~0x000000d0;
> > VICIntSelect &= ~0x000000d0;
> > VICIntEnable = 0x000000d0;
> > VICVectAddr0 = (unsigned long)tc0;
> > VICVectCntl0 = 0x20 | TIM0;
> > VICVectAddr1 = (unsigned long)u0;
> > VICVectCntl1 = 0x20 | UART_0;
> > VICVectAddr2 = (unsigned long)u1;
> > VICVectCntl2 = 0x20 | UART_1;
> > }
> >
> > void init(void)
> > {
> > systemInit();
> > ledInit();
> > setInterrupt();
> > SetUART(9600);
> > }
> >
> > char putcha(char ch)
> > {
> > while (!(U0LSR & 0x20));
> > return(U0THR=ch);
> > }
> >
> > int main (void) {
> > init();
> > while(1)
> > {
> > if (IOPIN0 & (1<<SWPIN))
> > {}
> > else
> > putcha(0x30);
> > }
> > }
> > When I run this code, I receive 0x63 on my PC?? Any
suggestions ??
> > What am I missing...
> > I've tested the board with the Keil CHARM compiler, with
> succes.....
> > Almost the same code....
> >
> > Regards
> > Jesper Kristensen
> > DenmarkMessage
Re: UART transmit problem with GNU
2005-04-29 by jesperkr123
Attachments
- No local attachments were found for this message.