MODSERIAL with support for more devices

Dependents:   1D-Pong BMT-K9_encoder BMT-K9-Regelaar programma_filter ... more

Check the cookbook page for more information: https://mbed.org/cookbook/MODSERIAL

Did you add a device? Please send a pull request so we can keep everything in one library instead of many copies. In that case also send a PM, since currently mbed does not inform of new pull requests. I will then also add you to the developers of this library so you can do other changes directly.

Committer:
AjK
Date:
Tue Apr 26 08:12:45 2011 +0000
Revision:
20:59c74aaedda2
Parent:
18:21ef26402365
Child:
21:af2af4c61c2f
1.20 See ChangeLog.c

Who changed what in which revision?

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