| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /* --------------------------------------------------------------------------
- * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * 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
- *
- * 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.
- *
- * $Date: 02. March 2016
- * $Revision: V1.1
- *
- * Project: SCU Driver for NXP LPC18xx
- * -------------------------------------------------------------------------- */
- /* History:
- * Version 1.1
- * - Corrected SCU_SFSCLKx(clk_pin) and SCU_ENAIOx(n) macros
- * Version 1.0
- * - Initial release
- */
- #include "LPC18xx.h"
- #include "SCU_LPC18xx.h"
- #define PORT_OFFSET ( 0x80 )
- #define PIN_OFFSET ( 0x04 )
- #define SCU_SFSPx(port, pin) (*((volatile uint32_t *) ((LPC_SCU_BASE + PORT_OFFSET * port + PIN_OFFSET * pin))))
- #define SCU_SFSCLKx(clk_pin) (*((volatile uint32_t *) (&(LPC_SCU->SFSCLK_0) + clk_pin)))
- #define SCU_ENAIOx(n) (*((volatile uint32_t *) (&(LPC_SCU->ENAIO0) + n)))
- /**
- \fn int32_t SCU_PinConfiguare (uint8_t port, uint8_t pin, uint32_t pin_cfg)
- \brief Set pin function and electrical characteristics
- \param[in] port Port number (0..15)
- \param[in] pin Pin number (0..31)
- \param[in] pin_cfg pin_cfg configuration bit mask
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_PinConfigure (uint8_t port, uint8_t pin, uint32_t pin_cfg) {
- if ((port > 15) || (pin > 31)) return -1;
- SCU_SFSPx(port, pin) = pin_cfg;
- return 0;
- }
- /**
- \fn int32_t SCU_CLK_PinConfigure (uint8_t clk_pin, uint32_t pin_cfg)
- \brief Set pin function and electrical characteristics for CLK pins
- \param[in] clk_pin Clock pin number should be 0..3
- \param[in] pin_cfg pin_cfg
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_CLK_PinConfigure (uint8_t pin_clk, uint32_t pin_cfg) {
- if (pin_clk > 3) return -1;
- SCU_SFSCLKx(pin_clk) = pin_cfg;
- return 0;
- }
- /**
- \fn int32_t SCU_USB1_PinConfigure (uint32_t USB1_pin_cfg)
- \brief Pin configuration for USB1 USB_DP/USBDM pins
- \param[in] USB1_pin_cfg USB1_pin_cfg configuration bit mask
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_USB1_PinConfigure (uint32_t USB1_pin_cfg) {
- LPC_SCU->SFSUSB = USB1_pin_cfg;
- return 0;
- }
- /**
- \fn int32_t SCU_I2C_PinConfigure (uint32_t I2C_mode)
- \brief Set I2C pin configuration
- \param[in] I2C_mode: SCU_I2C_PIN_MODE_DISABLED
- SCU_I2C_PIN_MODE_STANDARD_FAST
- SCU_I2C_PIN_MODE_FAST_PLUS
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_I2C_PinConfigure (uint32_t I2C_mode) {
- switch (I2C_mode) {
- case SCU_I2C_PIN_MODE_DISABLED: break;
- case SCU_I2C_PIN_MODE_STANDARD_FAST: break;
- case SCU_I2C_PIN_MODE_FAST_PLUS: break;
- default: return -1;
- }
- LPC_SCU->SFSI2C0 = I2C_mode;
- return 0;
- }
- /**
- \fn int32_t SCU_ADC_ChannelPinConfigure (uint8_t ADC_num, uint8_t channel, uint32_t cmd)
- \brief ADC Channel configuration
- \param[in] ADC_num: 0 = ADC0, 1 = ADC1
- \param[in] channel: channel number 0..7
- \param[in] cmd: 1 - enabled, 0 - disabled
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_ADC_ChannelPinConfigure (uint8_t ADC_num, uint8_t channel, uint32_t cmd) {
- if ((ADC_num > 1) || (channel > 7) || (cmd > 1)) return -1;
- cmd ? (SCU_ENAIOx(ADC_num) |= (1 << channel)) : (SCU_ENAIOx(ADC_num) &= ~(1 << channel));
- return 0;
- }
- /**
- \fn int32_t SCU_DAC_PinConfigure (uint32_t cmd)
- \brief Analog function on P4_4
- \param[in] cmd: 1 - enabled, 0 - disabled
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_DAC_PinConfigure (uint32_t cmd) {
- if (cmd > 1) return -1;
- cmd ? (LPC_SCU->ENAIO2 |= SCU_ENAIO2_DAC) : (LPC_SCU->ENAIO2 &= ~SCU_ENAIO2_DAC);
- return 0;
- }
- /**
- \fn int32_t SCU_PinInterruptSourceSelect (uint8_t pin_int, uint8_t port, uint8_t pin)
- \brief Select interrupt source pin
- \param[in] pin_int: pin interrupt 0..7
- \param[in] port: GPIO port number 0..7
- \param[in] pin: GPIO pin number 0..31
- \returns
- - \b 0: function succeeded
- - \b -1: function failed
- */
- int32_t SCU_PinInterruptSourceSelect (uint8_t pin_int, uint8_t port, uint8_t pin) {
- if ((port > 7) || (pin > 31) || (pin_int > 7)) return -1;
- if (pin_int < 4) {
- LPC_SCU->PINTSEL0 &= ~(0xFF << (8 * pin_int));
- LPC_SCU->PINTSEL0 |= ((pin | (port << 5)) << (8 * pin_int));
- } else {
- pin_int -= 4;
- LPC_SCU->PINTSEL1 &= ~(0xFF << (8 * pin_int));
- LPC_SCU->PINTSEL1 |= ((pin | (port << 5)) << (8 * pin_int));
- }
- return 0;
- }
|