mbed SDK library sources

Fork of mbed-src by mbed official

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Tue Feb 11 15:00:06 2014 +0000
Revision:
89:9655231f5786
Parent:
65:46be7cdf873f
Synchronized with git revision 17499c34d273f02497e0706d3abc516b12f3fc62

Full URL: https://github.com/mbedmicro/mbed/commit/17499c34d273f02497e0706d3abc516b12f3fc62/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 36:ab3ee77451e7 1 /* mbed Microcontroller Library
mbed_official 36:ab3ee77451e7 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 36:ab3ee77451e7 3 *
mbed_official 36:ab3ee77451e7 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 36:ab3ee77451e7 5 * you may not use this file except in compliance with the License.
mbed_official 36:ab3ee77451e7 6 * You may obtain a copy of the License at
mbed_official 36:ab3ee77451e7 7 *
mbed_official 36:ab3ee77451e7 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 36:ab3ee77451e7 9 *
mbed_official 36:ab3ee77451e7 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 36:ab3ee77451e7 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 36:ab3ee77451e7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 36:ab3ee77451e7 13 * See the License for the specific language governing permissions and
mbed_official 36:ab3ee77451e7 14 * limitations under the License.
mbed_official 36:ab3ee77451e7 15 */
mbed_official 36:ab3ee77451e7 16 #include "SerialBase.h"
mbed_official 36:ab3ee77451e7 17 #include "wait_api.h"
mbed_official 36:ab3ee77451e7 18
mbed_official 36:ab3ee77451e7 19 #if DEVICE_SERIAL
mbed_official 36:ab3ee77451e7 20
mbed_official 36:ab3ee77451e7 21 namespace mbed {
mbed_official 36:ab3ee77451e7 22
mbed_official 36:ab3ee77451e7 23 SerialBase::SerialBase(PinName tx, PinName rx) {
mbed_official 36:ab3ee77451e7 24 serial_init(&_serial, tx, rx);
mbed_official 36:ab3ee77451e7 25 _baud = 9600;
mbed_official 36:ab3ee77451e7 26 serial_irq_handler(&_serial, SerialBase::_irq_handler, (uint32_t)this);
mbed_official 36:ab3ee77451e7 27 }
mbed_official 36:ab3ee77451e7 28
mbed_official 36:ab3ee77451e7 29 void SerialBase::baud(int baudrate) {
mbed_official 36:ab3ee77451e7 30 serial_baud(&_serial, baudrate);
mbed_official 36:ab3ee77451e7 31 _baud = baudrate;
mbed_official 36:ab3ee77451e7 32 }
mbed_official 36:ab3ee77451e7 33
mbed_official 36:ab3ee77451e7 34 void SerialBase::format(int bits, Parity parity, int stop_bits) {
mbed_official 36:ab3ee77451e7 35 serial_format(&_serial, bits, (SerialParity)parity, stop_bits);
mbed_official 36:ab3ee77451e7 36 }
mbed_official 36:ab3ee77451e7 37
mbed_official 36:ab3ee77451e7 38 int SerialBase::readable() {
mbed_official 36:ab3ee77451e7 39 return serial_readable(&_serial);
mbed_official 36:ab3ee77451e7 40 }
mbed_official 36:ab3ee77451e7 41
mbed_official 36:ab3ee77451e7 42
mbed_official 36:ab3ee77451e7 43 int SerialBase::writeable() {
mbed_official 36:ab3ee77451e7 44 return serial_writable(&_serial);
mbed_official 36:ab3ee77451e7 45 }
mbed_official 36:ab3ee77451e7 46
mbed_official 36:ab3ee77451e7 47 void SerialBase::attach(void (*fptr)(void), IrqType type) {
mbed_official 36:ab3ee77451e7 48 if (fptr) {
mbed_official 36:ab3ee77451e7 49 _irq[type].attach(fptr);
mbed_official 36:ab3ee77451e7 50 serial_irq_set(&_serial, (SerialIrq)type, 1);
mbed_official 36:ab3ee77451e7 51 } else {
mbed_official 36:ab3ee77451e7 52 serial_irq_set(&_serial, (SerialIrq)type, 0);
mbed_official 36:ab3ee77451e7 53 }
mbed_official 36:ab3ee77451e7 54 }
mbed_official 36:ab3ee77451e7 55
mbed_official 36:ab3ee77451e7 56 void SerialBase::_irq_handler(uint32_t id, SerialIrq irq_type) {
mbed_official 36:ab3ee77451e7 57 SerialBase *handler = (SerialBase*)id;
mbed_official 36:ab3ee77451e7 58 handler->_irq[irq_type].call();
mbed_official 36:ab3ee77451e7 59 }
mbed_official 36:ab3ee77451e7 60
mbed_official 36:ab3ee77451e7 61 int SerialBase::_base_getc() {
mbed_official 36:ab3ee77451e7 62 return serial_getc(&_serial);
mbed_official 36:ab3ee77451e7 63 }
mbed_official 36:ab3ee77451e7 64
mbed_official 36:ab3ee77451e7 65 int SerialBase::_base_putc(int c) {
mbed_official 36:ab3ee77451e7 66 serial_putc(&_serial, c);
mbed_official 36:ab3ee77451e7 67 return c;
mbed_official 36:ab3ee77451e7 68 }
mbed_official 36:ab3ee77451e7 69
mbed_official 36:ab3ee77451e7 70 void SerialBase::send_break() {
mbed_official 36:ab3ee77451e7 71 // Wait for 1.5 frames before clearing the break condition
mbed_official 36:ab3ee77451e7 72 // This will have different effects on our platforms, but should
mbed_official 36:ab3ee77451e7 73 // ensure that we keep the break active for at least one frame.
mbed_official 36:ab3ee77451e7 74 // We consider a full frame (1 start bit + 8 data bits bits +
mbed_official 36:ab3ee77451e7 75 // 1 parity bit + 2 stop bits = 12 bits) for computation.
mbed_official 36:ab3ee77451e7 76 // One bit time (in us) = 1000000/_baud
mbed_official 36:ab3ee77451e7 77 // Twelve bits: 12000000/baud delay
mbed_official 36:ab3ee77451e7 78 // 1.5 frames: 18000000/baud delay
mbed_official 36:ab3ee77451e7 79 serial_break_set(&_serial);
mbed_official 36:ab3ee77451e7 80 wait_us(18000000/_baud);
mbed_official 36:ab3ee77451e7 81 serial_break_clear(&_serial);
mbed_official 36:ab3ee77451e7 82 }
mbed_official 36:ab3ee77451e7 83
mbed_official 64:7b352733b00a 84 #ifdef DEVICE_SERIAL_FC
mbed_official 64:7b352733b00a 85 void SerialBase::set_flow_control(Flow type, PinName flow1, PinName flow2) {
mbed_official 64:7b352733b00a 86 FlowControl flow_type = (FlowControl)type;
mbed_official 64:7b352733b00a 87 switch(type) {
mbed_official 64:7b352733b00a 88 case RTS:
mbed_official 64:7b352733b00a 89 serial_set_flow_control(&_serial, flow_type, flow1, NC);
mbed_official 64:7b352733b00a 90 break;
mbed_official 64:7b352733b00a 91
mbed_official 64:7b352733b00a 92 case CTS:
mbed_official 64:7b352733b00a 93 serial_set_flow_control(&_serial, flow_type, NC, flow1);
mbed_official 64:7b352733b00a 94 break;
mbed_official 64:7b352733b00a 95
mbed_official 64:7b352733b00a 96 case RTSCTS:
mbed_official 65:46be7cdf873f 97 case Disabled:
mbed_official 64:7b352733b00a 98 serial_set_flow_control(&_serial, flow_type, flow1, flow2);
mbed_official 64:7b352733b00a 99 break;
mbed_official 64:7b352733b00a 100
mbed_official 64:7b352733b00a 101 default:
mbed_official 64:7b352733b00a 102 break;
mbed_official 64:7b352733b00a 103 }
mbed_official 64:7b352733b00a 104 }
mbed_official 64:7b352733b00a 105 #endif
mbed_official 64:7b352733b00a 106
mbed_official 36:ab3ee77451e7 107 } // namespace mbed
mbed_official 36:ab3ee77451e7 108
mbed_official 36:ab3ee77451e7 109 #endif