[ECOS] AT91 USART usage question

harri.siirtola@vtt.fi harri.siirtola@vtt.fi
Wed Jan 9 00:48:00 GMT 2002

At 15:12 8.1.2002 +0100, Frank Rolsted Jensen (FRJ) wrote:
>eCos does not disable the USART (I guess you do not have hw/sw flowcontrol

I haven't.

>Even though you are using PDC the delay between ISR and DSR is still a
>problem  as you have to reload the PDC counter and pointer before a new
>character is received. Isn't is so that you are missing characters each time
>you are reloading the PDC regs ?
>One solution is to load the PDC pointer/counter in ISR.

This doesn't apply if I write the size of my rx buffer to RCR. After that, 
the PDC transfers received chars up to this count before it requires 
reloading. I've checked the buffer after transferring a file and the PDC 
never seems to get further than, say, 10 bytes before my DSR collects the 
data and restores the RCR and RPR. I've suspected the RCR/RPR reload 
causing the data loss in another way: if chars arrive during the DSR data 
collect (looping as many times as RCR indicates when entering the DSR, RPR 
is the tail pointer at this point), these bytes could be missed as the PDC 
transfers them after this tail pointer. However, I've put a RCR re-read 
just after my DSR collect loop to catch this situation, to no avail.

>Do you use the block transfer functions in the serial driver when storing
>data from the USART ? I'm made an AT91 USART driver using the PDC and the
>block transfer functions. It load data directly from the USART into the ring
>buffer controlled by the serial driver. When transmitting it also loads data
>directly from the ring buffer into the USART using the PDC.

Just what I'm trying to do (see above...) The point is, my rx works fine if 
I just collect the data and count the bytes. No loss of data unless I 
enable further processing functions.


Thanks Frank, still more hair to tear off ;)

More information about the Ecos-discuss mailing list