mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

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:
Mon May 26 18:15:07 2014 +0100
Revision:
212:34d62c0b2af6
Parent:
192:42b1a45e48aa
Child:
525:c320967f86b9
Synchronized with git revision f65b7d907785089e8dd942446f1c974b3a213a39

Full URL: https://github.com/mbedmicro/mbed/commit/f65b7d907785089e8dd942446f1c974b3a213a39/

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 212:34d62c0b2af6 23 SerialBase::SerialBase(PinName tx, PinName rx) : _serial(), _baud(9600) {
mbed_official 36:ab3ee77451e7 24 serial_init(&_serial, tx, rx);
mbed_official 36:ab3ee77451e7 25 serial_irq_handler(&_serial, SerialBase::_irq_handler, (uint32_t)this);
mbed_official 36:ab3ee77451e7 26 }
mbed_official 36:ab3ee77451e7 27
mbed_official 36:ab3ee77451e7 28 void SerialBase::baud(int baudrate) {
mbed_official 36:ab3ee77451e7 29 serial_baud(&_serial, baudrate);
mbed_official 36:ab3ee77451e7 30 _baud = baudrate;
mbed_official 36:ab3ee77451e7 31 }
mbed_official 36:ab3ee77451e7 32
mbed_official 36:ab3ee77451e7 33 void SerialBase::format(int bits, Parity parity, int stop_bits) {
mbed_official 36:ab3ee77451e7 34 serial_format(&_serial, bits, (SerialParity)parity, stop_bits);
mbed_official 36:ab3ee77451e7 35 }
mbed_official 36:ab3ee77451e7 36
mbed_official 36:ab3ee77451e7 37 int SerialBase::readable() {
mbed_official 36:ab3ee77451e7 38 return serial_readable(&_serial);
mbed_official 36:ab3ee77451e7 39 }
mbed_official 36:ab3ee77451e7 40
mbed_official 36:ab3ee77451e7 41
mbed_official 36:ab3ee77451e7 42 int SerialBase::writeable() {
mbed_official 36:ab3ee77451e7 43 return serial_writable(&_serial);
mbed_official 36:ab3ee77451e7 44 }
mbed_official 36:ab3ee77451e7 45
mbed_official 36:ab3ee77451e7 46 void SerialBase::attach(void (*fptr)(void), IrqType type) {
mbed_official 36:ab3ee77451e7 47 if (fptr) {
mbed_official 36:ab3ee77451e7 48 _irq[type].attach(fptr);
mbed_official 36:ab3ee77451e7 49 serial_irq_set(&_serial, (SerialIrq)type, 1);
mbed_official 36:ab3ee77451e7 50 } else {
mbed_official 36:ab3ee77451e7 51 serial_irq_set(&_serial, (SerialIrq)type, 0);
mbed_official 36:ab3ee77451e7 52 }
mbed_official 36:ab3ee77451e7 53 }
mbed_official 36:ab3ee77451e7 54
mbed_official 36:ab3ee77451e7 55 void SerialBase::_irq_handler(uint32_t id, SerialIrq irq_type) {
mbed_official 36:ab3ee77451e7 56 SerialBase *handler = (SerialBase*)id;
mbed_official 36:ab3ee77451e7 57 handler->_irq[irq_type].call();
mbed_official 36:ab3ee77451e7 58 }
mbed_official 36:ab3ee77451e7 59
mbed_official 36:ab3ee77451e7 60 int SerialBase::_base_getc() {
mbed_official 36:ab3ee77451e7 61 return serial_getc(&_serial);
mbed_official 36:ab3ee77451e7 62 }
mbed_official 36:ab3ee77451e7 63
mbed_official 36:ab3ee77451e7 64 int SerialBase::_base_putc(int c) {
mbed_official 36:ab3ee77451e7 65 serial_putc(&_serial, c);
mbed_official 36:ab3ee77451e7 66 return c;
mbed_official 36:ab3ee77451e7 67 }
mbed_official 36:ab3ee77451e7 68
mbed_official 36:ab3ee77451e7 69 void SerialBase::send_break() {
mbed_official 36:ab3ee77451e7 70 // Wait for 1.5 frames before clearing the break condition
mbed_official 36:ab3ee77451e7 71 // This will have different effects on our platforms, but should
mbed_official 36:ab3ee77451e7 72 // ensure that we keep the break active for at least one frame.
mbed_official 212:34d62c0b2af6 73 // We consider a full frame (1 start bit + 8 data bits bits +
mbed_official 36:ab3ee77451e7 74 // 1 parity bit + 2 stop bits = 12 bits) for computation.
mbed_official 36:ab3ee77451e7 75 // One bit time (in us) = 1000000/_baud
mbed_official 36:ab3ee77451e7 76 // Twelve bits: 12000000/baud delay
mbed_official 36:ab3ee77451e7 77 // 1.5 frames: 18000000/baud delay
mbed_official 36:ab3ee77451e7 78 serial_break_set(&_serial);
mbed_official 36:ab3ee77451e7 79 wait_us(18000000/_baud);
mbed_official 36:ab3ee77451e7 80 serial_break_clear(&_serial);
mbed_official 36:ab3ee77451e7 81 }
mbed_official 36:ab3ee77451e7 82
mbed_official 192:42b1a45e48aa 83 #if DEVICE_SERIAL_FC
mbed_official 64:7b352733b00a 84 void SerialBase::set_flow_control(Flow type, PinName flow1, PinName flow2) {
mbed_official 64:7b352733b00a 85 FlowControl flow_type = (FlowControl)type;
mbed_official 64:7b352733b00a 86 switch(type) {
mbed_official 64:7b352733b00a 87 case RTS:
mbed_official 64:7b352733b00a 88 serial_set_flow_control(&_serial, flow_type, flow1, NC);
mbed_official 64:7b352733b00a 89 break;
mbed_official 212:34d62c0b2af6 90
mbed_official 64:7b352733b00a 91 case CTS:
mbed_official 64:7b352733b00a 92 serial_set_flow_control(&_serial, flow_type, NC, flow1);
mbed_official 64:7b352733b00a 93 break;
mbed_official 212:34d62c0b2af6 94
mbed_official 64:7b352733b00a 95 case RTSCTS:
mbed_official 65:46be7cdf873f 96 case Disabled:
mbed_official 64:7b352733b00a 97 serial_set_flow_control(&_serial, flow_type, flow1, flow2);
mbed_official 64:7b352733b00a 98 break;
mbed_official 212:34d62c0b2af6 99
mbed_official 64:7b352733b00a 100 default:
mbed_official 64:7b352733b00a 101 break;
mbed_official 64:7b352733b00a 102 }
mbed_official 64:7b352733b00a 103 }
mbed_official 64:7b352733b00a 104 #endif
mbed_official 64:7b352733b00a 105
mbed_official 36:ab3ee77451e7 106 } // namespace mbed
mbed_official 36:ab3ee77451e7 107
mbed_official 36:ab3ee77451e7 108 #endif