PortInOut

Use the PortInOut interface to read and write an underlying GPIO port as one value. This is much faster than BusInOut because you can write a port in one go, but it is much less flexible because you are constrained by the port and bit layout of the underlying GPIO ports.

A mask can be supplied so only certain bits of a port are used, allowing other bits to be used for other interfaces.

API

 
 /* mbed Microcontroller Library
  * Copyright (c) 2006-2013 ARM Limited
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 #ifndef MBED_PORTINOUT_H
 #define MBED_PORTINOUT_H
 
 #include "platform/platform.h"
 
 #if defined (DEVICE_PORTINOUT) || defined(DOXYGEN_ONLY)
 
 #include "hal/port_api.h"
 #include "platform/mbed_critical.h"
 
 namespace mbed {
 /** \addtogroup drivers */
 
 /** A multiple pin digital in/out used to set/read multiple bi-directional pins
  *
  * @note Synchronization level: Interrupt safe
  * @ingroup drivers
  */
 class PortInOut {
 public:
 
  /** Create an PortInOut, connected to the specified port
  *
  * @param port Port to connect to (Port0-Port5)
  * @param mask A bitmask to identify which bits in the port should be included (0 - ignore)
  */
  PortInOut(PortName port, int mask = 0xFFFFFFFF) {
  port_init(&_port, port, mask, PIN_INPUT);
  }
 
  /** Write the value to the output port
  *
  * @param value An integer specifying a bit to write for every corresponding port pin
  */
  void write(int value) {
  port_write(&_port, value);
  }
 
  /** Read the value currently output on the port
  *
  * @returns
  * An integer with each bit corresponding to associated port pin setting
  */
  int read() {
  return port_read(&_port);
  }
 
  /** Set as an output
  */
  void output() {
  port_dir(&_port, PIN_OUTPUT);
  }
 
  /** Set as an input
  */
  void input() {
  port_dir(&_port, PIN_INPUT);
  }
 
  /** Set the input pin mode
  *
  * @param mode PullUp, PullDown, PullNone, OpenDrain
  */
  void mode(PinMode mode) {
  port_mode(&_port, mode);
  }
 
  /** A shorthand for write()
  * \sa PortInOut::write()
  */
  PortInOut& operator= (int value) {
  write(value);
  return *this;
  }
 
  /** A shorthand for write()
  * \sa PortInOut::write()
  */
  write(rhs.read());
  return *this;
  }
 
  /** A shorthand for read()
  * \sa PortInOut::read()
  */
  operator int() {
  return read();
  }
 
 private:
  port_t _port;
 };
 
 } // namespace mbed
 
 #endif
 
 #endif
MBED_WEAK void core_util_critical_section_enter(void)
Definition: mbed_critical.c:56
void input()
Definition: PortInOut.h:75
void output()
Definition: PortInOut.h:67
int read()
Definition: PortInOut.h:61
void mode(PinMode mode)
Definition: PortInOut.h:85
PortInOut & operator=(int value)
Definition: PortInOut.h:94
void write(int value)
Definition: PortInOut.h:52
Definition: AnalogIn.h:27
PortInOut(PortName port, int mask=0xFFFFFFFF)
Definition: PortInOut.h:42
MBED_WEAK void core_util_critical_section_exit(void)
Definition: mbed_critical.c:81
Definition: PortInOut.h:34

Hello World!

 


// Toggle all four LEDs
 
#include "mbed.h"
 
// LED1 = P1.18  LED2 = P1.20  LED3 = P1.21  LED4 = P1.23
#define LED_MASK 0x00B40000
 
PortInOut ledport(Port1, LED_MASK);
 
int main() {
    int v = ledport;
    ledport.output();
    while(1) {
        ledport = LED_MASK;
        wait(0.5);
        ledport = 0;
        wait(1);
    }
}