MODSERIAL with support for more devices. Added support for LPC4330

Dependents:   HC05_AT_mode GPS_U-blox_NEO-6M_Test_Code GPS_U-blox_NEO-6M_Code UbloxGPSWithThread ... more

Fork of MODSERIAL by Erik -

Committer:
edodm85
Date:
Tue Aug 12 16:05:10 2014 +0000
Revision:
36:4213f9a7c3ad
Parent:
32:f42def64c4ee
Added support for LPC4330

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 1:b7e435fbfe8e 1 /* $Id:$
Sissors 32:f42def64c4ee 2 1.32 12th October 2013
Sissors 32:f42def64c4ee 3 * Improved claim documentation: http://mbed.org/questions/1817/Redirect-stdout-via-MODSERIAL-is-this-po/ by http://mbed.org/users/WiredHome/
Sissors 32:f42def64c4ee 4
Sissors 31:b90b20f78f04 5 1.31 11th October 2013
Sissors 31:b90b20f78f04 6 * Added claim function to redirect for example stdout
Sissors 31:b90b20f78f04 7
Sissors 30:b04ce87dc424 8 1.30 1st September 2013
Sissors 30:b04ce87dc424 9 * Removed all DMA related code (not supported in this version currently)
Sissors 30:b04ce87dc424 10 * Minor bug fix
Sissors 30:b04ce87dc424 11
Sissors 29:9a41078f0488 12 1.29 12th July 2013
Sissors 29:9a41078f0488 13 * Added KL25Z support + split code in device dependent and independent part
Sissors 29:9a41078f0488 14
Sissors 26:91e4dba7ebe2 15 1.26 10th June 2013
Sissors 26:91e4dba7ebe2 16 * _uidx reference in DMA code replaced by _serial.index
AjK 2:b936b4acbd92 17
AjK 25:ae0408ebdd68 18 1.25 8th January 2013
AjK 25:ae0408ebdd68 19
AjK 25:ae0408ebdd68 20 * Bring back into line with MBed libraries.
AjK 25:ae0408ebdd68 21 * Credits:
AjK 25:ae0408ebdd68 22 Erik Olieman : http://mbed.org/users/Sissors/code/MODSERIAL/rev/3ba4341d74d6
AjK 25:ae0408ebdd68 23 Erik Olieman : http://mbed.org/users/Sissors/code/MODSERIAL/rev/a469aa702bab
AjK 25:ae0408ebdd68 24
AjK 25:ae0408ebdd68 25
AjK 24:9c456e647a8f 26 1.24 6th Dec 2012
AjK 25:ae0408ebdd68 27
AjK 25:ae0408ebdd68 28 * Beta release for new Mbed library.
AjK 24:9c456e647a8f 29
AjK 23:5c45c21f36b7 30 1.23 25th July 2012
AjK 23:5c45c21f36b7 31
AjK 23:5c45c21f36b7 32 * LPC1768 code as was. This release includes "alpha" support for the LPC11U24
AjK 23:5c45c21f36b7 33
AjK 22:c11ea36f17f9 34 1.22 19th April 2012
AjK 22:c11ea36f17f9 35
AjK 22:c11ea36f17f9 36 * http://mbed.org/forum/bugs-suggestions/topic/2936/
AjK 22:c11ea36f17f9 37 * Bug fix, protect important buffer pointers from IRQ corruption.
AjK 25:ae0408ebdd68 38 * Credits:
AjK 22:c11ea36f17f9 39 Anthony Wieser http://mbed.org/users/WieserSoftwareLtd/ for the fix.
AjK 22:c11ea36f17f9 40 BlazeX http://mbed.org/users/BlazeX/ for the alert that a fix was needed!
AjK 22:c11ea36f17f9 41
AjK 21:af2af4c61c2f 42 1.21 10 May 2011
AjK 21:af2af4c61c2f 43
AjK 21:af2af4c61c2f 44 * http://mbed.org/forum/mbed/topic/2264
AjK 21:af2af4c61c2f 45
AjK 20:59c74aaedda2 46 1.20 26 April 2011
AjK 20:59c74aaedda2 47
AjK 20:59c74aaedda2 48 * Bug fix, not blocking on transmit
AjK 20:59c74aaedda2 49 by Erik Petrich, http://mbed.org/forum/bugs-suggestions/topic/2200
AjK 20:59c74aaedda2 50
AjK 20:59c74aaedda2 51 1.19 20 April 2011
AjK 20:59c74aaedda2 52
AjK 20:59c74aaedda2 53 * Fixed some doxygen comment bugs.
AjK 20:59c74aaedda2 54
AjK 18:21ef26402365 55 1.18 20 April 2011
AjK 18:21ef26402365 56
AjK 18:21ef26402365 57 * All callbacks now use MODSERIAL_callback (rather than Mbed's FunctionPointer[1] type)
AjK 18:21ef26402365 58 to store and invoke it's callbacks. This allows MODSERIAL to pass a parameter
AjK 18:21ef26402365 59 to callbacks. The function prototype is now void func(MODSERIAL_IRQ_INFO *q).
AjK 18:21ef26402365 60 * Callbacks now pass a pointer to a MODSERIAL_IRQ_INFO class type.
AjK 18:21ef26402365 61 This class holds a pointer to the MODSERIAL object that invoked the callback
AjK 18:21ef26402365 62 thus freeing callbacks need to use the global variable of the original
AjK 18:21ef26402365 63 MODSERIAL instance.
AjK 18:21ef26402365 64 * MODSERIAL_IRQ_INFO also declares public functions that are protected within MODSERIAL
AjK 18:21ef26402365 65 thus allowing certain functions to be restricted to callback context only.
AjK 18:21ef26402365 66 * New function MODSERIAL_IRQ_INFO::rxDiscardLastChar() allows an rxCallback function
AjK 18:21ef26402365 67 to remove the character that was just placed into the RX buffer.
AjK 18:21ef26402365 68
AjK 18:21ef26402365 69 [1] http://mbed.org/users/AjK/libraries/FPointer/latest/docs/
AjK 18:21ef26402365 70
AjK 17:6c9b57c14868 71 1.17 08/Mar/2011
AjK 17:6c9b57c14868 72 Fixed a memory leak in the DMA code.
AjK 17:6c9b57c14868 73
AjK 16:8b1dbf4cce4e 74 1.16 - 12 Feb 2011
AjK 16:8b1dbf4cce4e 75
AjK 16:8b1dbf4cce4e 76 * Missed one, doh!
AjK 16:8b1dbf4cce4e 77
AjK 15:a1d9e745d71e 78 1.15 - 12 Feb 2011
AjK 15:a1d9e745d71e 79
AjK 15:a1d9e745d71e 80 * Fixed some typos.
AjK 15:a1d9e745d71e 81
AjK 14:3c3b87617bfe 82 1.14 - 7 Feb 2011
AjK 14:3c3b87617bfe 83
AjK 14:3c3b87617bfe 84 * Fixed a bug in __putc() that caused the output buffer pointer to
AjK 14:3c3b87617bfe 85 become corrupted.
AjK 14:3c3b87617bfe 86
AjK 13:70bb7c1769fa 87 1.13 - 20/01/2011
AjK 13:70bb7c1769fa 88
AjK 13:70bb7c1769fa 89 * Added extra documentation.
AjK 13:70bb7c1769fa 90 * Fixed some typos.
AjK 13:70bb7c1769fa 91
AjK 12:8c7394e2ae7f 92 1.12 - 20/01/2011
AjK 12:8c7394e2ae7f 93
AjK 12:8c7394e2ae7f 94 * Added new "autoDetectChar()" function. To use:-
AjK 12:8c7394e2ae7f 95 1st: Add a callback to invoke when the char is detected:-
AjK 12:8c7394e2ae7f 96 .attach(&detectedChar, MODSERIAL::RxAutoDetect);
AjK 12:8c7394e2ae7f 97 2nd: Send the char to detect.
AjK 12:8c7394e2ae7f 98 .autoDectectChar('\n');
AjK 12:8c7394e2ae7f 99 Whenever that char goes into the RX buffer your callback will be invoked.
AjK 12:8c7394e2ae7f 100 Added example2.cpp to demo a simple messaging system using this auto feature.
AjK 12:8c7394e2ae7f 101
AjK 12:8c7394e2ae7f 102
AjK 11:a93a62eeeb9d 103 1.11 - 23/11/2010
AjK 11:a93a62eeeb9d 104
AjK 11:a93a62eeeb9d 105 * Fixed a minor issue with 1.10 missed an alteration of name change.
AjK 11:a93a62eeeb9d 106
AjK 10:725fe81aa9ff 107 1.10 - 23/11/2010
AjK 10:725fe81aa9ff 108
AjK 18:21ef26402365 109 * Rename the DMA callback from attach_dma_complete() to attach_dmaSendComplete()
AjK 10:725fe81aa9ff 110
AjK 9:b3cdae80e7a9 111 1.9 - 23/11/2010
AjK 9:b3cdae80e7a9 112
AjK 9:b3cdae80e7a9 113 * Added support for DMA sending of characters. Required is
AjK 9:b3cdae80e7a9 114 the MODDMA library module:-
AjK 9:b3cdae80e7a9 115 http://mbed.org/users/AjK/libraries/MODDMA/latest
AjK 9:b3cdae80e7a9 116 See example_dma.cpp for more information.
AjK 9:b3cdae80e7a9 117
AjK 8:775f860e94d3 118 1.8 - 22/11/2010
AjK 8:775f860e94d3 119
AjK 8:775f860e94d3 120 * Added code so that if a buffer is set to zero length then
AjK 8:775f860e94d3 121 MODSERIAL defaults to just using the FIFO for that stream
AjK 8:775f860e94d3 122 thus making the library "fall back" to teh same operation
AjK 8:775f860e94d3 123 that the Mbed Serial library performs.
AjK 8:775f860e94d3 124 * Removed dmaSend() function that should have been removed
AjK 8:775f860e94d3 125 at 1.7
AjK 8:775f860e94d3 126
AjK 7:ffa4a7cb7f8d 127 1.7 - 21/11/2010
AjK 7:ffa4a7cb7f8d 128
AjK 7:ffa4a7cb7f8d 129 * Remove the DMA enum from MODSERIAL.h as it's not currently
AjK 7:ffa4a7cb7f8d 130 ready for release.
AjK 7:ffa4a7cb7f8d 131 * Added page doxygen comments.
AjK 7:ffa4a7cb7f8d 132
AjK 6:c8f77fe1cc10 133 1.6 - 21/11/2010
AjK 6:c8f77fe1cc10 134
AjK 6:c8f77fe1cc10 135 * Version 1.5 solved a blocking problem on putc() when called
AjK 6:c8f77fe1cc10 136 from another ISR. However, isr_tx() invokes a callback of it's
AjK 6:c8f77fe1cc10 137 own when a byte is tranferred from TX buffer to TX FIFO. User
AjK 6:c8f77fe1cc10 138 programs may interpret that as an IRQ callback. That's an ISR
AjK 6:c8f77fe1cc10 139 call from within an existing ISR which is not good. So the
AjK 6:c8f77fe1cc10 140 TxIrq callback from isr_tx is now conditional. It will only
AjK 6:c8f77fe1cc10 141 be called when isr_tx() is actually within it's own ISR and
AjK 6:c8f77fe1cc10 142 not when called from alternate ISR handlers.
AjK 6:c8f77fe1cc10 143
AjK 5:8365c4cf8f33 144 1.5 - 21/11/2010
AjK 5:8365c4cf8f33 145
AjK 5:8365c4cf8f33 146 * Calling putc() (or any derived function that uses it like
AjK 5:8365c4cf8f33 147 printf()) while inside an interrupt service routine can
AjK 5:8365c4cf8f33 148 cause the system to lock up if the TX buffer is full. This
AjK 5:8365c4cf8f33 149 is because bytes are only transferred from the TX buffer to
AjK 5:8365c4cf8f33 150 the TX FIFO via the TX ISR. If we are, say in an RX ISR already,
AjK 5:8365c4cf8f33 151 then the TX ISR will never trigger. The TX buffer stays full and
AjK 5:8365c4cf8f33 152 there is never space to putc() the byte. So, while putc() blocks
AjK 5:8365c4cf8f33 153 waiting for space it calls isr_tx() to ensure if TX FIFO space
AjK 5:8365c4cf8f33 154 becomes available it will move bytes from the TX buffer to TX
AjK 5:8365c4cf8f33 155 FIFO thus removing the blocking condition within putc().
AjK 5:8365c4cf8f33 156
AjK 4:28de979b77cf 157 1.4 - 21/11/2010
AjK 4:28de979b77cf 158
AjK 4:28de979b77cf 159 * Removed all the new DMA code. I wish mbed.org had proper SVN
AjK 4:28de979b77cf 160 versioning, I'm use to working in HEAD and BRANCHES after I've
AjK 4:28de979b77cf 161 released a project. Getting bug reports in current releases
AjK 4:28de979b77cf 162 while trying to dev new code is hard to manage without source
AjK 4:28de979b77cf 163 control of some type!
AjK 4:28de979b77cf 164
AjK 2:b936b4acbd92 165 1.3 - 21/11/2010
AjK 2:b936b4acbd92 166
AjK 2:b936b4acbd92 167 * Fixed a macro problem with txIsBusy()
AjK 2:b936b4acbd92 168 * Started adding code to use "block data" sending using DMA
AjK 3:0f10f536456e 169 * Removed #include "IOMACROS.h"
AjK 1:b7e435fbfe8e 170
AjK 2:b936b4acbd92 171 1.2 - 21/11/2010
AjK 2:b936b4acbd92 172
AjK 2:b936b4acbd92 173 * Removed unsed variables from flushBuffer()
AjK 2:b936b4acbd92 174 * Fixed a bug where both RX AND TX fifos are cleared/reset
AjK 2:b936b4acbd92 175 when just TX OR RX should be cleared.
AjK 2:b936b4acbd92 176 * Fixed a bug that cleared IIR when in fact it should be left
AjK 2:b936b4acbd92 177 alone so that any pending interrupt after flush is handled.
AjK 2:b936b4acbd92 178 * Merged setBase() into init() as it wasn't required anywhere else.
AjK 2:b936b4acbd92 179 * Changed init() to enforce _uidx is set by Serial to define the _base
AjK 2:b936b4acbd92 180 address of the Uart in use.
AjK 2:b936b4acbd92 181
AjK 1:b7e435fbfe8e 182 1.1 - 20/11/2010
AjK 1:b7e435fbfe8e 183
AjK 1:b7e435fbfe8e 184 * Added this file
AjK 1:b7e435fbfe8e 185 * Removed cruft from GETC.cpp
AjK 1:b7e435fbfe8e 186 * "teh" should be "the", why do my fingers do that?
AjK 1:b7e435fbfe8e 187
AjK 1:b7e435fbfe8e 188 1.0 - 20/11/2010
AjK 1:b7e435fbfe8e 189
AjK 1:b7e435fbfe8e 190 * First release.
AjK 1:b7e435fbfe8e 191
AjK 1:b7e435fbfe8e 192 */