Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c
- Revision:
- 5:4943b15cce9f
- Parent:
- 1:917af0ca86df
diff -r 472232f07925 -r 4943b15cce9f Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c
--- a/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c Wed Jan 17 15:20:12 2018 +0100
+++ b/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c Tue Sep 24 18:00:58 2019 +0200
@@ -1,40 +1,22 @@
-/**
+/**
******************************************************************************
* @file mfxstm32l152.c
* @author MCD Application Team
- * @version V2.0.0
- * @date 24-June-2015
* @brief This file provides a set of functions needed to manage the MFXSTM32L152
* IO Expander devices.
******************************************************************************
* @attention
*
- * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ * <h2><center>© Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.</center></h2>
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
- */
+ */
/* Includes ------------------------------------------------------------------*/
#include "mfxstm32l152.h"
@@ -45,66 +27,66 @@
/** @addtogroup Component
* @{
- */
-
+ */
+
/** @defgroup MFXSTM32L152
* @{
- */
-
+ */
+
/* Private typedef -----------------------------------------------------------*/
/** @defgroup MFXSTM32L152_Private_Types_Definitions
* @{
- */
-
+ */
+
/* Private define ------------------------------------------------------------*/
/** @defgroup MFXSTM32L152_Private_Defines
* @{
- */
+ */
#define MFXSTM32L152_MAX_INSTANCE 3
/* Private macro -------------------------------------------------------------*/
/** @defgroup MFXSTM32L152_Private_Macros
* @{
- */
-
+ */
+
/* Private variables ---------------------------------------------------------*/
/** @defgroup MFXSTM32L152_Private_Variables
* @{
- */
+ */
-/* Touch screen driver structure initialization */
-TS_DrvTypeDef mfxstm32l152_ts_drv =
+/* Touch screen driver structure initialization */
+TS_DrvTypeDef mfxstm32l152_ts_drv =
{
mfxstm32l152_Init,
mfxstm32l152_ReadID,
mfxstm32l152_Reset,
-
+
mfxstm32l152_TS_Start,
mfxstm32l152_TS_DetectTouch,
mfxstm32l152_TS_GetXY,
-
+
mfxstm32l152_TS_EnableIT,
mfxstm32l152_TS_ClearIT,
mfxstm32l152_TS_ITStatus,
mfxstm32l152_TS_DisableIT,
};
-/* IO driver structure initialization */
-IO_DrvTypeDef mfxstm32l152_io_drv =
+/* IO driver structure initialization */
+IO_DrvTypeDef mfxstm32l152_io_drv =
{
mfxstm32l152_Init,
mfxstm32l152_ReadID,
mfxstm32l152_Reset,
-
+
mfxstm32l152_IO_Start,
mfxstm32l152_IO_Config,
mfxstm32l152_IO_WritePin,
mfxstm32l152_IO_ReadPin,
-
+
mfxstm32l152_IO_EnableIT,
mfxstm32l152_IO_DisableIT,
mfxstm32l152_IO_ITStatus,
@@ -143,14 +125,14 @@
uint8_t mfxstm32l152[MFXSTM32L152_MAX_INSTANCE] = {0};
/**
* @}
- */
-
+ */
+
/* Private function prototypes -----------------------------------------------*/
/** @defgroup MFXSTM32L152_Private_Function_Prototypes
* @{
*/
-static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr);
+static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr);
static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr);
static void mfxstm32l152_reg24_setPinValue(uint16_t DeviceAddr, uint8_t RegisterAddr, uint32_t PinPosition, uint8_t PinValue );
@@ -169,26 +151,26 @@
{
uint8_t instance;
uint8_t empty;
-
+
/* Check if device instance already exists */
instance = mfxstm32l152_GetInstance(DeviceAddr);
-
+
/* To prevent double initialization */
if(instance == 0xFF)
{
/* Look for empty instance */
empty = mfxstm32l152_GetInstance(0);
-
+
if(empty < MFXSTM32L152_MAX_INSTANCE)
{
/* Register the current device instance */
mfxstm32l152[empty] = DeviceAddr;
-
+
/* Initialize IO BUS layer */
MFX_IO_Init();
}
}
-
+
mfxstm32l152_SetIrqOutPinPolarity(DeviceAddr, MFXSTM32L152_OUT_PIN_POLARITY_HIGH);
mfxstm32l152_SetIrqOutPinType(DeviceAddr, MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL);
}
@@ -201,10 +183,10 @@
void mfxstm32l152_DeInit(uint16_t DeviceAddr)
{
uint8_t instance;
-
+
/* release existing instance */
instance = mfxstm32l152_ReleaseInstance(DeviceAddr);
-
+
/* De-Init only if instance was previously registered */
if(instance != 0xFF)
{
@@ -215,12 +197,12 @@
/**
* @brief Reset the mfxstm32l152 by Software.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_Reset(uint16_t DeviceAddr)
{
- /* Soft Reset */
+ /* Soft Reset */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, MFXSTM32L152_SWRST);
/* Wait for a delay to ensure registers erasing */
@@ -249,10 +231,10 @@
void mfxstm32l152_WakeUp(uint16_t DeviceAddr)
{
uint8_t instance;
-
+
/* Check if device instance already exists */
instance = mfxstm32l152_GetInstance(DeviceAddr);
-
+
/* if instance does not exist, first initialize pins*/
if(instance == 0xFF)
{
@@ -266,28 +248,28 @@
/**
* @brief Read the MFXSTM32L152 IO Expander device ID.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval The Device ID (two bytes).
*/
uint16_t mfxstm32l152_ReadID(uint16_t DeviceAddr)
{
uint8_t id;
-
+
/* Wait for a delay to ensure the state of registers */
MFX_IO_Delay(1);
/* Initialize IO BUS layer */
MFX_IO_Init();
-
+
id = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_ID);
-
+
/* Return the device ID value */
return (id);
}
/**
* @brief Read the MFXSTM32L152 device firmware version.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval The Device FW version (two bytes).
*/
uint16_t mfxstm32l152_ReadFwVersion(uint16_t DeviceAddr)
@@ -302,56 +284,56 @@
/**
* @brief Enable the interrupt mode for the selected IT source
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Source: The interrupt source to be configured, could be:
- * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
- * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
- * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
- * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
- * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
- * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
- * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
- * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
+ * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
+ * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
+ * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
+ * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
+ * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
+ * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
+ * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
+ * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
* @retval None
- */
+ */
void mfxstm32l152_EnableITSource(uint16_t DeviceAddr, uint8_t Source)
{
uint8_t tmp = 0;
-
+
/* Get the current value of the INT_EN register */
tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN);
- /* Set the interrupts to be Enabled */
- tmp |= Source;
-
+ /* Set the interrupts to be Enabled */
+ tmp |= Source;
+
/* Set the register */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN, tmp);
}
/**
* @brief Disable the interrupt mode for the selected IT source
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Source: The interrupt source to be configured, could be:
- * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
- * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
- * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
- * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
- * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
- * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
- * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
- * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
+ * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
+ * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
+ * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
+ * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
+ * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
+ * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
+ * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
+ * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
* @retval None
*/
void mfxstm32l152_DisableITSource(uint16_t DeviceAddr, uint8_t Source)
{
uint8_t tmp = 0;
-
+
/* Get the current value of the INT_EN register */
tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN);
- /* Set the interrupts to be Enabled */
- tmp &= ~Source;
-
+ /* Set the interrupts to be Enabled */
+ tmp &= ~Source;
+
/* Set the register */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN, tmp);
}
@@ -359,16 +341,16 @@
/**
* @brief Returns the selected Global interrupt source pending bit value
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Source: the Global interrupt source to be checked, could be:
- * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
- * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
- * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
- * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
- * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
- * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
- * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
- * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
+ * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt
+ * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
+ * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
+ * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
+ * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
+ * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
+ * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
+ * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
* @retval The value of the checked Global interrupt source status.
*/
uint8_t mfxstm32l152_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source)
@@ -379,18 +361,18 @@
/**
* @brief Clear the selected Global interrupt pending bit(s)
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Source: the Global interrupt source to be cleared, could be any combination
- * of the below values. The acknowledge signal for MFXSTM32L152_GPIOs configured in input
- * with interrupt is not on this register but in IRQ_GPI_ACK1, IRQ_GPI_ACK2 registers.
- * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
- * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
- * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
- * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
- * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
- * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
- * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
- * /\/\ IMPORTANT NOTE /\/\ must not use MFXSTM32L152_IRQ_GPIO as argument, see IRQ_GPI_ACK1 and IRQ_GPI_ACK2 registers
+ * of the below values. The acknowledge signal for MFXSTM32L152_GPIOs configured in input
+ * with interrupt is not on this register but in IRQ_GPI_ACK1, IRQ_GPI_ACK2 registers.
+ * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt
+ * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt
+ * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt
+ * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty
+ * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered
+ * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full
+ * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow
+ * /\/\ IMPORTANT NOTE /\/\ must not use MFXSTM32L152_IRQ_GPIO as argument, see IRQ_GPI_ACK1 and IRQ_GPI_ACK2 registers
* @retval None
*/
void mfxstm32l152_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source)
@@ -401,60 +383,60 @@
/**
* @brief Set the global interrupt Polarity of IRQ_OUT_PIN.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Polarity: the IT mode polarity, could be one of the following values:
- * @arg MFXSTM32L152_OUT_PIN_POLARITY_LOW: Interrupt output line is active Low edge
- * @arg MFXSTM32L152_OUT_PIN_POLARITY_HIGH: Interrupt line output is active High edge
+ * @arg MFXSTM32L152_OUT_PIN_POLARITY_LOW: Interrupt output line is active Low edge
+ * @arg MFXSTM32L152_OUT_PIN_POLARITY_HIGH: Interrupt line output is active High edge
* @retval None
*/
void mfxstm32l152_SetIrqOutPinPolarity(uint16_t DeviceAddr, uint8_t Polarity)
{
uint8_t tmp = 0;
-
- /* Get the current register value */
+
+ /* Get the current register value */
tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT);
-
+
/* Mask the polarity bits */
tmp &= ~(uint8_t)0x02;
-
+
/* Modify the Interrupt Output line configuration */
tmp |= Polarity;
-
+
/* Set the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT, tmp);
/* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
MFX_IO_Delay(1);
-
+
}
/**
- * @brief Set the global interrupt Type of IRQ_OUT_PIN.
- * @param DeviceAddr: Device address on communication Bus.
+ * @brief Set the global interrupt Type of IRQ_OUT_PIN.
+ * @param DeviceAddr: Device address on communication Bus.
* @param Type: Interrupt line activity type, could be one of the following values:
- * @arg MFXSTM32L152_OUT_PIN_TYPE_OPENDRAIN: Open Drain output Interrupt line
- * @arg MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL: Push Pull output Interrupt line
+ * @arg MFXSTM32L152_OUT_PIN_TYPE_OPENDRAIN: Open Drain output Interrupt line
+ * @arg MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL: Push Pull output Interrupt line
* @retval None
*/
void mfxstm32l152_SetIrqOutPinType(uint16_t DeviceAddr, uint8_t Type)
{
uint8_t tmp = 0;
-
- /* Get the current register value */
+
+ /* Get the current register value */
tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT);
-
+
/* Mask the type bits */
tmp &= ~(uint8_t)0x01;
-
+
/* Modify the Interrupt Output line configuration */
tmp |= Type;
-
+
/* Set the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT, tmp);
/* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
MFX_IO_Delay(1);
-
+
}
@@ -465,49 +447,49 @@
/**
* @brief Start the IO functionality used and enable the AF for selected IO pin(s).
- * @param DeviceAddr: Device address on communication Bus.
- * @param AF_en: 0 to disable, else enabled.
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param AF_en: 0 to disable, else enabled.
* @retval None
*/
void mfxstm32l152_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin)
{
uint8_t mode;
-
+
/* Get the current register value */
mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
-
- /* Set the IO Functionalities to be Enabled */
- mode |= MFXSTM32L152_GPIO_EN;
-
+
+ /* Set the IO Functionalities to be Enabled */
+ mode |= MFXSTM32L152_GPIO_EN;
+
/* Enable ALTERNATE functions */
- /* AGPIO[0..3] can be either IDD or GPIO */
- /* AGPIO[4..7] can be either TS or GPIO */
+ /* AGPIO[0..3] can be either IDD or GPIO */
+ /* AGPIO[4..7] can be either TS or GPIO */
/* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
- /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
+ /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
/* so if IDD and TS are both active it is better to let ALTERNATE off (0) */
/* if however IDD or TS are not connected then set it on gives more GPIOs availability */
/* remind that AGPIO are less efficient then normal GPIO (They use pooling rather then EXTI */
if (IO_Pin > 0xFFFF)
{
- mode |= MFXSTM32L152_ALTERNATE_GPIO_EN;
+ mode |= MFXSTM32L152_ALTERNATE_GPIO_EN;
}
else
{
- mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN;
- }
+ mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN;
+ }
- /* Write the new register value */
+ /* Write the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
-
+
/* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */
MFX_IO_Delay(1);
}
/**
* @brief Configures the IO pin(s) according to IO mode structure value.
- * @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The output pin to be set or reset. This parameter can be one
- * of the following values:
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param IO_Pin: The output pin to be set or reset. This parameter can be one
+ * of the following values:
* @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
* @param IO_Mode: The IO pin mode to configure, could be one of the following values:
* @arg IO_MODE_INPUT
@@ -515,7 +497,7 @@
* @arg IO_MODE_IT_RISING_EDGE
* @arg IO_MODE_IT_FALLING_EDGE
* @arg IO_MODE_IT_LOW_LEVEL
- * @arg IO_MODE_IT_HIGH_LEVEL
+ * @arg IO_MODE_IT_HIGH_LEVEL
* @arg IO_MODE_INPUT_PU,
* @arg IO_MODE_INPUT_PD,
* @arg IO_MODE_OUTPUT_OD_PU,
@@ -553,14 +535,14 @@
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
break;
-
+
case IO_MODE_INPUT_PU: /* Input mode */
mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
break;
-
+
case IO_MODE_INPUT_PD: /* Input mode */
mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */
mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
@@ -599,7 +581,7 @@
case IO_MODE_IT_RISING_EDGE: /* Interrupt rising edge mode */
mfxstm32l152_IO_EnableIT(DeviceAddr);
- mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
+ mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE);
@@ -622,8 +604,8 @@
mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
- mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE);
- mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE);
+ mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE);
+ mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE);
mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
break;
@@ -649,17 +631,17 @@
case IO_MODE_IT_FALLING_EDGE_PD: /* Interrupt falling edge mode */
mfxstm32l152_IO_EnableIT(DeviceAddr);
- mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
+ mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
- mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE);
- mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE);
+ mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE);
+ mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE);
mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
break;
case IO_MODE_IT_LOW_LEVEL: /* Low level interrupt mode */
mfxstm32l152_IO_EnableIT(DeviceAddr);
- mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
+ mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL);
@@ -683,13 +665,13 @@
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL);
- mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE);
+ mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE);
mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
break;
-
+
case IO_MODE_IT_HIGH_LEVEL: /* High level interrupt mode */
mfxstm32l152_IO_EnableIT(DeviceAddr);
- mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
+ mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP);
mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL);
@@ -713,14 +695,14 @@
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR);
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN);
mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL);
- mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE);
+ mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE);
mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */
- break;
-
+ break;
+
default:
error_code = (uint8_t) IO_Mode;
- break;
- }
+ break;
+ }
return error_code;
}
@@ -728,10 +710,10 @@
/**
* @brief Initialize the selected IO pin direction.
* @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The IO pin to be configured. This parameter could be any
+ * @param IO_Pin: The IO pin to be configured. This parameter could be any
* combination of the following values:
- * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
- * @param Direction: could be MFXSTM32L152_GPIO_DIR_IN or MFXSTM32L152_GPIO_DIR_OUT.
+ * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
+ * @param Direction: could be MFXSTM32L152_GPIO_DIR_IN or MFXSTM32L152_GPIO_DIR_OUT.
* @retval None
*/
void mfxstm32l152_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction)
@@ -740,14 +722,14 @@
}
/**
- * @brief Set the global interrupt Type.
- * @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The IO pin to be configured. This parameter could be any
+ * @brief Set the global interrupt Type.
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param IO_Pin: The IO pin to be configured. This parameter could be any
* combination of the following values:
- * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
* @param Evt: Interrupt line activity type, could be one of the following values:
- * @arg MFXSTM32L152_IRQ_GPI_EVT_LEVEL: Interrupt line is active in level model
- * @arg MFXSTM32L152_IRQ_GPI_EVT_EDGE: Interrupt line is active in edge model
+ * @arg MFXSTM32L152_IRQ_GPI_EVT_LEVEL: Interrupt line is active in level model
+ * @arg MFXSTM32L152_IRQ_GPI_EVT_EDGE: Interrupt line is active in edge model
* @retval None
*/
void mfxstm32l152_IO_SetIrqEvtMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Evt)
@@ -760,12 +742,12 @@
* @brief Configure the Edge for which a transition is detectable for the
* selected pin.
* @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The IO pin to be configured. This parameter could be any
+ * @param IO_Pin: The IO pin to be configured. This parameter could be any
* combination of the following values:
- * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
* @param Evt: Interrupt line activity type, could be one of the following values:
- * @arg MFXSTM32L152_IRQ_GPI_TYPE_LLFE: Interrupt line is active in Low Level or Falling Edge
- * @arg MFXSTM32L152_IRQ_GPI_TYPE_HLRE: Interrupt line is active in High Level or Rising Edge
+ * @arg MFXSTM32L152_IRQ_GPI_TYPE_LLFE: Interrupt line is active in Low Level or Falling Edge
+ * @arg MFXSTM32L152_IRQ_GPI_TYPE_HLRE: Interrupt line is active in High Level or Rising Edge
* @retval None
*/
void mfxstm32l152_IO_SetIrqTypeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Type)
@@ -776,10 +758,10 @@
/**
* @brief When GPIO is in output mode, puts the corresponding GPO in High (1) or Low (0) level.
- * @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The output pin to be set or reset. This parameter can be one
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param IO_Pin: The output pin to be set or reset. This parameter can be one
* of the following values:
- * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
* @param PinState: The new IO pin state.
* @retval None
*/
@@ -795,59 +777,69 @@
{
/* Set the CLEAR register */
mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPO_CLR1, IO_Pin, 1);
- }
+ }
}
/**
* @brief Return the state of the selected IO pin(s).
- * @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The output pin to be set or reset. This parameter can be one
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param IO_Pin: The output pin to be set or reset. This parameter can be one
* of the following values:
- * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
* @retval IO pin(s) state.
*/
uint32_t mfxstm32l152_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin)
{
- uint8_t tmp1;
- uint16_t tmp2;
- uint32_t tmp3;
-
- tmp1 = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE1);
- tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE2);
- tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE3);
+ uint32_t tmp1 = 0;
+ uint32_t tmp2 = 0;
+ uint32_t tmp3 = 0;
+
+ if(IO_Pin & 0x000000FF)
+ {
+ tmp1 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE1);
+ }
+ if(IO_Pin & 0x0000FF00)
+ {
+ tmp2 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE2);
+ }
+ if(IO_Pin & 0x00FF0000)
+ {
+ tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE3);
+ }
+
tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16);
-
+
return(tmp3 & IO_Pin);
}
/**
* @brief Enable the global IO interrupt source.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_IO_EnableIT(uint16_t DeviceAddr)
-{
+{
MFX_IO_ITConfig();
-
+
/* Enable global IO IT source */
mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_GPIO);
}
/**
* @brief Disable the global IO interrupt source.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_IO_DisableIT(uint16_t DeviceAddr)
{
/* Disable global IO IT source */
- mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_GPIO);
+ mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_GPIO);
}
-
+
/**
* @brief Enable interrupt mode for the selected IO pin(s).
* @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The IO interrupt to be enabled. This parameter could be any
+ * @param IO_Pin: The IO interrupt to be enabled. This parameter could be any
* combination of the following values:
* @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
* @retval None
@@ -860,7 +852,7 @@
/**
* @brief Disable interrupt mode for the selected IO pin(s).
* @param DeviceAddr: Device address on communication Bus.
- * @param IO_Pin: The IO interrupt to be disabled. This parameter could be any
+ * @param IO_Pin: The IO interrupt to be disabled. This parameter could be any
* combination of the following values:
* @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23.
* @retval None
@@ -875,21 +867,31 @@
* @brief Check the status of the selected IO interrupt pending bit
* @param DeviceAddr: Device address on communication Bus.
* @param IO_Pin: The IO interrupt to be checked could be:
- * @arg MFXSTM32L152_GPIO_PIN_x Where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x Where x can be from 0 to 23.
* @retval Status of the checked IO pin(s).
*/
uint32_t mfxstm32l152_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin)
{
/* Get the Interrupt status */
- uint8_t tmp1;
- uint16_t tmp2;
- uint32_t tmp3;
+ uint8_t tmp1 = 0;
+ uint16_t tmp2 = 0;
+ uint32_t tmp3 = 0;
- tmp1 = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING1);
- tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2);
- tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3);
+ if(IO_Pin & 0xFF)
+ {
+ tmp1 = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING1);
+ }
+ if(IO_Pin & 0xFFFF00)
+ {
+ tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2);
+ }
+ if(IO_Pin & 0xFFFF0000)
+ {
+ tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3);
+ }
+
tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16);
-
+
return(tmp3 & IO_Pin);
}
@@ -897,7 +899,7 @@
* @brief Clear the selected IO interrupt pending bit(s). It clear automatically also the general MFXSTM32L152_REG_ADR_IRQ_PENDING
* @param DeviceAddr: Device address on communication Bus.
* @param IO_Pin: the IO interrupt to be cleared, could be:
- * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
+ * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23.
* @retval None
*/
void mfxstm32l152_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin)
@@ -929,7 +931,7 @@
/**
* @brief Enable the AF for aGPIO.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_IO_EnableAF(uint16_t DeviceAddr)
@@ -938,24 +940,24 @@
/* Get the current register value */
mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
-
+
/* Enable ALTERNATE functions */
- /* AGPIO[0..3] can be either IDD or GPIO */
- /* AGPIO[4..7] can be either TS or GPIO */
+ /* AGPIO[0..3] can be either IDD or GPIO */
+ /* AGPIO[4..7] can be either TS or GPIO */
/* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
- /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
+ /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
/* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */
/* if however IDD or TS are not connected then set it on gives more GPIOs availability */
/* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */
- mode |= MFXSTM32L152_ALTERNATE_GPIO_EN;
-
- /* Write the new register value */
+ mode |= MFXSTM32L152_ALTERNATE_GPIO_EN;
+
+ /* Write the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
}
/**
* @brief Disable the AF for aGPIO.
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_IO_DisableAF(uint16_t DeviceAddr)
@@ -964,20 +966,20 @@
/* Get the current register value */
mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
-
+
/* Enable ALTERNATE functions */
- /* AGPIO[0..3] can be either IDD or GPIO */
- /* AGPIO[4..7] can be either TS or GPIO */
+ /* AGPIO[0..3] can be either IDD or GPIO */
+ /* AGPIO[4..7] can be either TS or GPIO */
/* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */
- /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
+ /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */
/* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */
/* if however IDD or TS are not connected then set it on gives more GPIOs availability */
/* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */
- mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN;
-
- /* Write the new register value */
+ mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN;
+
+ /* Write the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
-
+
}
@@ -996,29 +998,29 @@
/* Get the current register value */
mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL);
-
- /* Set the Functionalities to be Enabled */
- mode |= MFXSTM32L152_TS_EN;
-
- /* Set the new register value */
+
+ /* Set the Functionalities to be Enabled */
+ mode |= MFXSTM32L152_TS_EN;
+
+ /* Set the new register value */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode);
-
+
/* Wait for 2 ms */
- MFX_IO_Delay(2);
-
+ MFX_IO_Delay(2);
+
/* Select 2 nF filter capacitor */
- /* Configuration:
+ /* Configuration:
- Touch average control : 4 samples
- Touch delay time : 500 uS
- - Panel driver setting time: 500 uS
+ - Panel driver setting time: 500 uS
*/
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_SETTLING, 0x32);
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_TOUCH_DET_DELAY, 0x5);
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_AVE, 0x04);
-
+
/* Configure the Touch FIFO threshold: single point reading */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, 0x01);
-
+
/* Clear the FIFO memory content. */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, MFXSTM32L152_TS_CLEAR_FIFO);
@@ -1026,8 +1028,8 @@
- No window tracking index
*/
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_TRACK, 0x00);
-
-
+
+
/* Clear all the IT status pending bits if any */
mfxstm32l152_IO_ClearIT(DeviceAddr, 0xFFFFFF);
@@ -1044,10 +1046,10 @@
{
uint8_t state;
uint8_t ret = 0;
-
+
state = MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_STA);
state = ((state & (uint8_t)MFXSTM32L152_TS_CTRL_STATUS) == (uint8_t)MFXSTM32L152_TS_CTRL_STATUS);
-
+
if(state > 0)
{
if(MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_LEVEL) > 0)
@@ -1055,7 +1057,7 @@
ret = 1;
}
}
-
+
return ret;
}
@@ -1063,7 +1065,7 @@
* @brief Get the touch screen X and Y positions values
* @param DeviceAddr: Device address on communication Bus.
* @param X: Pointer to X position value
- * @param Y: Pointer to Y position value
+ * @param Y: Pointer to Y position value
* @retval None.
*/
void mfxstm32l152_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
@@ -1071,10 +1073,10 @@
uint8_t data_xy[3];
MFX_IO_ReadMultiple(DeviceAddr, MFXSTM32L152_TS_XY_DATA, data_xy, sizeof(data_xy)) ;
-
+
/* Calculate positions values */
- *X = (data_xy[1]<<4) + (data_xy[0]>>4);
- *Y = (data_xy[2]<<4) + (data_xy[0]&4);
+ *X = (data_xy[1]<<4) + (data_xy[0]>>4);
+ *Y = (data_xy[2]<<4) + (data_xy[0]&4);
/* Reset the FIFO memory content. */
MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, MFXSTM32L152_TS_CLEAR_FIFO);
@@ -1082,31 +1084,31 @@
/**
* @brief Configure the selected source to generate a global interrupt or not
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_TS_EnableIT(uint16_t DeviceAddr)
{
MFX_IO_ITConfig();
-
+
/* Enable global TS IT source */
mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_TS_DET);
}
/**
* @brief Configure the selected source to generate a global interrupt or not
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_TS_DisableIT(uint16_t DeviceAddr)
{
/* Disable global TS IT source */
- mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_TS_DET);
+ mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_TS_DET);
}
/**
* @brief Configure the selected source to generate a global interrupt or not
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval TS interrupts status
*/
uint8_t mfxstm32l152_TS_ITStatus(uint16_t DeviceAddr)
@@ -1117,7 +1119,7 @@
/**
* @brief Configure the selected source to generate a global interrupt or not
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @retval None
*/
void mfxstm32l152_TS_ClearIT(uint16_t DeviceAddr)
@@ -1301,7 +1303,7 @@
/**
* @brief Get Last shunt used for measurement
* @param DeviceAddr: Device address on communication Bus
- * @retval Last shunt used
+ * @retval Last shunt used
*/
uint8_t mfxstm32l152_IDD_GetShuntUsed(uint16_t DeviceAddr)
{
@@ -1433,13 +1435,13 @@
*/
uint8_t mfxstm32l152_ReadReg(uint16_t DeviceAddr, uint8_t RegAddr)
{
- /* Get the current register value */
+ /* Get the current register value */
return(MFX_IO_Read((uint8_t) DeviceAddr, RegAddr));
}
void mfxstm32l152_WriteReg(uint16_t DeviceAddr, uint8_t RegAddr, uint8_t Value)
{
- /* set the current register value */
+ /* set the current register value */
MFX_IO_Write((uint8_t) DeviceAddr, RegAddr, Value);
}
@@ -1448,23 +1450,23 @@
/* ------------------------------------------------------------------ */
/**
* @brief Check if the device instance of the selected address is already registered
- * and return its index
+ * and return its index
* @param DeviceAddr: Device address on communication Bus.
* @retval Index of the device instance if registered, 0xFF if not.
*/
static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr)
{
uint8_t idx = 0;
-
+
/* Check all the registered instances */
for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++)
{
if(mfxstm32l152[idx] == DeviceAddr)
{
- return idx;
+ return idx;
}
}
-
+
return 0xFF;
}
@@ -1476,7 +1478,7 @@
static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr)
{
uint8_t idx = 0;
-
+
/* Check for all the registered instances */
for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++)
{
@@ -1491,7 +1493,7 @@
/**
* @brief Internal routine
- * @param DeviceAddr: Device address on communication Bus.
+ * @param DeviceAddr: Device address on communication Bus.
* @param RegisterAddr: Register Address
* @param PinPosition: Pin [0:23]
* @param PinValue: 0/1
@@ -1506,79 +1508,79 @@
pin_8_15 = PinPosition >> 8;
pin_8_15 = pin_8_15 & 0x00ff;
pin_16_23 = PinPosition >> 16;
-
+
if (pin_0_7)
- {
- /* Get the current register value */
+ {
+ /* Get the current register value */
tmp = MFX_IO_Read(DeviceAddr, RegisterAddr);
-
+
/* Set the selected pin direction */
if (PinValue != 0)
{
tmp |= (uint8_t)pin_0_7;
- }
- else
+ }
+ else
{
tmp &= ~(uint8_t)pin_0_7;
}
-
+
/* Set the new register value */
MFX_IO_Write(DeviceAddr, RegisterAddr, tmp);
}
if (pin_8_15)
{
- /* Get the current register value */
+ /* Get the current register value */
tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+1);
-
+
/* Set the selected pin direction */
if (PinValue != 0)
{
tmp |= (uint8_t)pin_8_15;
- }
- else
+ }
+ else
{
tmp &= ~(uint8_t)pin_8_15;
}
-
+
/* Set the new register value */
MFX_IO_Write(DeviceAddr, RegisterAddr+1, tmp);
- }
+ }
if (pin_16_23)
{
- /* Get the current register value */
+ /* Get the current register value */
tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+2);
-
+
/* Set the selected pin direction */
if (PinValue != 0)
{
tmp |= (uint8_t)pin_16_23;
- }
- else
+ }
+ else
{
tmp &= ~(uint8_t)pin_16_23;
}
-
+
/* Set the new register value */
MFX_IO_Write(DeviceAddr, RegisterAddr+2, tmp);
- }
+ }
}
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/