
The PortInOut interface is used to read and write an underlying GPIO port as one value. This is much faster than BusInOut as you can write a port in one go, but much less flexible as 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.
// 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(1);
ledport = 0;
wait(1);
}
}
| PortInOut | A multiple pin digital in/out used to set/read multiple bi-directional pins |
| Functions | |
| PortInOut | Create an PortInOut, connected to the specified port |
| write | Write the value to the output port |
| read | Read the value currently output on the port |
| output | Set as an output |
| input | Set as an input |
| mode | Set the input pin mode |
| operator= | A shorthand for write |
| operator int() | A shorthand for read |
A multiple pin digital in/out used to set/read multiple bi-directional pins
class PortInOut
Create an PortInOut, connected to the specified port
PortInOut( PortName port, int mask = 0xFFFFFFFF )
Write the value to the output port
void write( int value )
Read the value currently output on the port
int read()
Set as an output
void output()
Set as an input
void input()
Set the input pin mode
void mode( PinMode mode )
A shorthand for write
PortInOut& operator= ( int value )
A shorthand for read
operator int()
No tags
|
4 comments
Please login to post comments.
Is there a way to change the masks on the fly? It seems like with a port you wouldn't always want to write to all of the pins at once. It doesn't look like this supports the &= or |= operators.
I could just make multiple PortInOut objects for each mask I want to use. But I'm not really sure if changing one from input to output mode would change all of the port objects.
Is there a more elegant solution, or a lower level way to do this on mbed? Creating a separate PortInOut object for each mask doesn't seem ideal.