Aukie Hooglugt / MODSERIAL-

Fork of MODSERIAL by Erik -

Committer:
Hooglugt
Date:
Fri Oct 03 09:16:32 2014 +0000
Revision:
36:f6cba765d331
Parent:
27:9c93ce7cb9d8
changed method to check if script works (led display, certain light activating at selection to pc.printf, text display in realterm)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:eb2522b41db8 1 /*
AjK 0:eb2522b41db8 2 Copyright (c) 2010 Andy Kirkham
AjK 0:eb2522b41db8 3
AjK 0:eb2522b41db8 4 Permission is hereby granted, free of charge, to any person obtaining a copy
AjK 0:eb2522b41db8 5 of this software and associated documentation files (the "Software"), to deal
AjK 0:eb2522b41db8 6 in the Software without restriction, including without limitation the rights
AjK 0:eb2522b41db8 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
AjK 0:eb2522b41db8 8 copies of the Software, and to permit persons to whom the Software is
AjK 0:eb2522b41db8 9 furnished to do so, subject to the following conditions:
AjK 0:eb2522b41db8 10
AjK 0:eb2522b41db8 11 The above copyright notice and this permission notice shall be included in
AjK 0:eb2522b41db8 12 all copies or substantial portions of the Software.
AjK 0:eb2522b41db8 13
AjK 0:eb2522b41db8 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
AjK 0:eb2522b41db8 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
AjK 0:eb2522b41db8 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AjK 0:eb2522b41db8 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
AjK 0:eb2522b41db8 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
AjK 0:eb2522b41db8 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
AjK 0:eb2522b41db8 20 THE SOFTWARE.
AjK 0:eb2522b41db8 21 */
AjK 0:eb2522b41db8 22
AjK 0:eb2522b41db8 23 #include "MODSERIAL.h"
AjK 0:eb2522b41db8 24 #include "MACROS.h"
AjK 0:eb2522b41db8 25
AjK 0:eb2522b41db8 26 namespace AjK {
AjK 0:eb2522b41db8 27
AjK 0:eb2522b41db8 28 int
AjK 0:eb2522b41db8 29 MODSERIAL::__getc(bool block)
AjK 0:eb2522b41db8 30 {
AjK 8:775f860e94d3 31 // If no buffer is in use fall back to standard RX FIFO usage.
AjK 8:775f860e94d3 32 // Note, we must block in this case and ignore bool "block"
AjK 8:775f860e94d3 33 // so as to maintain compat with Mbed Serial.
AjK 8:775f860e94d3 34 if (buffer_size[RxIrq] == 0 || buffer[RxIrq] == (char *)NULL) {
Sissors 27:9c93ce7cb9d8 35 while(! MODSERIAL_READABLE ) ;
Sissors 27:9c93ce7cb9d8 36 return (int)(MODSERIAL_READ_REG & 0xFF);
AjK 8:775f860e94d3 37 }
AjK 8:775f860e94d3 38
AjK 0:eb2522b41db8 39 if (block) { while ( MODSERIAL_RX_BUFFER_EMPTY ) ; } // Blocks.
AjK 0:eb2522b41db8 40 else if ( MODSERIAL_RX_BUFFER_EMPTY ) return -1;
AjK 0:eb2522b41db8 41
AjK 0:eb2522b41db8 42 int c = buffer[RxIrq][buffer_out[RxIrq]];
AjK 0:eb2522b41db8 43 buffer_out[RxIrq]++;
AjK 0:eb2522b41db8 44 if (buffer_out[RxIrq] >= buffer_size[RxIrq]) {
AjK 0:eb2522b41db8 45 buffer_out[RxIrq] = 0;
AjK 0:eb2522b41db8 46 }
AjK 0:eb2522b41db8 47
AjK 0:eb2522b41db8 48 // If we have made space in the RX Buffer then copy over
AjK 0:eb2522b41db8 49 // any characters in the RX FIFO that my reside there.
AjK 0:eb2522b41db8 50 // Temporarily disable the RX IRQ so that we do not re-enter
AjK 0:eb2522b41db8 51 // it under interrupts.
AjK 0:eb2522b41db8 52 if ( ! MODSERIAL_RX_BUFFER_FULL ) {
Sissors 27:9c93ce7cb9d8 53 uint32_t irq_reg = MODSERIAL_IRQ_REG;
Sissors 27:9c93ce7cb9d8 54 DISABLE_RX_IRQ;
AjK 0:eb2522b41db8 55 isr_rx();
Sissors 27:9c93ce7cb9d8 56 MODSERIAL_IRQ_REG = irq_reg;
AjK 0:eb2522b41db8 57 }
AjK 0:eb2522b41db8 58
AjK 22:c11ea36f17f9 59 __disable_irq();
AjK 0:eb2522b41db8 60 buffer_count[RxIrq]--;
AjK 22:c11ea36f17f9 61 __enable_irq();
AjK 0:eb2522b41db8 62 return c;
AjK 0:eb2522b41db8 63 }
AjK 0:eb2522b41db8 64
AjK 0:eb2522b41db8 65 }; // namespace AjK ends