What a horrible day this has turned out to be.
1) Discovered that for whatever reason my arm processor can’t keep up with the 115200 GPS messages at 5Hz.
2) In debugging the above, I broke of the female micro USB connector on the GPS board. I was using that for configuration. Now I will need to do that via the serial port till I can repair the board. Luckily I did not break any critical pads.
3) Went to place a Digikey order for various parts (including a new micro USB female connector) when I found out my ARM processor header board is obsolete and I can’t get anymore short of an order to Olimex overseas. Need to rethink what processor I am going to use.
Wow that stinks. I am just now catching up reading your blog.
I’ll have to look back and see what ARM you are using. Depending on how many GPS sentences that are enabled, yeah, I suppose a slower end MCU would fall short. I’ve just been pulling a couple sentences and the 96MHz mbed can handle 5hz (I think I have it set to 38,400 however) and lots of other processing. Under the covers I believe the LPC1768 uses a hardware FIFO so I presume that helps quite a bit based on all the discussion on this topic over on the diyrovers Google group.
I am using the AT91SAM7S256 ARM7 core. Its the Olimex header board.
Without the FIFO on the UART, it took a bit of time to figure out the right way to receive data without losing bytes and still minimize latency. At this point I am using the chainable DMA capability of the UART. I set up a transfer for as many bytes as I could possiby expect in a 1/200th of a second (my timer tick is set for 200Hz). In the timer ticks ISR, I pause the DMA, swap buffers, restart the DAM, pull any accumulated data out of the ‘pong’ buffer, push it to a circular buffer. At this point I can keep up with the 5 messages at 5 Hz from the GPS at 115200 baud data. Ran all night without a single lost byte. I have even added writing all the data to an SD card and I still can keep up. I am not doing any navigation calculations yet and I don’t know how much time I am in the idle loop. That will be one of the next tasks.
Love your comments! (So much better than the spam I get!).