mirror of https://github.com/ARMmbed/mbed-os.git
Update port api driver to add missing ports
This patch updates port api driver to add missing ports. Signed-off-by: Marc Moreno <marc.morenoberengue@arm.com>pull/4557/head
parent
8de4c5323f
commit
6b04bb364f
|
|
@ -22,7 +22,9 @@ extern "C" {
|
|||
|
||||
typedef enum {
|
||||
Port0 = 0,
|
||||
Port1 = 1
|
||||
Port1,
|
||||
Port2,
|
||||
Port3,
|
||||
} PortName;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -17,26 +17,45 @@
|
|||
#include "pinmap.h"
|
||||
#include "gpio_api.h"
|
||||
|
||||
#define MAX_GPIO_PINS 16
|
||||
|
||||
PinName port_pin(PortName port, int pin_n)
|
||||
{
|
||||
if (pin_n < 0 || pin_n > MAX_GPIO_PINS) {
|
||||
error("Invalid GPIO pin number %d", pin_n);
|
||||
}
|
||||
|
||||
return (PinName)((port << PORT_SHIFT) | pin_n);
|
||||
}
|
||||
|
||||
void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
|
||||
{
|
||||
uint32_t i;
|
||||
CMSDK_GPIO_TypeDef *port_reg;
|
||||
|
||||
switch (port) {
|
||||
case Port0:
|
||||
port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO0_BASE);
|
||||
break;
|
||||
case Port1:
|
||||
port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO1_BASE);
|
||||
break;
|
||||
case Port2:
|
||||
port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO2_BASE);
|
||||
break;
|
||||
case Port3:
|
||||
port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO3_BASE);
|
||||
break;
|
||||
}
|
||||
|
||||
obj->port = port;
|
||||
obj->mask = mask;
|
||||
|
||||
CMSDK_GPIO_TypeDef *port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO0_BASE
|
||||
+ ((int)port * 0x10));
|
||||
|
||||
obj->reg_in = &port_reg->DATAOUT;
|
||||
obj->reg_dir = &port_reg->OUTENABLESET;
|
||||
obj->reg_dirclr = &port_reg->OUTENABLECLR;
|
||||
|
||||
uint32_t i;
|
||||
// The function is set per pin: reuse gpio logic
|
||||
for (i=0; i<16; i++) {
|
||||
/* The function is set per pin: reuse gpio logic */
|
||||
for (i=0; i < MAX_GPIO_PINS; i++) {
|
||||
if (obj->mask & (1<<i)) {
|
||||
gpio_set(port_pin(obj->port, i));
|
||||
}
|
||||
|
|
@ -48,8 +67,8 @@ void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
|
|||
void port_mode(port_t *obj, PinMode mode)
|
||||
{
|
||||
uint32_t i;
|
||||
// The mode is set per pin: reuse pinmap logic
|
||||
for (i=0; i<32; i++) {
|
||||
/* The mode is set per pin: reuse pinmap logic */
|
||||
for (i=0; i < MAX_GPIO_PINS; i++) {
|
||||
if (obj->mask & (1 << i)) {
|
||||
pin_mode(port_pin(obj->port, i), mode);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue