na stronce Keila znalazłem program do obsługi UART-a pracujący na przerwaniach dla lpc2129.
- przerobiłem skrypt, startup.s w linii [251] import swi_handler;
oraz zakomentowałem
; swi_handler B swi_handler.
- program nie odbiera znaków oraz nie nadaje.
- jtag-a na ulink2 nie mam.
- jak robię symulację to program kręci się w module sio.c w linii [219].
- tak jakby nie otrzymywał przerwań, ponieważ bufor odbiornika jest pusty.
- program wchodzi w SWI wychodzi i znowu jest w linii [219].
- poniżej program oraz zrzut z ekranu dla UARTa.
- martwi mnie ten wiersz " Interrupt: none !
- może ktoś ma ten program uruchomiony na lpc2148.
- albo proszę o wskazanie gdzie robię błąd.
P.S.
- program poprawiłem w poniższej części, dalej nie ma wyjscia z obsługi przerwania.
P.S. -- 1
- poprawiłem parametry tramsmisji UARTa wg. poniższej tabeli.
--
--
--
--
- przerobiłem skrypt, startup.s w linii [251] import swi_handler;
oraz zakomentowałem
; swi_handler B swi_handler.
- program nie odbiera znaków oraz nie nadaje.
- jtag-a na ulink2 nie mam.
- jak robię symulację to program kręci się w module sio.c w linii [219].
- tak jakby nie otrzymywał przerwań, ponieważ bufor odbiornika jest pusty.
- program wchodzi w SWI wychodzi i znowu jest w linii [219].
- poniżej program oraz zrzut z ekranu dla UARTa.
- martwi mnie ten wiersz " Interrupt: none !
- może ktoś ma ten program uruchomiony na lpc2148.
- albo proszę o wskazanie gdzie robię błąd.
P.S.
- program poprawiłem w poniższej części, dalej nie ma wyjscia z obsługi przerwania.
P.S. -- 1
- poprawiłem parametry tramsmisji UARTa wg. poniższej tabeli.
--
void com_initialize (void) {
volatile char dummy;
/*------------------------------------------------
Clear com buffer indexes.
------------------------------------------------*/
tbuf.in = 0;
tbuf.out = 0;
tx_restart = 1;
rbuf.in = 0;
rbuf.out = 0;
/*------------------------------------------------
Setup serial port registers.
------------------------------------------------*/
PINSEL0 = UxPINS ; /* Enable RxD and TxD */
UxLCR = 0x03; /* 8 bits, no Parity, 1 Stop bit */
UxIER = 0; /* Disable UARTx Interrupts */
VICIntSelect &= ~0x40; /* UART0 interrupt is assigned to IRQ (not FIQ) */
VICVectAddr6 = (unsigned long)sio_irq;
VICVectCntl6 = 0x20 | 6; /* UART0 Interrupt */
VICIntEnable |= 0x40; /* Enable UART0 Interrupt */
com_baudrate (115200); /* setup for 115200 baud (15MHz) */
/*** Note that with the PLL and VPB setup the pclk is 15MHz. ***/
/*** This does NOT generate nice baudrates!!! ***/
/*** Most connection problems are baudrate mismatches. ***/
/*** Symptoms we've seen include reception on PC but no ***/
/*** reception on the target system. ***/
UxIER = 3; /* Enable UARTx RX and THRE Interrupts */
dummy = UxIIR; /* Read IrqID - Required to Get Interrupts Started */
}
--
![[LPC2148][uVision 3.52b] SIO.c nie działa z UART na IRQ. [LPC2148][uVision 3.52b] SIO.c nie działa z UART na IRQ.](https://img300.imageshack.us/img300/1585/keilswixa6.th.jpg)
--
keil Test 3D SX65 LCD ver.0.D
UART calculation P0.==15.16.17
bps=9600 -- UDLM: 0 UDLL: 71 DIVADDVAL: 3 MULVAL: 8
bps=10400 -- UDLM: 0 UDLL: 52 DIVADDVAL: 11 MULVAL: 15
-
bps=19200 -- UDLM: 0 UDLL: 39 DIVADDVAL: 1 MULVAL: 4
-
bps=38400 -- UDLM: 0 UDLL: 15 DIVADDVAL: 5 MULVAL: 8
bps=115200 -- UDLM: 0 UDLL: 12 DIVADDVAL: 4 MULVAL: 7
-
bps=128000 -- UDLM: 0 UDLL: 15 DIVADDVAL: 0 MULVAL: 2
bps=256000 -- UDLM: 0 UDLL: 14 DIVADDVAL: 1 MULVAL: 8
--