- fix F411 F334 systeminit when HSI used - portinout always read IDR regardless of port direction

Fork of mbed-src by mbed official

Committer:
Geremia
Date:
Sat Sep 27 11:16:28 2014 +0000
Revision:
332:e299ae530e63
Parent:
285:31249416b6f9
- fix F411 F334 systeminit when HSI used; - STMs PortInOut port.read() always read input data register (real external pin state) even if direction is output (same as other platforms)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 46:bebbbd80dd87 1 /* mbed Microcontroller Library
mbed_official 46:bebbbd80dd87 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 46:bebbbd80dd87 3 *
mbed_official 46:bebbbd80dd87 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 46:bebbbd80dd87 5 * you may not use this file except in compliance with the License.
mbed_official 46:bebbbd80dd87 6 * You may obtain a copy of the License at
mbed_official 46:bebbbd80dd87 7 *
mbed_official 46:bebbbd80dd87 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 46:bebbbd80dd87 9 *
mbed_official 46:bebbbd80dd87 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 46:bebbbd80dd87 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 46:bebbbd80dd87 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 46:bebbbd80dd87 13 * See the License for the specific language governing permissions and
mbed_official 46:bebbbd80dd87 14 * limitations under the License.
mbed_official 46:bebbbd80dd87 15 */
mbed_official 227:7bd0639b8911 16 #include "mbed_assert.h"
mbed_official 46:bebbbd80dd87 17 #include "pinmap.h"
mbed_official 285:31249416b6f9 18 #include "mbed_error.h"
mbed_official 46:bebbbd80dd87 19
mbed_official 46:bebbbd80dd87 20 __IO uint32_t* IOCON_REGISTERS[18] = {
mbed_official 46:bebbbd80dd87 21 &LPC_IOCON->PIO0_0 , &LPC_IOCON->PIO0_1 , &LPC_IOCON->PIO0_2 ,
mbed_official 46:bebbbd80dd87 22 &LPC_IOCON->PIO0_3 , &LPC_IOCON->PIO0_4 , &LPC_IOCON->PIO0_5 ,
mbed_official 46:bebbbd80dd87 23 &LPC_IOCON->PIO0_6 , &LPC_IOCON->PIO0_7 , &LPC_IOCON->PIO0_8 ,
mbed_official 46:bebbbd80dd87 24 &LPC_IOCON->PIO0_9 , &LPC_IOCON->PIO0_10, &LPC_IOCON->PIO0_11,
mbed_official 46:bebbbd80dd87 25 &LPC_IOCON->PIO0_12, &LPC_IOCON->PIO0_13, &LPC_IOCON->PIO0_14,
mbed_official 46:bebbbd80dd87 26 &LPC_IOCON->PIO0_15, &LPC_IOCON->PIO0_16, &LPC_IOCON->PIO0_17,
mbed_official 46:bebbbd80dd87 27 };
mbed_official 46:bebbbd80dd87 28
mbed_official 46:bebbbd80dd87 29 void pin_function(PinName pin, int function) {
mbed_official 46:bebbbd80dd87 30
mbed_official 46:bebbbd80dd87 31 }
mbed_official 46:bebbbd80dd87 32
mbed_official 46:bebbbd80dd87 33 void pin_mode(PinName pin, PinMode mode) {
mbed_official 227:7bd0639b8911 34 MBED_ASSERT(pin != (PinName)NC);
mbed_official 227:7bd0639b8911 35
mbed_official 46:bebbbd80dd87 36 if ((pin == 10) || (pin == 11)) {
mbed_official 46:bebbbd80dd87 37 // True open-drain pins can be configured for different I2C-bus speeds
mbed_official 46:bebbbd80dd87 38 return;
mbed_official 46:bebbbd80dd87 39 }
mbed_official 46:bebbbd80dd87 40
mbed_official 46:bebbbd80dd87 41 __IO uint32_t *reg = IOCON_REGISTERS[pin];
mbed_official 46:bebbbd80dd87 42
mbed_official 46:bebbbd80dd87 43 if (mode == OpenDrain) {
mbed_official 46:bebbbd80dd87 44 *reg |= (1 << 10);
mbed_official 46:bebbbd80dd87 45 } else {
mbed_official 46:bebbbd80dd87 46 uint32_t tmp = *reg;
mbed_official 46:bebbbd80dd87 47 tmp &= ~(0x3 << 3);
mbed_official 46:bebbbd80dd87 48 tmp |= (mode & 0x3) << 3;
mbed_official 46:bebbbd80dd87 49 *reg = tmp;
mbed_official 46:bebbbd80dd87 50 }
mbed_official 46:bebbbd80dd87 51 }