Initial commit
This commit is contained in:
commit
66c5a26d69
1145 changed files with 938088 additions and 0 deletions
|
@ -0,0 +1,3 @@
|
|||
# Copyright (c) 2020 STMicroelectronics
|
||||
|
||||
This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause).
|
|
@ -0,0 +1,63 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
<title>Release Notes for STM32G0C1E-EV Board drivers</title>
|
||||
<style type="text/css">
|
||||
code{white-space: pre-wrap;}
|
||||
span.smallcaps{font-variant: small-caps;}
|
||||
span.underline{text-decoration: underline;}
|
||||
div.column{display: inline-block; vertical-align: top; width: 50%;}
|
||||
</style>
|
||||
<link rel="stylesheet" href="_htmresc/mini-st_2020.css" />
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
||||
<![endif]-->
|
||||
<link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-4">
|
||||
<center>
|
||||
<h1 id="release-notes-for-stm32g0c1e-ev-board-drivers">Release Notes for <mark>STM32G0C1E-EV Board drivers</mark></h1>
|
||||
<p>Copyright © 2020 STMicroelectronics<br />
|
||||
</p>
|
||||
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo_2020.png" alt="ST logo" /></a>
|
||||
</center>
|
||||
<h1 id="license">License</h1>
|
||||
<p>This software component is licensed by ST under BSD 3-Clause license, the “License”; You may not use this component except in compliance with the License. You may obtain a copy of the License at:</p>
|
||||
<p><a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a></p>
|
||||
<h1 id="purpose">Purpose</h1>
|
||||
<p>This driver provides a set of functions to manage:</p>
|
||||
<ul>
|
||||
<li>LEDs, Buttons, SD card, temperature sensor, LCD, MUX and PWR on STM32G0C1E-EV board from STMicroelectronics</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-8">
|
||||
<h1 id="update-history">Update History</h1>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section1" checked aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0.RC1 / 13-October-2020</label>
|
||||
<div>
|
||||
<h2 id="main-changes">Main Changes</h2>
|
||||
<h3 id="first-release">First release</h3>
|
||||
<h2 id="contents">Contents</h2>
|
||||
<p>First official release of STM32G0C1E-EV board drivers for STM32Cube G0 FW package.</p>
|
||||
<h2 id="supported-devices-and-boards">Supported Devices and Boards</h2>
|
||||
<ul>
|
||||
<li>STM32G0C1xx/B1xx devices</li>
|
||||
<li>STM32G0C1E-EV mother board (<strong>MB1581B</strong>)</li>
|
||||
<li>“Legacy” daughter board (MB1351A)</li>
|
||||
<li>USBPD daughter board (MB1352C)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="sticky">
|
||||
<p>For complete documentation on STM32G0xx, visit: [<a href="http://www.st.com/stm32g0">www.st.com/stm32g0</a>]</p>
|
||||
<em>This release note uses up to date web standards and, for this reason, should not be opened with Internet Explorer but preferably with popular browsers such as Google Chrome, Mozilla Firefox, Opera or Microsoft Edge.</em>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 4 KiB |
File diff suppressed because it is too large
Load diff
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
1626
USB-PD_Provider_1port/Drivers/BSP/STM32G0C1E-EV/stm32g0c1e_eval.c
Normal file
1626
USB-PD_Provider_1port/Drivers/BSP/STM32G0C1E-EV/stm32g0c1e_eval.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,563 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains definitions for STM32G0C1E-EV's Leds, push-buttons
|
||||
* and COM port hardware resources.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_H
|
||||
#define STM32G0C1E_EVAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL STM32G0C1E EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0xx_hal.h"
|
||||
#include <stdio.h>
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Common STM32G0C1E EVAL Common
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Private_Constants Private Constants
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Private_Variables Private Variables
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Exported_Types Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief LED Types Definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
LED1 = 0,
|
||||
LED2 = 1,
|
||||
LED3 = 2,
|
||||
LED4 = 3,
|
||||
/* Color led aliases */
|
||||
LED_GREEN = LED1,
|
||||
LED_ORANGE = LED2,
|
||||
LED_RED = LED3,
|
||||
LED_BLUE = LED4
|
||||
} Led_TypeDef;
|
||||
|
||||
/**
|
||||
* @brief BUTTON Types Definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_TAMPER = 0
|
||||
} Button_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_MODE_GPIO = 0,
|
||||
BUTTON_MODE_EXTI = 1
|
||||
} ButtonMode_TypeDef;
|
||||
|
||||
/**
|
||||
* @brief JOYSTICK Types Definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
JOY_SEL = 0,
|
||||
JOY_DOWN = 1,
|
||||
JOY_LEFT = 2,
|
||||
JOY_RIGHT = 3,
|
||||
JOY_UP = 4,
|
||||
JOY_NONE = 5
|
||||
} JOYState_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
JOY_MODE_GPIO = 0,
|
||||
JOY_MODE_EXTI = 1
|
||||
} JOYMode_TypeDef;
|
||||
|
||||
/**
|
||||
* @brief COM Types Definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
COM1 = 0
|
||||
} COM_TypeDef;
|
||||
|
||||
/**
|
||||
* @brief Daughter Board (DB) Types Definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
DB_ID_NONE = 0,
|
||||
DB_ID_LEGACY,
|
||||
DB_ID_UCPD_AB,
|
||||
DB_ID_UCPD_C
|
||||
} DBId_TypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Exported_Constants Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Define for STM32G0C1E_EVAL board
|
||||
*/
|
||||
#define EVAL_BOARD_REVISION ((uint8_t *)"REV. B")
|
||||
|
||||
/** @defgroup STM32G0C1E_EV_LED STM32G0C1E-EV LED
|
||||
* @{
|
||||
*/
|
||||
#define LEDn 4
|
||||
|
||||
#define LED1_PIN GPIO_PIN_5 /* PD.05 */
|
||||
#define LED1_GPIO_PORT GPIOD
|
||||
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
#define LED2_PIN GPIO_PIN_6 /* PD.06 */
|
||||
#define LED2_GPIO_PORT GPIOD
|
||||
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
#define LED3_PIN GPIO_PIN_8 /* PD.08 */
|
||||
#define LED3_GPIO_PORT GPIOD
|
||||
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
#define LED4_PIN GPIO_PIN_9 /* PD.09 */
|
||||
#define LED4_GPIO_PORT GPIOD
|
||||
#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
#define LEDx_GPIO_CLK_ENABLE(__LED__) do { if((__LED__) == LED1) LED1_GPIO_CLK_ENABLE(); else \
|
||||
if((__LED__) == LED2) LED2_GPIO_CLK_ENABLE(); else \
|
||||
if((__LED__) == LED3) LED3_GPIO_CLK_ENABLE(); else \
|
||||
if((__LED__) == LED4) LED4_GPIO_CLK_ENABLE();} while(0)
|
||||
|
||||
#define LEDx_GPIO_CLK_DISABLE(__LED__) (((__LED__) == LED1) ? LED1_GPIO_CLK_DISABLE() :\
|
||||
((__LED__) == LED2) ? LED2_GPIO_CLK_DISABLE() :\
|
||||
((__LED__) == LED3) ? LED3_GPIO_CLK_DISABLE() :\
|
||||
((__LED__) == LED4) ? LED4_GPIO_CLK_DISABLE() : 0 )
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EV_BUTTON STM32G0C1E-EV BUTTON
|
||||
* @{
|
||||
*/
|
||||
#define JOYn 5
|
||||
#define BUTTONn 1
|
||||
|
||||
/**
|
||||
* @brief Tamper push-button
|
||||
*/
|
||||
#define TAMPER_BUTTON_PIN GPIO_PIN_13 /* PC.13 */
|
||||
#define TAMPER_BUTTON_GPIO_PORT GPIOC
|
||||
#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define TAMPER_BUTTON_EXTI_IRQn EXTI4_15_IRQn
|
||||
|
||||
#define TAMPERx_GPIO_CLK_ENABLE(__BUTTON__) do { if((__BUTTON__) == BUTTON_TAMPER) TAMPER_BUTTON_GPIO_CLK_ENABLE();} while(0)
|
||||
|
||||
#define TAMPERx_GPIO_CLK_DISABLE(__BUTTON__) (((__BUTTON__) == BUTTON_TAMPER) ? TAMPER_BUTTON_GPIO_CLK_DISABLE(): 0 )
|
||||
|
||||
/**
|
||||
* @brief Joystick Right push-button
|
||||
*/
|
||||
#define RIGHT_JOY_PIN GPIO_PIN_7 /* PC.07 */
|
||||
#define RIGHT_JOY_GPIO_PORT GPIOC
|
||||
#define RIGHT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define RIGHT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define RIGHT_JOY_EXTI_IRQn EXTI4_15_IRQn
|
||||
|
||||
/**
|
||||
* @brief Joystick Left push-button
|
||||
*/
|
||||
#define LEFT_JOY_PIN GPIO_PIN_8 /* PC.08 */
|
||||
#define LEFT_JOY_EXTI_IRQn EXTI4_15_IRQn
|
||||
#define LEFT_JOY_GPIO_PORT GPIOC
|
||||
#define LEFT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define LEFT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
/**
|
||||
* @brief Joystick Up push-button
|
||||
*/
|
||||
#define UP_JOY_PIN GPIO_PIN_2 /* PC.02 */
|
||||
#define UP_JOY_GPIO_PORT GPIOC
|
||||
#define UP_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define UP_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define UP_JOY_EXTI_IRQn EXTI2_3_IRQn
|
||||
|
||||
/**
|
||||
* @brief Joystick Down push-button
|
||||
*/
|
||||
#define DOWN_JOY_PIN GPIO_PIN_3 /* PC.03 */
|
||||
#define DOWN_JOY_EXTI_IRQn EXTI2_3_IRQn
|
||||
#define DOWN_JOY_GPIO_PORT GPIOC
|
||||
#define DOWN_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define DOWN_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
|
||||
/**
|
||||
* @brief Joystick Sel push-button
|
||||
*/
|
||||
#define SEL_JOY_PIN GPIO_PIN_0 /* PA.00 */
|
||||
#define SEL_JOY_GPIO_PORT GPIOA
|
||||
#define SEL_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
#define SEL_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
|
||||
#define SEL_JOY_EXTI_IRQn EXTI0_1_IRQn
|
||||
|
||||
#define JOYx_GPIO_CLK_ENABLE(__JOY__) do { if((__JOY__) == JOY_SEL) SEL_JOY_GPIO_CLK_ENABLE(); else \
|
||||
if((__JOY__) == JOY_DOWN) DOWN_JOY_GPIO_CLK_ENABLE(); else \
|
||||
if((__JOY__) == JOY_LEFT) LEFT_JOY_GPIO_CLK_ENABLE(); else \
|
||||
if((__JOY__) == JOY_RIGHT) RIGHT_JOY_GPIO_CLK_ENABLE(); else \
|
||||
if((__JOY__) == JOY_UP) UP_JOY_GPIO_CLK_ENABLE();} while(0)
|
||||
|
||||
#define JOYx_GPIO_CLK_DISABLE(__JOY__) (((__JOY__) == JOY_SEL) ? SEL_JOY_GPIO_CLK_DISABLE() :\
|
||||
((__JOY__) == JOY_DOWN) ? DOWN_JOY_GPIO_CLK_DISABLE() :\
|
||||
((__JOY__) == JOY_LEFT) ? LEFT_JOY_GPIO_CLK_DISABLE() :\
|
||||
((__JOY__) == JOY_RIGHT) ? RIGHT_JOY_GPIO_CLK_DISABLE() :\
|
||||
((__JOY__) == JOY_UP) ? UP_JOY_GPIO_CLK_DISABLE() : 0 )
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EV_COM STM32G0C1E-EV COM
|
||||
* @{
|
||||
*/
|
||||
#define COMn 1
|
||||
|
||||
/**
|
||||
* @brief Definition for COM port1, connected to USART1
|
||||
*/
|
||||
#define EVAL_COM1 USART1
|
||||
#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
|
||||
#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
|
||||
|
||||
#define EVAL_COM1_TX_PIN GPIO_PIN_4 /* PC.04 */
|
||||
#define EVAL_COM1_TX_GPIO_PORT GPIOC
|
||||
#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define EVAL_COM1_TX_AF GPIO_AF1_USART1
|
||||
|
||||
#define EVAL_COM1_RX_PIN GPIO_PIN_5 /* PC.05 */
|
||||
#define EVAL_COM1_RX_GPIO_PORT GPIOC
|
||||
#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define EVAL_COM1_RX_AF GPIO_AF1_USART1
|
||||
|
||||
#define EVAL_COM1_CTS_PIN GPIO_PIN_11 /* PA.11 */
|
||||
#define EVAL_COM1_CTS_GPIO_PORT GPIOA
|
||||
#define EVAL_COM1_CTS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
#define EVAL_COM1_CTS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
|
||||
#define EVAL_COM1_CTS_AF GPIO_AF1_USART1
|
||||
|
||||
#define EVAL_COM1_RTS_PIN GPIO_PIN_12 /* PA.12 */
|
||||
#define EVAL_COM1_RTS_GPIO_PORT GPIOA
|
||||
#define EVAL_COM1_RTS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
#define EVAL_COM1_RTS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
|
||||
#define EVAL_COM1_RTS_AF GPIO_AF1_USART1
|
||||
|
||||
#define EVAL_COM1_IRQn USART1_IRQn
|
||||
|
||||
#define COMx_CLK_ENABLE(__COM__) do { if((__COM__) == COM1) EVAL_COM1_CLK_ENABLE();} while(0)
|
||||
#define COMx_CLK_DISABLE(__COM__) (((__COM__) == COM1) ? EVAL_COM1_CLK_DISABLE() : 0)
|
||||
|
||||
#define COMx_TX_GPIO_CLK_ENABLE(__COM__) do { if((__COM__) == COM1) EVAL_COM1_TX_GPIO_CLK_ENABLE();} while(0)
|
||||
#define COMx_TX_GPIO_CLK_DISABLE(__COM__) (((__COM__) == COM1) ? EVAL_COM1_TX_GPIO_CLK_DISABLE() : 0)
|
||||
|
||||
#define COMx_RX_GPIO_CLK_ENABLE(__COM__) do { if((__COM__) == COM1) EVAL_COM1_RX_GPIO_CLK_ENABLE();} while(0)
|
||||
#define COMx_RX_GPIO_CLK_DISABLE(__COM__) (((__COM__) == COM1) ? EVAL_COM1_RX_GPIO_CLK_DISABLE() : 0)
|
||||
|
||||
#define COMx_CTS_GPIO_CLK_ENABLE(__COM__) do { if((__COM__) == COM1) EVAL_COM1_CTS_GPIO_CLK_ENABLE();} while(0)
|
||||
#define COMx_CTS_GPIO_CLK_DISABLE(__COM__) (((__COM__) == COM1) ? EVAL_COM1_CTS_GPIO_CLK_DISABLE() : 0)
|
||||
|
||||
#define COMx_RTS_GPIO_CLK_ENABLE(__COM__) do { if((__COM__) == COM1) EVAL_COM1_RTS_GPIO_CLK_ENABLE();} while(0)
|
||||
#define COMx_RTS_GPIO_CLK_DISABLE(__COM__) (((__COM__) == COM1) ? EVAL_COM1_RTS_GPIO_CLK_DISABLE() : 0)
|
||||
|
||||
#if defined(HAL_I2C_MODULE_ENABLED)
|
||||
/*##################### I2Cx ###################################*/
|
||||
/* User can use this section to tailor I2Cx instance used and associated resources */
|
||||
/* Definition for I2C1 Pins */
|
||||
#define EVAL_I2C1 I2C1
|
||||
#define EVAL_I2C1_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
|
||||
#define EVAL_I2C1_CLK_DISABLE() __HAL_RCC_I2C1_CLK_DISABLE()
|
||||
#define EVAL_I2C1_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET()
|
||||
#define EVAL_I2C1_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET()
|
||||
|
||||
#define EVAL_I2C1_SCL_PIN GPIO_PIN_6 /* PB.6 */
|
||||
#define EVAL_I2C1_SDA_PIN GPIO_PIN_7 /* PB.7 */
|
||||
|
||||
#define EVAL_I2C1_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define EVAL_I2C1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define EVAL_I2C1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define EVAL_I2C1_SCL_SDA_AF GPIO_AF6_I2C1
|
||||
|
||||
/* Definition for I2C2 Pins */
|
||||
#define EVAL_I2C2 I2C2
|
||||
#define EVAL_I2C2_CLK_ENABLE() __HAL_RCC_I2C2_CLK_ENABLE()
|
||||
#define EVAL_I2C2_CLK_DISABLE() __HAL_RCC_I2C2_CLK_DISABLE()
|
||||
#define EVAL_I2C2_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET()
|
||||
#define EVAL_I2C2_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET()
|
||||
|
||||
#define EVAL_I2C2_SCL_PIN GPIO_PIN_13 /* PB.13 */
|
||||
#define EVAL_I2C2_SDA_PIN GPIO_PIN_14 /* PB.14 */
|
||||
|
||||
#define EVAL_I2C2_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define EVAL_I2C2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define EVAL_I2C2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define EVAL_I2C2_AF GPIO_AF6_I2C2
|
||||
|
||||
/* Definition for I2C2 NVIC */
|
||||
#define EVAL_I2C2_IRQn I2C2_IRQn
|
||||
|
||||
/* Maximum Timeout values for flags waiting loops. These timeouts are not based
|
||||
on accurate values, they just guarantee that the application will not remain
|
||||
stuck if the I2C communication is corrupted.
|
||||
You may modify these timeout values depending on CPU frequency and application
|
||||
conditions (interrupts routines ...). */
|
||||
#define EVAL_I2C1_TIMEOUT_MAX 1000
|
||||
#define EVAL_I2C2_TIMEOUT_MAX 1000
|
||||
|
||||
/* I2C TIMING is calculated in case of the I2C Clock source is the SYSCLK = 48 MHz */
|
||||
/* Set TIMING to 0x00E0D3FF to reach 100 KHz speed (Rise time = 50ns, Fall time = 10ns) */
|
||||
#define I2C2_TIMING 0x00E0D3FF
|
||||
#define I2C1_TIMING 0x00E0D3FF
|
||||
|
||||
/* MUX 1 - USB Type-C Crossbar Switch I2C address (0b1000100x) */
|
||||
#define MUX_1_TYPEC_SWITCH_I2C_ADDRESS 0x88U
|
||||
|
||||
/* MUX 1 - DisplayPort Linear Redriver I2C address (0b1000100x) */
|
||||
#define MUX_1_DP_REDRIVER_I2C_ADDRESS 0x88U
|
||||
|
||||
/* MUX 2 - USB Type-C Crossbar Switch I2C address (0b0110000x) */
|
||||
#define MUX_2_TYPEC_SWITCH_I2C_ADDRESS 0x60U
|
||||
|
||||
/* MUX 2 - DisplayPort Linear Redriver I2C address (0b0000000x) */
|
||||
#define MUX_2_DP_REDRIVER_I2C_ADDRESS 0x00U
|
||||
|
||||
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||
|
||||
#if defined(HAL_SPI_MODULE_ENABLED)
|
||||
/**
|
||||
* @brief Definition for SPI Interface pins (SPI1 used)
|
||||
*/
|
||||
#define EVAL_SPIx SPI1
|
||||
#define EVAL_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
|
||||
#define EVAL_SPIx_CLK_DISABLE() __HAL_RCC_SPI1_CLK_DISABLE()
|
||||
#define EVAL_SPIx_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET()
|
||||
#define EVAL_SPIx_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET()
|
||||
|
||||
#define EVAL_SPIx_SCK_PIN GPIO_PIN_3 /* PB.03 */
|
||||
#define EVAL_SPIx_SCK_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define EVAL_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define EVAL_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define EVAL_SPIx_SCK_AF GPIO_AF0_SPI1
|
||||
|
||||
#define EVAL_SPIx_MISO_PIN GPIO_PIN_4 /* PB.04 */
|
||||
#define EVAL_SPIx_MISO_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define EVAL_SPIx_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define EVAL_SPIx_MISO_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define EVAL_SPIx_MISO_AF GPIO_AF0_SPI1
|
||||
|
||||
#define EVAL_SPIx_MOSI_PIN GPIO_PIN_7 /* PA.07 */
|
||||
#define EVAL_SPIx_MOSI_GPIO_PORT GPIOA /* GPIOA */
|
||||
#define EVAL_SPIx_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
#define EVAL_SPIx_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
|
||||
#define EVAL_SPIx_MOSI_AF GPIO_AF0_SPI1
|
||||
|
||||
#define EVAL_SPIx_MOSI_DIR_PIN GPIO_PIN_12 /* PC.12 */
|
||||
#define EVAL_SPIx_MOSI_DIR_GPIO_PORT GPIOC /* GPIOC */
|
||||
#define EVAL_SPIx_MOSI_DIR_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define EVAL_SPIx_MOSI_DIR_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
|
||||
/* Maximum Timeout values for flags waiting loops. These timeouts are not based
|
||||
on accurate values, they just guarantee that the application will not remain
|
||||
stuck if the SPI communication is corrupted.
|
||||
You may modify these timeout values depending on CPU frequency and application
|
||||
conditions (interrupts routines ...). */
|
||||
#define EVAL_SPIx_TIMEOUT_MAX 1000
|
||||
|
||||
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_COMPONENT STM32G0C1E_EVAL COMPONENT
|
||||
* @{
|
||||
*/
|
||||
/*##################### LCD ###################################*/
|
||||
/* Chip Select macro definition */
|
||||
#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_RESET)
|
||||
#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_SET)
|
||||
/**
|
||||
* @brief LCD Control pins
|
||||
*/
|
||||
#define LCD_NCS_PIN GPIO_PIN_8 /* PB. 08*/
|
||||
#define LCD_NCS_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define LCD_NCS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define LCD_NCS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
|
||||
|
||||
/*##################### SD ###################################*/
|
||||
/* Chip Select macro definition */
|
||||
#define SD_CS_LOW() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_RESET)
|
||||
#define SD_CS_HIGH() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_SET)
|
||||
/**
|
||||
* @brief SD card Control pin
|
||||
*/
|
||||
#define SD_CS_PIN GPIO_PIN_1 /* PD.01 */
|
||||
#define SD_CS_GPIO_PORT GPIOD /* GPIOD */
|
||||
#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
/**
|
||||
* @brief SD Detect Interface pins
|
||||
*/
|
||||
#define SD_DETECT_PIN GPIO_PIN_9 /* PC.09 */
|
||||
#define SD_DETECT_GPIO_PORT GPIOC /* GPIOC */
|
||||
#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
#define SD_DETECT_EXTI_IRQn EXTI4_15_IRQn
|
||||
|
||||
|
||||
/*##################### HDMI-CEC ###################################*/
|
||||
/**
|
||||
* @brief I2C HDMI CEC Interface pins
|
||||
*/
|
||||
#define HDMI_CEC_HPD_SINK_PIN GPIO_PIN_2 /* PD.02 */
|
||||
#define HDMI_CEC_HPD_SINK_GPIO_PORT GPIOD
|
||||
#define HDMI_CEC_HPD_SINK_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define HDMI_CEC_HPD_SINK_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
#define HDMI_CEC_HPD_SOURCE_PIN GPIO_PIN_6 /* PC.06 */
|
||||
#define HDMI_CEC_HPD_SOURCE_GPIO_PORT GPIOC
|
||||
#define HDMI_CEC_HPD_SOURCE_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define HDMI_CEC_HPD_SOURCE_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
|
||||
#define HDMI_CEC_LINE_PIN GPIO_PIN_10 /* PB.10 */
|
||||
#define HDMI_CEC_LINE_GPIO_PORT GPIOB
|
||||
#define HDMI_CEC_LINE_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define HDMI_CEC_LINE_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define HDMI_CEC_LINE_AF GPIO_AF0_CEC
|
||||
#define HDMI_CEC_IRQn CEC_IRQn
|
||||
|
||||
/* HDMI-CEC hardware I2C address */
|
||||
#define HDMI_CEC_I2C_ADDRESS 0xA0
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_DB STM32G0C1E_EVAL DAUGHTER BOARD
|
||||
* @{
|
||||
*/
|
||||
#if defined(HAL_ADC_MODULE_ENABLED)
|
||||
/**
|
||||
* @brief Daughter Board detection pin
|
||||
*/
|
||||
#define DB_DETECT_PIN GPIO_PIN_11 /* PB.11 */
|
||||
#define DB_DETECT_GPIO_PORT GPIOB /* GPIOB */
|
||||
#define DB_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define DB_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
|
||||
#define DB_ADC ADC1
|
||||
#define DB_ADC_CLK_ENABLE() __HAL_RCC_ADC_CLK_ENABLE();
|
||||
#define DB_ADC_CLK_DISABLE() __HAL_RCC_ADC_CLK_DISABLE();
|
||||
|
||||
#define DB_ADC_CHANNEL ADC_CHANNEL_15
|
||||
|
||||
#endif /* HAL_ADC_MODULE_ENABLED*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_Exported_Functions Exported Functions
|
||||
* @{
|
||||
*/
|
||||
uint32_t BSP_GetVersion(void);
|
||||
#if defined(_GUI_INTERFACE)
|
||||
const uint8_t* BSP_GetHWBoardVersionName(void);
|
||||
const uint8_t* BSP_GetPDTypeName(void);
|
||||
#endif /* _GUI_INTERFACE */
|
||||
void BSP_LED_Init(Led_TypeDef Led);
|
||||
void BSP_LED_DeInit(Led_TypeDef Led);
|
||||
void BSP_LED_On(Led_TypeDef Led);
|
||||
void BSP_LED_Off(Led_TypeDef Led);
|
||||
void BSP_LED_Toggle(Led_TypeDef Led);
|
||||
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
|
||||
uint32_t BSP_PB_GetState(Button_TypeDef Button);
|
||||
uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode);
|
||||
void BSP_JOY_DeInit(void);
|
||||
JOYState_TypeDef BSP_JOY_GetState(void);
|
||||
#if defined(HAL_UART_MODULE_ENABLED)
|
||||
void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef* huart);
|
||||
#endif /* HAL_UART_MODULE_ENABLED */
|
||||
#if defined(HAL_ADC_MODULE_ENABLED)
|
||||
uint8_t BSP_DB_GetId(DBId_TypeDef *pDaughterBoardId);
|
||||
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,896 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_lcd.c
|
||||
* @author MCD Application Team
|
||||
* @brief This file includes the driver for Liquid Crystal Display modules
|
||||
* mounted on STM32G0C1E-EV evaluation board.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
@verbatim
|
||||
==============================================================================
|
||||
##### How to use this driver #####
|
||||
==============================================================================
|
||||
[..]
|
||||
(#) This driver is used to drive indirectly an LCD TFT.
|
||||
(#) This driver supports AM240320LGTNQW00H (HX8347D) LCD mounted on MB895 daughter board
|
||||
(#) The HX8347D components driver MUST be included with this driver.
|
||||
|
||||
(#) Initialization steps:
|
||||
(++) Initialize the LCD using the LCD_Init() function.
|
||||
|
||||
(#) Display on LCD
|
||||
(++) Clear the whole LCD using the LCD_Clear() function or only one specified
|
||||
string line using the LCD_ClearStringLine() function.
|
||||
(++) Display a character on the specified line and column using the LCD_DisplayChar()
|
||||
function or a complete string line using the LCD_DisplayStringAtLine() function.
|
||||
(++) Display a string line on the specified position (x,y in pixel) and align mode
|
||||
using the LCD_DisplayStringAtLine() function.
|
||||
(++) Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap)
|
||||
on LCD using a set of functions.
|
||||
@endverbatim
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0c1e_eval_lcd.h"
|
||||
#include "../../../Utilities/Fonts/fonts.h"
|
||||
#include "../../../Utilities/Fonts/font24.c"
|
||||
#include "../../../Utilities/Fonts/font20.c"
|
||||
#include "../../../Utilities/Fonts/font16.c"
|
||||
#include "../../../Utilities/Fonts/font12.c"
|
||||
#include "../../../Utilities/Fonts/font8.c"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_LCD
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Private_Constants Private Constants
|
||||
* @{
|
||||
*/
|
||||
#define POLY_X(Z) ((int32_t)((pPoints + (Z))->X))
|
||||
#define POLY_Y(Z) ((int32_t)((pPoints + (Z))->Y))
|
||||
|
||||
#define MAX_HEIGHT_FONT 17
|
||||
#define MAX_WIDTH_FONT 24
|
||||
#define OFFSET_BITMAP 54
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Private_Macros Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define ABS(X) ((X) > 0 ? (X) : -(X))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Private_Variables Private Variables
|
||||
* @{
|
||||
*/
|
||||
LCD_DrawPropTypeDef DrawProp;
|
||||
|
||||
static LCD_DrvTypeDef *lcd_drv;
|
||||
|
||||
/* Max size of bitmap will based on a font24 (17x24) */
|
||||
static uint8_t bitmap[MAX_HEIGHT_FONT*MAX_WIDTH_FONT*2+OFFSET_BITMAP] = {0};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Private_Functions Private Functions
|
||||
* @{
|
||||
*/
|
||||
static void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *pChar);
|
||||
static void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_LCD_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initializes the LCD.
|
||||
* @retval LCD state
|
||||
*/
|
||||
uint8_t BSP_LCD_Init(void)
|
||||
{
|
||||
/* Default value for draw propriety */
|
||||
DrawProp.BackColor = 0xFFFF;
|
||||
DrawProp.pFont = &LCD_DEFAULT_FONT;
|
||||
DrawProp.TextColor = 0x0000;
|
||||
|
||||
/*HX8347D_ID connected*/
|
||||
lcd_drv = &hx8347d_drv;
|
||||
|
||||
/* LCD Init */
|
||||
lcd_drv->Init();
|
||||
|
||||
/* Initialize the font */
|
||||
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
|
||||
|
||||
return LCD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the LCD X size.
|
||||
* @retval Used LCD X size
|
||||
*/
|
||||
uint32_t BSP_LCD_GetXSize(void)
|
||||
{
|
||||
return(lcd_drv->GetLcdPixelWidth());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the LCD Y size.
|
||||
* @retval Used LCD Y size
|
||||
*/
|
||||
uint32_t BSP_LCD_GetYSize(void)
|
||||
{
|
||||
return(lcd_drv->GetLcdPixelHeight());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the LCD text color.
|
||||
* @retval Used text color.
|
||||
*/
|
||||
uint16_t BSP_LCD_GetTextColor(void)
|
||||
{
|
||||
return DrawProp.TextColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the LCD background color.
|
||||
* @retval Used background color
|
||||
*/
|
||||
uint16_t BSP_LCD_GetBackColor(void)
|
||||
{
|
||||
return DrawProp.BackColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the LCD text color.
|
||||
* @param Color: Text color code RGB(5-6-5)
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_SetTextColor(uint16_t Color)
|
||||
{
|
||||
DrawProp.TextColor = Color;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the LCD background color.
|
||||
* @param Color: Background color code RGB(5-6-5)
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_SetBackColor(uint16_t Color)
|
||||
{
|
||||
DrawProp.BackColor = Color;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the LCD text font.
|
||||
* @param pFonts: Font to be used
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_SetFont(sFONT *pFonts)
|
||||
{
|
||||
DrawProp.pFont = pFonts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the LCD text font.
|
||||
* @retval Used font
|
||||
*/
|
||||
sFONT *BSP_LCD_GetFont(void)
|
||||
{
|
||||
return DrawProp.pFont;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clears the whole LCD.
|
||||
* @param Color: Color of the background
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_Clear(uint16_t Color)
|
||||
{
|
||||
uint32_t counter = 0;
|
||||
|
||||
uint32_t color_backup = DrawProp.TextColor;
|
||||
DrawProp.TextColor = Color;
|
||||
|
||||
for(counter = 0; counter < BSP_LCD_GetYSize(); counter++)
|
||||
{
|
||||
BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize());
|
||||
}
|
||||
|
||||
DrawProp.TextColor = color_backup;
|
||||
BSP_LCD_SetTextColor(DrawProp.TextColor);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clears the selected line.
|
||||
* @param Line: Line to be cleared
|
||||
* This parameter can be one of the following values:
|
||||
* @arg 0..9: if the Current fonts is Font16x24
|
||||
* @arg 0..19: if the Current fonts is Font12x12 or Font8x12
|
||||
* @arg 0..29: if the Current fonts is Font8x8
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_ClearStringLine(uint16_t Line)
|
||||
{
|
||||
uint32_t colorbackup = DrawProp.TextColor;
|
||||
DrawProp.TextColor = DrawProp.BackColor;;
|
||||
|
||||
/* Draw a rectangle with background color */
|
||||
BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height);
|
||||
|
||||
DrawProp.TextColor = colorbackup;
|
||||
BSP_LCD_SetTextColor(DrawProp.TextColor);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays one character.
|
||||
* @param Xpos: Start column address
|
||||
* @param Ypos: Line where to display the character shape.
|
||||
* @param Ascii: Character ascii code
|
||||
* This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
|
||||
{
|
||||
LCD_DrawChar(Ypos, Xpos, &DrawProp.pFont->table[(Ascii-' ') *\
|
||||
DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays characters on the LCD.
|
||||
* @param Xpos: X position (in pixel)
|
||||
* @param Ypos: Y position (in pixel)
|
||||
* @param pText: Pointer to string to display on LCD
|
||||
* @param Mode: Display mode
|
||||
* This parameter can be one of the following values:
|
||||
* @arg CENTER_MODE
|
||||
* @arg RIGHT_MODE
|
||||
* @arg LEFT_MODE
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *pText, Line_ModeTypdef Mode)
|
||||
{
|
||||
uint16_t refcolumn = 1, counter = 0;
|
||||
uint32_t size = 0, ysize = 0;
|
||||
uint8_t *ptr = pText;
|
||||
|
||||
/* Get the text size */
|
||||
while (*ptr++) size ++ ;
|
||||
|
||||
/* Characters number per line */
|
||||
ysize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width);
|
||||
|
||||
switch (Mode)
|
||||
{
|
||||
case CENTER_MODE:
|
||||
{
|
||||
refcolumn = Xpos + ((ysize - size)* DrawProp.pFont->Width) / 2;
|
||||
break;
|
||||
}
|
||||
case LEFT_MODE:
|
||||
{
|
||||
refcolumn = Xpos;
|
||||
break;
|
||||
}
|
||||
case RIGHT_MODE:
|
||||
{
|
||||
refcolumn = Xpos + ((ysize - size)*DrawProp.pFont->Width);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
refcolumn = Xpos;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Send the string character by character on lCD */
|
||||
while ((*pText != 0) & (((BSP_LCD_GetXSize() - (counter*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width))
|
||||
{
|
||||
/* Display one character on LCD */
|
||||
BSP_LCD_DisplayChar(refcolumn, Ypos, *pText);
|
||||
/* Decrement the column position by 16 */
|
||||
refcolumn += DrawProp.pFont->Width;
|
||||
/* Point on the next character */
|
||||
pText++;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays a character on the LCD.
|
||||
* @param Line: Line where to display the character shape
|
||||
* This parameter can be one of the following values:
|
||||
* @arg 0..9: if the Current fonts is Font16x24
|
||||
* @arg 0..19: if the Current fonts is Font12x12 or Font8x12
|
||||
* @arg 0..29: if the Current fonts is Font8x8
|
||||
* @param pText: Pointer to string to display on LCD
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *pText)
|
||||
{
|
||||
BSP_LCD_DisplayStringAt(0, LINE(Line),pText, LEFT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads an LCD pixel.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @retval RGB pixel color
|
||||
*/
|
||||
uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos)
|
||||
{
|
||||
uint16_t ret = 0;
|
||||
|
||||
if(lcd_drv->ReadPixel != NULL)
|
||||
{
|
||||
ret = lcd_drv->ReadPixel(Xpos, Ypos);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws an horizontal line.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Length: Line length
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
|
||||
{
|
||||
uint32_t index = 0;
|
||||
|
||||
if(lcd_drv->DrawHLine != NULL)
|
||||
{
|
||||
lcd_drv->DrawHLine(DrawProp.TextColor, Ypos, Xpos, Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(index = 0; index < Length; index++)
|
||||
{
|
||||
BSP_LCD_DrawPixel((Ypos + index), Xpos, DrawProp.TextColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a vertical line.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Length: Line length
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
|
||||
{
|
||||
uint32_t index = 0;
|
||||
|
||||
if(lcd_drv->DrawVLine != NULL)
|
||||
{
|
||||
LCD_SetDisplayWindow(Ypos, Xpos, 1, Length);
|
||||
lcd_drv->DrawVLine(DrawProp.TextColor, Ypos, Xpos, Length);
|
||||
LCD_SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
|
||||
}
|
||||
else
|
||||
{
|
||||
for(index = 0; index < Length; index++)
|
||||
{
|
||||
BSP_LCD_DrawPixel(Ypos, Xpos + index, DrawProp.TextColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws an uni-line (between two points).
|
||||
* @param X1: Point 1 X position
|
||||
* @param Y1: Point 1 Y position
|
||||
* @param X2: Point 2 X position
|
||||
* @param Y2: Point 2 Y position
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawLine(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2)
|
||||
{
|
||||
int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
|
||||
yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
|
||||
curpixel = 0;
|
||||
|
||||
deltax = ABS(Y2 - Y1); /* The difference between the x's */
|
||||
deltay = ABS(X2 - X1); /* The difference between the y's */
|
||||
x = Y1; /* Start x off at the first pixel */
|
||||
y = X1; /* Start y off at the first pixel */
|
||||
|
||||
if (Y2 >= Y1) /* The x-values are increasing */
|
||||
{
|
||||
xinc1 = 1;
|
||||
xinc2 = 1;
|
||||
}
|
||||
else /* The x-values are decreasing */
|
||||
{
|
||||
xinc1 = -1;
|
||||
xinc2 = -1;
|
||||
}
|
||||
|
||||
if (X2 >= X1) /* The y-values are increasing */
|
||||
{
|
||||
yinc1 = 1;
|
||||
yinc2 = 1;
|
||||
}
|
||||
else /* The y-values are decreasing */
|
||||
{
|
||||
yinc1 = -1;
|
||||
yinc2 = -1;
|
||||
}
|
||||
|
||||
if (deltax >= deltay) /* There is at least one x-value for every y-value */
|
||||
{
|
||||
xinc1 = 0; /* Don't change the x when numerator >= denominator */
|
||||
yinc2 = 0; /* Don't change the y for every iteration */
|
||||
den = deltax;
|
||||
num = deltax / 2;
|
||||
numadd = deltay;
|
||||
numpixels = deltax; /* There are more x-values than y-values */
|
||||
}
|
||||
else /* There is at least one y-value for every x-value */
|
||||
{
|
||||
xinc2 = 0; /* Don't change the x for every iteration */
|
||||
yinc1 = 0; /* Don't change the y when numerator >= denominator */
|
||||
den = deltay;
|
||||
num = deltay / 2;
|
||||
numadd = deltax;
|
||||
numpixels = deltay; /* There are more y-values than x-values */
|
||||
}
|
||||
|
||||
for (curpixel = 0; curpixel <= numpixels; curpixel++)
|
||||
{
|
||||
BSP_LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */
|
||||
num += numadd; /* Increase the numerator by the top of the fraction */
|
||||
if (num >= den) /* Check if numerator >= denominator */
|
||||
{
|
||||
num -= den; /* Calculate the new numerator value */
|
||||
x += xinc1; /* Change the x as appropriate */
|
||||
y += yinc1; /* Change the y as appropriate */
|
||||
}
|
||||
x += xinc2; /* Change the x as appropriate */
|
||||
y += yinc2; /* Change the y as appropriate */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a rectangle.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Width: Rectangle width
|
||||
* @param Height: Rectangle height
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
|
||||
{
|
||||
/* Draw horizontal lines */
|
||||
BSP_LCD_DrawHLine(Xpos, Ypos, Width);
|
||||
BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width);
|
||||
|
||||
/* Draw vertical lines */
|
||||
BSP_LCD_DrawVLine(Xpos, Ypos, Height);
|
||||
BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a circle.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Radius: Circle radius
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
|
||||
{
|
||||
int32_t decision; /* Decision Variable */
|
||||
uint32_t curx; /* Current X Value */
|
||||
uint32_t cury; /* Current Y Value */
|
||||
|
||||
decision = 3 - (Radius << 1);
|
||||
curx = 0;
|
||||
cury = Radius;
|
||||
|
||||
while (curx <= cury)
|
||||
{
|
||||
BSP_LCD_DrawPixel((Ypos + curx), (Xpos - cury), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos - curx), (Xpos - cury), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos + cury), (Xpos - curx), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos - cury), (Xpos - curx), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos + curx), (Xpos + cury), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos - curx), (Xpos + cury), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos + cury), (Xpos + curx), DrawProp.TextColor);
|
||||
|
||||
BSP_LCD_DrawPixel((Ypos - cury), (Xpos + curx), DrawProp.TextColor);
|
||||
|
||||
/* Initialize the font */
|
||||
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
|
||||
|
||||
if (decision < 0)
|
||||
{
|
||||
decision += (curx << 2) + 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
decision += ((curx - cury) << 2) + 10;
|
||||
cury--;
|
||||
}
|
||||
curx++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws an poly-line (between many points).
|
||||
* @param pPoints: Pointer to the points array
|
||||
* @param PointCount: Number of points
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawPolygon(pPoint pPoints, uint16_t PointCount)
|
||||
{
|
||||
int16_t x = 0, y = 0;
|
||||
|
||||
if(PointCount < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BSP_LCD_DrawLine(pPoints->X, pPoints->Y, (pPoints+PointCount-1)->X, (pPoints+PointCount-1)->Y);
|
||||
|
||||
while(--PointCount)
|
||||
{
|
||||
x = pPoints->X;
|
||||
y = pPoints->Y;
|
||||
pPoints++;
|
||||
BSP_LCD_DrawLine(x, y, pPoints->X, pPoints->Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws an ellipse on LCD.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param XRadius: Ellipse X radius
|
||||
* @param YRadius: Ellipse Y radius
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
|
||||
{
|
||||
int x = 0, y = -XRadius, err = 2-2*YRadius, e2;
|
||||
float k = 0, rad1 = 0, rad2 = 0;
|
||||
|
||||
rad1 = YRadius;
|
||||
rad2 = XRadius;
|
||||
|
||||
k = (float)(rad2/rad1);
|
||||
|
||||
do {
|
||||
BSP_LCD_DrawPixel((Ypos-(uint16_t)(x/k)), (Xpos+y), DrawProp.TextColor);
|
||||
BSP_LCD_DrawPixel((Ypos+(uint16_t)(x/k)), (Xpos+y), DrawProp.TextColor);
|
||||
BSP_LCD_DrawPixel((Ypos+(uint16_t)(x/k)), (Xpos-y), DrawProp.TextColor);
|
||||
BSP_LCD_DrawPixel((Ypos-(uint16_t)(x/k)), (Xpos-y), DrawProp.TextColor);
|
||||
|
||||
e2 = err;
|
||||
if (e2 <= x) {
|
||||
err += ++x*2+1;
|
||||
if (-y == x && e2 <= y) e2 = 0;
|
||||
}
|
||||
if (e2 > y) err += ++y*2+1;
|
||||
}
|
||||
while (y <= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a bitmap picture loaded in the internal Flash (32 bpp).
|
||||
* @param Xpos: Bmp X position in the LCD
|
||||
* @param Ypos: Bmp Y position in the LCD
|
||||
* @param pBmp: Pointer to Bmp picture address in the internal Flash
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pBmp)
|
||||
{
|
||||
uint32_t height = 0, width = 0;
|
||||
|
||||
/* Read bitmap width */
|
||||
width = pBmp[18] + (pBmp[19] << 8) + (pBmp[20] << 16) + (pBmp[21] << 24);
|
||||
|
||||
/* Read bitmap height */
|
||||
height = pBmp[22] + (pBmp[23] << 8) + (pBmp[24] << 16) + (pBmp[25] << 24);
|
||||
|
||||
/* Remap Ypos, hx8347d works with inverted X in case of bitmap */
|
||||
/* X = 0, cursor is on Bottom corner */
|
||||
if(lcd_drv == &hx8347d_drv)
|
||||
{
|
||||
Ypos = BSP_LCD_GetYSize() - Ypos - height;
|
||||
}
|
||||
|
||||
LCD_SetDisplayWindow(Ypos, Xpos, width, height);
|
||||
|
||||
if(lcd_drv->DrawBitmap != NULL)
|
||||
{
|
||||
lcd_drv->DrawBitmap(Ypos, Xpos, pBmp);
|
||||
}
|
||||
LCD_SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a full rectangle.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Width: Rectangle width
|
||||
* @param Height: Rectangle height
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
|
||||
{
|
||||
BSP_LCD_SetTextColor(DrawProp.TextColor);
|
||||
do
|
||||
{
|
||||
BSP_LCD_DrawHLine(Xpos, Ypos++, Width);
|
||||
}
|
||||
while(Height--);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a full circle.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param Radius: Circle radius
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
|
||||
{
|
||||
int32_t decision; /* Decision Variable */
|
||||
uint32_t curx; /* Current X Value */
|
||||
uint32_t cury; /* Current Y Value */
|
||||
|
||||
decision = 3 - (Radius << 1);
|
||||
|
||||
curx = 0;
|
||||
cury = Radius;
|
||||
|
||||
BSP_LCD_SetTextColor(DrawProp.TextColor);
|
||||
|
||||
while (curx <= cury)
|
||||
{
|
||||
if(cury > 0)
|
||||
{
|
||||
BSP_LCD_DrawVLine(Xpos + curx, Ypos - cury, 2*cury);
|
||||
BSP_LCD_DrawVLine(Xpos - curx, Ypos - cury, 2*cury);
|
||||
}
|
||||
|
||||
if(curx > 0)
|
||||
{
|
||||
BSP_LCD_DrawVLine(Xpos - cury, Ypos - curx, 2*curx);
|
||||
BSP_LCD_DrawVLine(Xpos + cury, Ypos - curx, 2*curx);
|
||||
}
|
||||
if (decision < 0)
|
||||
{
|
||||
decision += (curx << 2) + 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
decision += ((curx - cury) << 2) + 10;
|
||||
cury--;
|
||||
}
|
||||
curx++;
|
||||
}
|
||||
|
||||
BSP_LCD_SetTextColor(DrawProp.TextColor);
|
||||
BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a full ellipse.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param XRadius: Ellipse X radius
|
||||
* @param YRadius: Ellipse Y radius
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
|
||||
{
|
||||
int x = 0, y = -XRadius, err = 2-2*YRadius, e2;
|
||||
float k = 0, rad1 = 0, rad2 = 0;
|
||||
|
||||
rad1 = YRadius;
|
||||
rad2 = XRadius;
|
||||
|
||||
k = (float)(rad2/rad1);
|
||||
|
||||
do
|
||||
{
|
||||
BSP_LCD_DrawVLine((Xpos+y), (Ypos-(uint16_t)(x/k)), (2*(uint16_t)(x/k) + 1));
|
||||
BSP_LCD_DrawVLine((Xpos-y), (Ypos-(uint16_t)(x/k)), (2*(uint16_t)(x/k) + 1));
|
||||
|
||||
e2 = err;
|
||||
if (e2 <= x)
|
||||
{
|
||||
err += ++x*2+1;
|
||||
if (-y == x && e2 <= y) e2 = 0;
|
||||
}
|
||||
if (e2 > y) err += ++y*2+1;
|
||||
}
|
||||
while (y <= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enables the display.
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DisplayOn(void)
|
||||
{
|
||||
lcd_drv->DisplayOn();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disables the display.
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DisplayOff(void)
|
||||
{
|
||||
lcd_drv->DisplayOff();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a pixel on LCD.
|
||||
* @param Xpos: X position
|
||||
* @param Ypos: Y position
|
||||
* @param RGBCode: Pixel color in RGB mode (5-6-5)
|
||||
* @retval None
|
||||
*/
|
||||
void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
|
||||
{
|
||||
if(lcd_drv->WritePixel != NULL)
|
||||
{
|
||||
lcd_drv->WritePixel(Xpos, Ypos, RGBCode);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
Static Function
|
||||
*******************************************************************************/
|
||||
/** @addtogroup STM32G0C1E_EVAL_LCD_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Draws a character on LCD.
|
||||
* @param Xpos: Line where to display the character shape
|
||||
* @param Ypos: Start column address
|
||||
* @param pChar: Pointer to the character data
|
||||
* @retval None
|
||||
*/
|
||||
static void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *pChar)
|
||||
{
|
||||
uint32_t counterh = 0, counterw = 0, index = 0;
|
||||
uint16_t height = 0, width = 0;
|
||||
uint8_t offset = 0;
|
||||
uint8_t *pchar = NULL;
|
||||
uint32_t line = 0;
|
||||
|
||||
height = DrawProp.pFont->Height;
|
||||
width = DrawProp.pFont->Width;
|
||||
|
||||
/* Fill bitmap header*/
|
||||
*(uint16_t *) (bitmap + 2) = (uint16_t)(height*width*2+OFFSET_BITMAP);
|
||||
*(uint16_t *) (bitmap + 4) = (uint16_t)((height*width*2+OFFSET_BITMAP)>>16);
|
||||
*(uint16_t *) (bitmap + 10) = OFFSET_BITMAP;
|
||||
*(uint16_t *) (bitmap + 18) = (uint16_t)(width);
|
||||
*(uint16_t *) (bitmap + 20) = (uint16_t)((width)>>16);
|
||||
*(uint16_t *) (bitmap + 22) = (uint16_t)(height);
|
||||
*(uint16_t *) (bitmap + 24) = (uint16_t)((height)>>16);
|
||||
|
||||
offset = 8 *((width + 7)/8) - width ;
|
||||
|
||||
for(counterh = 0; counterh < height; counterh++)
|
||||
{
|
||||
pchar = ((uint8_t *)pChar + (width + 7)/8 * counterh);
|
||||
|
||||
if(((width + 7)/8) == 3)
|
||||
{
|
||||
line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2];
|
||||
}
|
||||
|
||||
if(((width + 7)/8) == 2)
|
||||
{
|
||||
line = (pchar[0]<< 8) | pchar[1];
|
||||
}
|
||||
|
||||
if(((width + 7)/8) == 1)
|
||||
{
|
||||
line = pchar[0];
|
||||
}
|
||||
|
||||
for (counterw = 0; counterw < width; counterw++)
|
||||
{
|
||||
/* Image in the bitmap is written from the bottom to the top */
|
||||
/* Need to invert image in the bitmap */
|
||||
index = (((height-counterh-1)*width)+(counterw))*2+OFFSET_BITMAP;
|
||||
if(line & (1 << (width- counterw + offset- 1)))
|
||||
{
|
||||
bitmap[index] = (uint8_t)DrawProp.TextColor;
|
||||
bitmap[index+1] = (uint8_t)(DrawProp.TextColor >> 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
bitmap[index] = (uint8_t)DrawProp.BackColor;
|
||||
bitmap[index+1] = (uint8_t)(DrawProp.BackColor >> 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BSP_LCD_DrawBitmap(Ypos, Xpos, bitmap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets display window.
|
||||
* @param Xpos: LCD X position
|
||||
* @param Ypos: LCD Y position
|
||||
* @param Width: LCD window width
|
||||
* @param Height: LCD window height
|
||||
* @retval None
|
||||
*/
|
||||
static void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
|
||||
{
|
||||
if(lcd_drv->SetDisplayWindow != NULL)
|
||||
{
|
||||
lcd_drv->SetDisplayWindow(Xpos, Ypos, Width, Height);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,208 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file STM32G0C1E_EVAL_lcd.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the
|
||||
* STM32G0C1E_EVAL_lcd.c driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_LCD_H
|
||||
#define STM32G0C1E_EVAL_LCD_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0c1e_eval.h"
|
||||
/* Include LCD component Driver */
|
||||
#include "../Components/hx8347d/hx8347d.h"
|
||||
#include "../../../Utilities/Fonts/fonts.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD STM32G0C1E_EVAL LCD
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Exported_Types Exported Types
|
||||
* @{
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t TextColor;
|
||||
uint32_t BackColor;
|
||||
sFONT *pFont;
|
||||
|
||||
} LCD_DrawPropTypeDef;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Exported_Constants Exported Constants
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief LCD status structure definition
|
||||
*/
|
||||
#define LCD_OK 0x00
|
||||
#define LCD_ERROR 0x01
|
||||
#define LCD_TIMEOUT 0x02
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int16_t X;
|
||||
int16_t Y;
|
||||
|
||||
} Point, * pPoint;
|
||||
|
||||
/**
|
||||
* @brief Line mode structures definition
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CENTER_MODE = 0x01, /*!< Center mode */
|
||||
RIGHT_MODE = 0x02, /*!< Right mode */
|
||||
LEFT_MODE = 0x03, /*!< Left mode */
|
||||
NO_MODE
|
||||
|
||||
} Line_ModeTypdef;
|
||||
|
||||
/**
|
||||
* @brief LCD color
|
||||
*/
|
||||
#define LCD_COLOR_BLUE 0x001F
|
||||
#define LCD_COLOR_GREEN 0x07E0
|
||||
#define LCD_COLOR_RED 0xF800
|
||||
#define LCD_COLOR_CYAN 0x07FF
|
||||
#define LCD_COLOR_MAGENTA 0xF81F
|
||||
#define LCD_COLOR_YELLOW 0xFFE0
|
||||
#define LCD_COLOR_LIGHTBLUE 0x841F
|
||||
#define LCD_COLOR_LIGHTGREEN 0x87F0
|
||||
#define LCD_COLOR_LIGHTRED 0xFC10
|
||||
#define LCD_COLOR_LIGHTCYAN 0x87FF
|
||||
#define LCD_COLOR_LIGHTMAGENTA 0xFC1F
|
||||
#define LCD_COLOR_LIGHTYELLOW 0xFFF0
|
||||
#define LCD_COLOR_DARKBLUE 0x0010
|
||||
#define LCD_COLOR_DARKGREEN 0x0400
|
||||
#define LCD_COLOR_DARKRED 0x8000
|
||||
#define LCD_COLOR_DARKCYAN 0x0410
|
||||
#define LCD_COLOR_DARKMAGENTA 0x8010
|
||||
#define LCD_COLOR_DARKYELLOW 0x8400
|
||||
#define LCD_COLOR_WHITE 0xFFFF
|
||||
#define LCD_COLOR_LIGHTGRAY 0xD69A
|
||||
#define LCD_COLOR_GRAY 0x8410
|
||||
#define LCD_COLOR_DARKGRAY 0x4208
|
||||
#define LCD_COLOR_BLACK 0x0000
|
||||
#define LCD_COLOR_BROWN 0xA145
|
||||
#define LCD_COLOR_ORANGE 0xFD20
|
||||
|
||||
/* Macro to convert ST COLOR in RGB 24BIT definition to 16BIT RGB (R5bit,G6bit,B5bit) */
|
||||
#define LCD_R(__R_COLOR__) (((__R_COLOR__>>3)&0x1F)<<11)
|
||||
#define LCD_G(__G_COLOR__) (((__G_COLOR__>>2)&0x3F)<<5)
|
||||
#define LCD_B(__B_COLOR__) ((__B_COLOR__>>3)&0x1F)
|
||||
|
||||
/* Definition of Official ST COLOR */
|
||||
#define LCD_COLOR_ST_BLUE_DARK (LCD_R(0x00)|LCD_G(0x20)|LCD_B(0x52))
|
||||
#define LCD_COLOR_ST_BLUE (LCD_R(0x39)|LCD_G(0xA9)|LCD_B(0xDC))
|
||||
#define LCD_COLOR_ST_BLUE_LIGHT (LCD_R(0xD1)|LCD_G(0xE4)|LCD_B(0xF3))
|
||||
#define LCD_COLOR_ST_GREEN_LIGHT (LCD_R(0xBB)|LCD_G(0xCC)|LCD_B(0x01))
|
||||
#define LCD_COLOR_ST_GREEN_DARK (LCD_R(0x00)|LCD_G(0x3D)|LCD_B(0x14))
|
||||
#define LCD_COLOR_ST_YELLOW (LCD_R(0xFF)|LCD_G(0xD3)|LCD_B(0x00))
|
||||
#define LCD_COLOR_ST_BROWN (LCD_R(0x5C)|LCD_G(0x09)|LCD_B(0x15))
|
||||
#define LCD_COLOR_ST_PINK (LCD_R(0xD4)|LCD_G(0x00)|LCD_B(0x7A))
|
||||
#define LCD_COLOR_ST_PURPLE (LCD_R(0x59)|LCD_G(0x0D)|LCD_B(0x58))
|
||||
#define LCD_COLOR_ST_GRAY_DARK (LCD_R(0x4F)|LCD_G(0x52)|LCD_B(0x51))
|
||||
#define LCD_COLOR_ST_GRAY (LCD_R(0x90)|LCD_G(0x98)|LCD_B(0x9E))
|
||||
#define LCD_COLOR_ST_GRAY_LIGHT (LCD_R(0xB9)|LCD_G(0xC4)|LCD_B(0xCA))
|
||||
|
||||
/**
|
||||
* @brief LCD default font
|
||||
*/
|
||||
#ifndef LCD_DEFAULT_FONT
|
||||
#define LCD_DEFAULT_FONT Font8
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_LCD_Exported_Functions Exported Functions
|
||||
* @{
|
||||
*/
|
||||
uint8_t BSP_LCD_Init(void);
|
||||
uint32_t BSP_LCD_GetXSize(void);
|
||||
uint32_t BSP_LCD_GetYSize(void);
|
||||
|
||||
uint16_t BSP_LCD_GetTextColor(void);
|
||||
uint16_t BSP_LCD_GetBackColor(void);
|
||||
void BSP_LCD_SetTextColor(__IO uint16_t Color);
|
||||
void BSP_LCD_SetBackColor(__IO uint16_t Color);
|
||||
void BSP_LCD_SetFont(sFONT *pFonts);
|
||||
sFONT *BSP_LCD_GetFont(void);
|
||||
|
||||
void BSP_LCD_Clear(uint16_t Color);
|
||||
void BSP_LCD_ClearStringLine(uint16_t Line);
|
||||
void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *pText);
|
||||
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *pText, Line_ModeTypdef Mode);
|
||||
void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
|
||||
void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
|
||||
|
||||
uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos);
|
||||
void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
|
||||
void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
|
||||
void BSP_LCD_DrawLine(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2);
|
||||
void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
|
||||
void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
|
||||
void BSP_LCD_DrawPolygon(pPoint pPoints, uint16_t PointCount);
|
||||
void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
|
||||
void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pBmp);
|
||||
|
||||
void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
|
||||
void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
|
||||
void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
|
||||
|
||||
void BSP_LCD_DisplayOff(void);
|
||||
void BSP_LCD_DisplayOn(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_LCD_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,936 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_mux.c
|
||||
* @author MCD Application Team
|
||||
* @brief This file provides a set of functions needed to manage the Type-C
|
||||
* MUX associated to a Type-C receptacle. These functions allow for
|
||||
* reconfiguring the pins of the Type-C receptacle when the related
|
||||
* Type-C port operate in DisplayPort alternate mode or
|
||||
* when it is used as a USB 3.1 to USB Type-C adapter.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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 <stdio.h>
|
||||
#include "stm32g0c1e_eval.h"
|
||||
#include "stm32g0c1e_eval_mux.h"
|
||||
#include "stm32g0xx_hal.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_MUX
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Private_Typedef Private Typedef
|
||||
* @{
|
||||
*/
|
||||
typedef enum {
|
||||
MUX_NOT_INITIALIZED = 0,
|
||||
MUX_INITIALIZED
|
||||
} MUX_StateTypedef;
|
||||
|
||||
typedef struct {
|
||||
MUX_StateTypedef State;
|
||||
TYPECSWITCH_Drv_t * TypeCSwitch_Drv;
|
||||
uint16_t I2C_Address_TypeCSwitch;
|
||||
DPREDRIVER_Drv_t * DPRedriver_Drv;
|
||||
uint16_t I2C_Address_DPRedriver;
|
||||
} MuxInfoTypeDef;
|
||||
|
||||
typedef struct {
|
||||
#if defined(TUSB546_DEBUG)
|
||||
TUSB546_RegistersTypeDef TUSB546_Registers;
|
||||
#endif /* TUSB546_DEBUG */
|
||||
#if defined(CBTL08GP053_DEBUG)
|
||||
CBTL08GP053_RegistersTypeDef CBTL08GP053_Registers;
|
||||
#endif /* CBTL08GP053_DEBUG */
|
||||
#if defined(SN65DP141_DEBUG)
|
||||
SN65DP141_RegistersTypeDef SN65DP141_Registers;
|
||||
#endif /* CBTL08GP053_DEBUG */
|
||||
MUX_HPDCallbackFuncTypeDef * pfnHPDCallbackFunc;
|
||||
MUX_HPDStateTypeDef HPDState;
|
||||
MuxInfoTypeDef MuxInfo[TYPE_C_MUX_NB];
|
||||
} ContextTypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DET_HPD_SOURCE = 0
|
||||
} DetectId_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SEL_HPDIN = 0
|
||||
} SelectId_TypeDef;
|
||||
|
||||
typedef enum {
|
||||
DET_STATE_LOW = 0,
|
||||
DET_STATE_HIGH
|
||||
} MUX_DETState_TypeDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Private_Macros Private Macros
|
||||
* @{
|
||||
*/
|
||||
#define DETx_GPIO_CLK_ENABLE(__DET__) do { if((__DET__) == DET_HPD_SOURCE) DET_HPD_SOURCE_GPIO_CLK_ENABLE();} while(0)
|
||||
|
||||
#define SELx_GPIO_CLK_ENABLE(__SEL__) do { if((__SEL__) == SEL_HPDIN) SEL_HPDIN_GPIO_CLK_ENABLE();} while(0)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Private_Variables Private Variables
|
||||
* @{
|
||||
*/
|
||||
static const TYPECSWITCH_Mode_t ModeSelect[2][13] =
|
||||
{
|
||||
/* PLUG_ORIENTATION_NORMAL */
|
||||
{
|
||||
DFP_D_PIN_ASSIGNMENT_A_NORMAL, /* DFP_PIN_ASSIGNMMENT_A */
|
||||
DFP_D_PIN_ASSIGNMENT_B_NORMAL, /* DFP_PIN_ASSIGNMMENT_B */
|
||||
DFP_D_PIN_ASSIGNMENT_C_NORMAL, /* DFP_PIN_ASSIGNMMENT_C */
|
||||
DFP_D_PIN_ASSIGNMENT_D_NORMAL, /* DFP_PIN_ASSIGNMMENT_D */
|
||||
DFP_D_PIN_ASSIGNMENT_E_NORMAL, /* DFP_PIN_ASSIGNMMENT_E */
|
||||
DFP_D_PIN_ASSIGNMENT_F_NORMAL, /* DFP_PIN_ASSIGNMMENT_F */
|
||||
UFP_D_PIN_ASSIGNMENT_A_NORMAL, /* UFP_PIN_ASSIGNMMENT_A */
|
||||
UFP_D_PIN_ASSIGNMENT_B_NORMAL, /* UFP_PIN_ASSIGNMMENT_B */
|
||||
UFP_D_PIN_ASSIGNMENT_C_NORMAL, /* UFP_PIN_ASSIGNMMENT_C */
|
||||
UFP_D_PIN_ASSIGNMENT_D_NORMAL, /* UFP_PIN_ASSIGNMMENT_D */
|
||||
UFP_D_PIN_ASSIGNMENT_E_NORMAL, /* UFP_PIN_ASSIGNMMENT_E */
|
||||
UFP_D_PIN_ASSIGNMENT_F_NORMAL, /* UFP_PIN_ASSIGNMMENT_F */
|
||||
USB_NORMAL /* USB_ONLY_PIN_ASSIGNMMENT */
|
||||
},
|
||||
|
||||
/* PLUG_ORIENTATION_FLIPPED */
|
||||
{
|
||||
|
||||
DFP_D_PIN_ASSIGNMENT_A_FLIPPED, /* DFP_PIN_ASSIGNMMENT_A */
|
||||
DFP_D_PIN_ASSIGNMENT_B_FLIPPED, /* DFP_PIN_ASSIGNMMENT_B */
|
||||
DFP_D_PIN_ASSIGNMENT_C_FLIPPED, /* DFP_PIN_ASSIGNMMENT_C */
|
||||
DFP_D_PIN_ASSIGNMENT_D_FLIPPED, /* DFP_PIN_ASSIGNMMENT_D */
|
||||
DFP_D_PIN_ASSIGNMENT_E_FLIPPED, /* DFP_PIN_ASSIGNMMENT_E */
|
||||
DFP_D_PIN_ASSIGNMENT_F_FLIPPED, /* DFP_PIN_ASSIGNMMENT_F */
|
||||
UFP_D_PIN_ASSIGNMENT_A_FLIPPED, /* UFP_PIN_ASSIGNMMENT_A */
|
||||
UFP_D_PIN_ASSIGNMENT_B_FLIPPED, /* UFP_PIN_ASSIGNMMENT_B */
|
||||
UFP_D_PIN_ASSIGNMENT_C_FLIPPED, /* UFP_PIN_ASSIGNMMENT_C */
|
||||
UFP_D_PIN_ASSIGNMENT_D_FLIPPED, /* UFP_PIN_ASSIGNMMENT_D */
|
||||
UFP_D_PIN_ASSIGNMENT_E_FLIPPED, /* UFP_PIN_ASSIGNMMENT_E */
|
||||
UFP_D_PIN_ASSIGNMENT_F_FLIPPED, /* UFP_PIN_ASSIGNMMENT_F */
|
||||
USB_FLIPPED /* USB_ONLY_PIN_ASSIGNMMENT */
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief SEL variables
|
||||
*/
|
||||
static GPIO_TypeDef* SEL_PORT[SELn] = {
|
||||
SEL_HPDIN_GPIO_PORT,
|
||||
};
|
||||
|
||||
static uint16_t SEL_PIN[SELn] = {
|
||||
SEL_HPDIN_PIN,
|
||||
};
|
||||
|
||||
/* BSP PWR contextual data */
|
||||
static ContextTypeDef Context =
|
||||
{
|
||||
.HPDState = HPD_STATE_LOW,
|
||||
.pfnHPDCallbackFunc = (MUX_HPDCallbackFuncTypeDef *)NULL,
|
||||
.MuxInfo =
|
||||
{
|
||||
/* TYPE_C_MUX_1 */
|
||||
{
|
||||
.State = MUX_NOT_INITIALIZED,
|
||||
.TypeCSwitch_Drv = &tusb546_drv_CrossSwitch,
|
||||
.I2C_Address_TypeCSwitch = MUX_1_TYPEC_SWITCH_I2C_ADDRESS,
|
||||
.DPRedriver_Drv = &tusb546_drv_LinearRedriver,
|
||||
.I2C_Address_DPRedriver = MUX_1_DP_REDRIVER_I2C_ADDRESS
|
||||
},
|
||||
/* TYPE_C_MUX_2 */
|
||||
{
|
||||
.State = MUX_NOT_INITIALIZED,
|
||||
.TypeCSwitch_Drv = &cbtl08gp053_drv,
|
||||
.I2C_Address_TypeCSwitch = MUX_2_TYPEC_SWITCH_I2C_ADDRESS,
|
||||
.DPRedriver_Drv = &sn65dp141_drv,
|
||||
.I2C_Address_DPRedriver = MUX_2_DP_REDRIVER_I2C_ADDRESS
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Private_Functions Private Functions
|
||||
* @{
|
||||
*/
|
||||
static void MUX_DET_Init(void);
|
||||
static void MUX_DET_DeInit(void);
|
||||
static MUX_DETState_TypeDef MUX_DET_GetState(void);
|
||||
static void MUX_SEL_Init(SelectId_TypeDef Sel);
|
||||
static void MUX_SEL_DeInit(SelectId_TypeDef Sel);
|
||||
static void MUX_SEL_On(SelectId_TypeDef Sel);
|
||||
static void MUX_SEL_Off(SelectId_TypeDef Sel);
|
||||
static void MUX_DebounceTimerSetConfig(uint32_t DebounceTime);
|
||||
static void MUX_DebounceTimerResetConfig(void);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Variables Exported Variables
|
||||
* @{
|
||||
*/
|
||||
TIM_HandleTypeDef htim = {.Instance = DEBOUNCE_TIM_INSTANCE};
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_MUX_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the hardware resources used by the Type-C MUX
|
||||
* assigned to a given Type-C MUX.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_Init(MUX_TypeCMuxIdTypeDef TypeCMuxId)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
if (Context.MuxInfo[TypeCMuxId].State == MUX_NOT_INITIALIZED)
|
||||
{
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_1:
|
||||
case TYPE_C_MUX_2:
|
||||
/* USB Type-C Crossbar Switch initialization */
|
||||
ret += Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->Init(Context.MuxInfo[TypeCMuxId].I2C_Address_TypeCSwitch);
|
||||
|
||||
/* DisplayPort Linear Redriver initialization */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->Init(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver);
|
||||
|
||||
if (TypeCMuxId == TYPE_C_MUX_1)
|
||||
{
|
||||
MUX_SEL_Init(SEL_HPDIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* DET_HPD_SOURCE */
|
||||
MUX_DET_Init();
|
||||
}
|
||||
|
||||
/* Initialize the debounce timer (if not done already) */
|
||||
if ((Context.MuxInfo[TYPE_C_MUX_1].State == MUX_NOT_INITIALIZED) &&
|
||||
(Context.MuxInfo[TYPE_C_MUX_2].State == MUX_NOT_INITIALIZED))
|
||||
{
|
||||
MUX_DebounceTimerSetConfig(DEBOUNCE_TIME);
|
||||
}
|
||||
|
||||
/* Update Context */
|
||||
Context.MuxInfo[TypeCMuxId].State = MUX_INITIALIZED;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Free the hardware resources used by the Type-C MUX
|
||||
* assigned to a given Type-C MUX.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_DeInit(MUX_TypeCMuxIdTypeDef TypeCMuxId)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
if (Context.MuxInfo[TypeCMuxId].State == MUX_INITIALIZED)
|
||||
{
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_1:
|
||||
case TYPE_C_MUX_2:
|
||||
/* USB Type-C Crossbar Switch de-initialization */
|
||||
Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->DeInit(Context.MuxInfo[TypeCMuxId].I2C_Address_TypeCSwitch);
|
||||
|
||||
/* DisplayPort Linear Redriver de-initialization */
|
||||
Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DeInit(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver);
|
||||
|
||||
if (TypeCMuxId == TYPE_C_MUX_1)
|
||||
{
|
||||
MUX_DebounceTimerResetConfig();
|
||||
MUX_SEL_DeInit(SEL_HPDIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* DET_HPD_SOURCE */
|
||||
MUX_DET_DeInit();
|
||||
}
|
||||
|
||||
/* Update Context */
|
||||
Context.MuxInfo[TypeCMuxId].State = MUX_NOT_INITIALIZED;
|
||||
|
||||
/* De-initialize the debounce timer (if not required anymore)*/
|
||||
if ((Context.MuxInfo[TYPE_C_MUX_1].State == MUX_NOT_INITIALIZED) &&
|
||||
(Context.MuxInfo[TYPE_C_MUX_2].State == MUX_NOT_INITIALIZED))
|
||||
{
|
||||
MUX_DebounceTimerResetConfig();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Power on the Type-C MUX.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_Enable(MUX_TypeCMuxIdTypeDef TypeCMuxId)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_1:
|
||||
case TYPE_C_MUX_2:
|
||||
/* Power on USB Type-C Crossbar Switch */
|
||||
ret += Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->PowerOn(Context.MuxInfo[TypeCMuxId].I2C_Address_TypeCSwitch);
|
||||
|
||||
/* Power on DisplayPort Linear Redriver */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->PowerOn(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
/**
|
||||
* @brief Power down the Type-C MUX.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_Disable(MUX_TypeCMuxIdTypeDef TypeCMuxId)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_1:
|
||||
case TYPE_C_MUX_2:
|
||||
/* Power off USB Type-C Crossbar Switch */
|
||||
ret += Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->PowerOff(Context.MuxInfo[TypeCMuxId].I2C_Address_TypeCSwitch);
|
||||
|
||||
/* Power down DisplayPort Linear Redriver */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->PowerOff(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the pin assignment of the USB Type-C connector when it operates
|
||||
* in one of the following mode:
|
||||
* DFP_D: Downstream Facing Port associated with a DisplayPort Source device
|
||||
* UFP_D: Upstream Facing Port associated with a DisplayPort Source device
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @param TypeCPlugOrientation Type-C plug orientation
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg PLUG_ORIENTATION_NORMAL
|
||||
* @arg PLUG_ORIENTATION_FLIPPED
|
||||
* @param TypeCConnectorPinAssignment Type-C connector pin assignment
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg DFP_PIN_ASSIGNMMENT_A
|
||||
* @arg DFP_PIN_ASSIGNMMENT_B
|
||||
* @arg DFP_PIN_ASSIGNMMENT_C
|
||||
* @arg DFP_PIN_ASSIGNMMENT_D
|
||||
* @arg DFP_PIN_ASSIGNMMENT_E
|
||||
* @arg DFP_PIN_ASSIGNMMENT_F
|
||||
* @arg UFP_PIN_ASSIGNMMENT_A
|
||||
* @arg UFP_PIN_ASSIGNMMENT_B
|
||||
* @arg UFP_PIN_ASSIGNMMENT_C
|
||||
* @arg UFP_PIN_ASSIGNMMENT_D
|
||||
* @arg UFP_PIN_ASSIGNMMENT_E
|
||||
* @arg UFP_PIN_ASSIGNMMENT_F
|
||||
* @arg USB_ONLY_PIN_ASSIGNMMENT
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_SetDPPinAssignment(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_TypeCPlugOrientationTypeDef TypeCPlugOrientation,
|
||||
MUX_TypeCConnectorPinAssignmentTypeDef TypeCConnectorPinAssignment)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
TYPECSWITCH_Mode_t Mode;
|
||||
|
||||
Mode = ModeSelect[TypeCPlugOrientation][TypeCConnectorPinAssignment];
|
||||
|
||||
if (Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->IsSupportedMode(Mode))
|
||||
{
|
||||
/* Set Alt. mode */
|
||||
ret += Context.MuxInfo[TypeCMuxId].TypeCSwitch_Drv->SetMode(Context.MuxInfo[TypeCMuxId].I2C_Address_TypeCSwitch, Mode);
|
||||
|
||||
/* Enable Display Port channels (if required) */
|
||||
switch(TypeCConnectorPinAssignment)
|
||||
{
|
||||
case USB_ONLY_PIN_ASSIGNMMENT:
|
||||
/* no DP channel enabled */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP0);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP1);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP2);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP3);
|
||||
break;
|
||||
case DFP_PIN_ASSIGNMMENT_B:
|
||||
case DFP_PIN_ASSIGNMMENT_D:
|
||||
case DFP_PIN_ASSIGNMMENT_F:
|
||||
case UFP_PIN_ASSIGNMMENT_B:
|
||||
case UFP_PIN_ASSIGNMMENT_D:
|
||||
case UFP_PIN_ASSIGNMMENT_F:
|
||||
/* Enable Display Port ML0 and ML1 */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP0);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP1);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP2);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->DisableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP3);
|
||||
break;
|
||||
case DFP_PIN_ASSIGNMMENT_A:
|
||||
case DFP_PIN_ASSIGNMMENT_C:
|
||||
case DFP_PIN_ASSIGNMMENT_E:
|
||||
case UFP_PIN_ASSIGNMMENT_A:
|
||||
case UFP_PIN_ASSIGNMMENT_C:
|
||||
case UFP_PIN_ASSIGNMMENT_E:
|
||||
/* Enable Display Port ML0, ML1, ML2 and ML3 */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP0);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP1);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP2);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->EnableChannel(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the equalizer gain for all the channels
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @param EQGain Equalizer gain.
|
||||
* TYPE_C_MUX_1: This parameter must be a value between 0x00 and @ref MUX_1_EQGAIN_MAX.
|
||||
* TYPE_C_MUX_2: This parameter must be a value between 0x00 and @ref MUX_2_EQGAIN_MAX.
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_SetEQGain(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
uint8_t EQGain)
|
||||
{
|
||||
uint32_t ret = 1;
|
||||
|
||||
if (((TYPE_C_MUX_1 == TypeCMuxId) && (MUX_1_EQGAIN_MAX >= EQGain))
|
||||
|| ((TYPE_C_MUX_2 == TypeCMuxId) && (MUX_2_EQGAIN_MAX >= EQGain)))
|
||||
{
|
||||
ret = 0;
|
||||
/* Set EQ gain for Port ML0, ML1, ML2 and ML3 */
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->SetEQGain(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP0, EQGain);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->SetEQGain(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP1, EQGain);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->SetEQGain(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP2, EQGain);
|
||||
ret += Context.MuxInfo[TypeCMuxId].DPRedriver_Drv->SetEQGain(Context.MuxInfo[TypeCMuxId].I2C_Address_DPRedriver, CHANNEL_DP3, EQGain);
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the HPD level seen by the DP source device.
|
||||
* @note This function is used to enable DisplayPort HPD signaling
|
||||
* through PD messaging.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @param HPDState Hot Plud Detection (HPD) state
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg HPD_STATE_LOW
|
||||
* @arg HPD_STATE_HIGH
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_SetHPDState(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDStateTypeDef HPDState)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_1:
|
||||
if(HPD_STATE_LOW == HPDState)
|
||||
{
|
||||
MUX_SEL_Off(SEL_HPDIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
MUX_SEL_On(SEL_HPDIN);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve actual HPD level of the DP source device.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @param pHPDState pointer to the Hot Plud Detection (HPD) state
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg HPD_STATE_LOW
|
||||
* @arg HPD_STATE_HIGH
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_GetHPDState(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDStateTypeDef * pHPDState)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
|
||||
/* Initialize returned HPDState */
|
||||
*pHPDState = HPD_STATE_LOW;
|
||||
|
||||
/* Read HPDState */
|
||||
switch (TypeCMuxId)
|
||||
{
|
||||
case TYPE_C_MUX_2:
|
||||
*pHPDState = (MUX_HPDStateTypeDef)MUX_DET_GetState();
|
||||
break;
|
||||
|
||||
default:
|
||||
ret++;
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Generate an HPD_IRQ towards the DP source device.
|
||||
* @note This function must be called every time an HPD_IRQ is detected by the
|
||||
* PD communication stack.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_HPDIRQ(MUX_TypeCMuxIdTypeDef TypeCMuxId)
|
||||
{
|
||||
MUX_StatusTypeDef ret = MUX_ERROR;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Display port hot plug detection (HPD)function.
|
||||
* @note This function must be called when a display bort capable device
|
||||
* is connected to the Display Port source receptacle of the MB1352
|
||||
* daughter board.
|
||||
* @retval none
|
||||
*/
|
||||
void BSP_MUX_Detect_HPD(void)
|
||||
{
|
||||
if (Context.pfnHPDCallbackFunc != (MUX_HPDCallbackFuncTypeDef *)NULL)
|
||||
{
|
||||
HAL_TIM_Base_Start_IT(&htim);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief HPD callback function registration.
|
||||
* @note The sink device drives a hot plug detect (HPD) signal to notify the
|
||||
* source that a sink is present.
|
||||
* @note Once registered, HPD callback function will be called upon connection
|
||||
* disconnection of a DP Sink device.
|
||||
* @param TypeCMuxId Type-C MUX identifier
|
||||
* This parameter can be take one of the following values:
|
||||
* @arg TYPE_C_MUX_1
|
||||
* @arg TYPE_C_MUX_2
|
||||
* @param pHPDCallbackFunc HPD callback function pointer
|
||||
* @retval mux status
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_RegisterHPDCallbackFunc(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDCallbackFuncTypeDef * pHPDCallbackFunc)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
|
||||
if (TypeCMuxId == TYPE_C_MUX_2)
|
||||
{
|
||||
Context.pfnHPDCallbackFunc = pHPDCallbackFunc;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret++;
|
||||
}
|
||||
|
||||
return (ret == 0) ? MUX_OK : MUX_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes the TIM Base MSP.
|
||||
* @param htim TIM handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
/* Enable Debounce Timer clock */
|
||||
DEBOUNCE_TIM_CLK_ENABLE();
|
||||
|
||||
/* NVIC configuration for debounce timer interrupt */
|
||||
HAL_NVIC_SetPriority(DEBOUNCE_TIM_IRQn, 1, 0);
|
||||
HAL_NVIC_EnableIRQ(DEBOUNCE_TIM_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DeInitialize TIM Base MSP.
|
||||
* @param htim TIM handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
/* Enable Debounce Timer clock */
|
||||
DEBOUNCE_TIM_CLK_DISABLE();
|
||||
|
||||
/* Disable Debounce timer interrupt */
|
||||
HAL_NVIC_DisableIRQ(DEBOUNCE_TIM_IRQn);
|
||||
}
|
||||
|
||||
#if defined(TUSB546_DEBUG) || defined(CBTL08GP053_DEBUG) || defined(SN65DP141_DEBUG)
|
||||
/**
|
||||
* @brief Dump the register content of a device .
|
||||
* @param Device device(s)
|
||||
* This parameter can be any combination of the following values:
|
||||
* DEVICE_CBTL08GP053
|
||||
* DEVICE_SN65DP141
|
||||
* DEVICE_TUSB546
|
||||
* @retval none
|
||||
*/
|
||||
void BSP_MUX_DumpDeviceRegisters(uint32_t Device)
|
||||
{
|
||||
#if defined(CBTL08GP053_DEBUG)
|
||||
if ((Device & DEVICE_CBTL08GP053) == DEVICE_CBTL08GP053)
|
||||
{
|
||||
printf("\n\tCBTL08GP053 registers dump:\n");
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_SYS_CTRL, &Context.CBTL08GP053_Registers.SysCtrl.Register);
|
||||
printf("\t\tSYS_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.SysCtrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_OP1_CTRL, &Context.CBTL08GP053_Registers.Op1Ctrl.Register);
|
||||
printf("\t\tOP1_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.Op1Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_OP2_CTRL, &Context.CBTL08GP053_Registers.Op2Ctrl.Register);
|
||||
printf("\t\tOP2_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.Op2Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_OP3_CTRL, &Context.CBTL08GP053_Registers.Op3Ctrl.Register);
|
||||
printf("\t\tOP3_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.Op3Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_OP4_CTRL, &Context.CBTL08GP053_Registers.Op4Ctrl.Register);
|
||||
printf("\t\tOP4_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.Op4Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_OP5_CTRL, &Context.CBTL08GP053_Registers.Op5Ctrl.Register);
|
||||
printf("\t\tOP5_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.Op5Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_CROSS5_CTRL, &Context.CBTL08GP053_Registers.Cross5Ctrl.Register);
|
||||
printf("\t\tCROSS5_CTRL: 0x%0.2x\n", Context.CBTL08GP053_Registers.Cross5Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_SW_CTRL, &Context.CBTL08GP053_Registers.SwCtrl.Register);
|
||||
printf("\t\tSW_CTRL : 0x%0.2x\n", Context.CBTL08GP053_Registers.SwCtrl.Register);
|
||||
MUX_IO_Read(MUX_2_TYPEC_SWITCH_I2C_ADDRESS, CBTL08GP053_REG_REVISION, &Context.CBTL08GP053_Registers.Revision);
|
||||
printf("\t\tREVISION : 0x%0.2x\n", Context.CBTL08GP053_Registers.Revision);
|
||||
}
|
||||
#endif /* CBTL08GP053_DEBUG */
|
||||
|
||||
#if defined(SN65DP141_DEBUG)
|
||||
if ((Device & DEVICE_SN65DP141) == DEVICE_SN65DP141)
|
||||
{
|
||||
printf("\n\tSN65DP141 registers dump:\n");
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CFG, &Context.SN65DP141_Registers.General.Register);
|
||||
printf("\t\tGeneral Device Settings : 0x%0.2x\n", Context.SN65DP141_Registers.General.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CHEN, &Context.SN65DP141_Registers.ChannelEnable.Register);
|
||||
printf("\t\tChannel Enable : 0x%0.2x\n", Context.SN65DP141_Registers.ChannelEnable.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH0_CFG, &Context.SN65DP141_Registers.Channel0Ctrl.Register);
|
||||
printf("\t\tChannel 0 Control Settings: 0x%0.2x\n", Context.SN65DP141_Registers.Channel0Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH0_EN, &Context.SN65DP141_Registers.Channel0Enable.Register);
|
||||
printf("\t\tChannel 0 Enable Settings : 0x%0.2x\n", Context.SN65DP141_Registers.Channel0Enable.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH1_CFG, &Context.SN65DP141_Registers.Channel1Ctrl.Register);
|
||||
printf("\t\tChannel 1 Control Settings: 0x%0.2x\n", Context.SN65DP141_Registers.Channel1Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH1_EN, &Context.SN65DP141_Registers.Channel1Enable.Register);
|
||||
printf("\t\tChannel 1 Enable Settings : 0x%0.2x\n", Context.SN65DP141_Registers.Channel1Enable.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH2_CFG, &Context.SN65DP141_Registers.Channel2Ctrl.Register);
|
||||
printf("\t\tChannel 2 Control Settings: 0x%0.2x\n", Context.SN65DP141_Registers.Channel2Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH2_EN, &Context.SN65DP141_Registers.Channel2Enable.Register);
|
||||
printf("\t\tChannel 2 Enable Settings : 0x%0.2x\n", Context.SN65DP141_Registers.Channel2Enable.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH3_CFG, &Context.SN65DP141_Registers.Channel3Ctrl.Register);
|
||||
printf("\t\tChannel 3 Control Settings: 0x%0.2x\n", Context.SN65DP141_Registers.Channel3Ctrl.Register);
|
||||
MUX_IO_Read(MUX_2_DP_REDRIVER_I2C_ADDRESS, SN65DP141_REG_CH3_EN, &Context.SN65DP141_Registers.Channel3Enable.Register);
|
||||
printf("\t\tChannel 3 Enable Settings : 0x%0.2x\n", Context.SN65DP141_Registers.Channel3Enable.Register);
|
||||
}
|
||||
#endif /* SN65DP141_DEBUG */
|
||||
|
||||
#if defined(TUSB546_DEBUG)
|
||||
if ((Device & DEVICE_TUSB546) == DEVICE_TUSB546)
|
||||
{
|
||||
MUX_IO_Read(MUX_1_TYPEC_SWITCH_I2C_ADDRESS, TUSB546_REG_CTRL, &Context.TUSB546_Registers.General.Register);
|
||||
MUX_IO_Read(MUX_1_TYPEC_SWITCH_I2C_ADDRESS, TUSB546_REG_DP_CTRL1, &Context.TUSB546_Registers.DPCtrlStatus10.Register);
|
||||
MUX_IO_Read(MUX_1_TYPEC_SWITCH_I2C_ADDRESS, TUSB546_REG_DP_CTRL2, &Context.TUSB546_Registers.DPCtrlStatus11.Register);
|
||||
MUX_IO_Read(MUX_1_TYPEC_SWITCH_I2C_ADDRESS, TUSB546_REG_DP_CTRL3, &Context.TUSB546_Registers.DPCtrlStatus12.Register);
|
||||
MUX_IO_Read(MUX_1_TYPEC_SWITCH_I2C_ADDRESS, TUSB546_REG_DP_CTRL4, &Context.TUSB546_Registers.DPCtrlStatus13.Register);
|
||||
}
|
||||
#endif /* TUSB546_DEBUG */
|
||||
}
|
||||
#endif /* TUSB546_DEBUG || CBTL08GP053_DEBUG || SN65DP141_DEBUG */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_MUX_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Configures DET GPIO.
|
||||
* @note This function configures Detection GPIO pin for DET_HPD_SOURCE
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_DET_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/* Enable the GPIO_DET clock */
|
||||
DET_HPD_SOURCE_GPIO_CLK_ENABLE();
|
||||
|
||||
/* Configure the GPIO_MOS pin */
|
||||
GPIO_InitStruct.Pin = DET_HPD_SOURCE_PIN;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
|
||||
HAL_GPIO_Init(DET_HPD_SOURCE_GPIO_PORT, &GPIO_InitStruct);
|
||||
|
||||
/* Enable and set EXTI lines Interrupt to the lowest priority */
|
||||
HAL_NVIC_SetPriority(DET_EXTI_IRQn, 2, 0);
|
||||
HAL_NVIC_EnableIRQ(DET_EXTI_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset DET GPIO configuration.
|
||||
* @note This function resets configuration of Detection GPIO pin for DET_HPD_SOURCE
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_DET_DeInit(void)
|
||||
{
|
||||
/* Disable EXTI lines Interrupt */
|
||||
HAL_NVIC_DisableIRQ(DET_EXTI_IRQn);
|
||||
HAL_GPIO_DeInit(DET_HPD_SOURCE_GPIO_PORT, DET_HPD_SOURCE_PIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the selected Detect state.
|
||||
* @note This function returns GPIO pin state for DET_HPD_SOURCE
|
||||
* @retval The Detect GPIO pin value
|
||||
*/
|
||||
static MUX_DETState_TypeDef MUX_DET_GetState(void)
|
||||
{
|
||||
GPIO_PinState PinState;
|
||||
|
||||
PinState = HAL_GPIO_ReadPin(DET_HPD_SOURCE_GPIO_PORT, DET_HPD_SOURCE_PIN);
|
||||
/* Update Context */
|
||||
Context.HPDState = HPD_STATE_LOW;
|
||||
if (GPIO_PIN_SET == PinState)
|
||||
{
|
||||
Context.HPDState = HPD_STATE_HIGH;
|
||||
}
|
||||
|
||||
return (PinState == GPIO_PIN_RESET) ? DET_STATE_LOW : DET_STATE_HIGH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configures SEL GPIO.
|
||||
* @param Sel Specifies the Select Pin to be configured.
|
||||
* This parameter can be one of following parameters:
|
||||
* @arg SEL_HPDIN
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_SEL_Init(SelectId_TypeDef Sel)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/* Enable the GPIO_DET clock */
|
||||
SELx_GPIO_CLK_ENABLE(Sel);
|
||||
|
||||
/* Configure the GPIO_MOS pin */
|
||||
GPIO_InitStruct.Pin = SEL_PIN[Sel];
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
|
||||
HAL_GPIO_Init(SEL_PORT[Sel], &GPIO_InitStruct);
|
||||
|
||||
HAL_GPIO_WritePin(SEL_PORT[Sel], SEL_PIN[Sel], GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset SEL GPIO configuration.
|
||||
* @param Sel Specifies the Select Pin.
|
||||
* This parameter can be one of following parameters:
|
||||
* @arg SEL_HPDIN
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_SEL_DeInit(SelectId_TypeDef Sel)
|
||||
{
|
||||
HAL_GPIO_DeInit(SEL_PORT[Sel], SEL_PIN[Sel]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turns selected Sel On.
|
||||
* @param Sel Specifies the Select Pin to be configured.
|
||||
* This parameter can be one of following parameters:
|
||||
* @arg SEL_HPDIN
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_SEL_On(SelectId_TypeDef Sel)
|
||||
{
|
||||
HAL_GPIO_WritePin(SEL_PORT[Sel], SEL_PIN[Sel], GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turns selected Det Off.
|
||||
* @param Sel Specifies the Select Pin to be configured.
|
||||
* This parameter can be one of following parameters:
|
||||
* @arg SEL_HPDIN
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_SEL_Off(SelectId_TypeDef Sel)
|
||||
{
|
||||
HAL_GPIO_WritePin(SEL_PORT[Sel], SEL_PIN[Sel], GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set debounce timer configuration.
|
||||
* @param DebounceTime Debounce time (in us)
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_DebounceTimerSetConfig(uint32_t DebounceTime)
|
||||
{
|
||||
__HAL_TIM_RESET_HANDLE_STATE(&htim);
|
||||
|
||||
htim.Init.Prescaler = (DEBOUNCE_TIM_COUNTER_CLK_FREQ() / 1000000) -1;
|
||||
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim.Init.Period = DebounceTime - 1;
|
||||
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim.Init.RepetitionCounter = 0;
|
||||
htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
|
||||
HAL_TIM_Base_Init(&htim);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset debounce timer configuration.
|
||||
* @retval None
|
||||
*/
|
||||
static void MUX_DebounceTimerResetConfig(void)
|
||||
{
|
||||
HAL_TIM_Base_DeInit(&htim);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Period elapsed callback in non-blocking mode
|
||||
* @param htim TIM handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
HAL_TIM_Base_Stop_IT(htim);
|
||||
|
||||
if ((Context.HPDState == HPD_STATE_LOW) && (DET_STATE_HIGH == MUX_DET_GetState()))
|
||||
{
|
||||
/* Invoke registered callback function */
|
||||
Context.pfnHPDCallbackFunc(TYPE_C_MUX_2, HPD_STATE_HIGH);
|
||||
}
|
||||
|
||||
if ((Context.HPDState == HPD_STATE_HIGH) && (DET_STATE_LOW == MUX_DET_GetState()))
|
||||
{
|
||||
/* Invoke registered callback function */
|
||||
Context.pfnHPDCallbackFunc(TYPE_C_MUX_2, HPD_STATE_LOW);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,226 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_mux.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the
|
||||
* stm32g0c1e_eval_mux.c firmware driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_MUX_H
|
||||
#define STM32G0C1E_EVAL_MUX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0xx.h"
|
||||
#include "../Components/sn65dp141/sn65dp141.h"
|
||||
#include "../Components/cbtl08gp053/cbtl08gp053.h"
|
||||
#include "../Components/tusb546/tusb546.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX STM32G0C1E_EVAL MUX
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Defines Exported Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define MUX_1_EQGAIN_MAX TUSB546_EQGAIN_15
|
||||
#define MUX_2_EQGAIN_MAX SN65DP141_EQGAIN_7
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Types Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief MUX Status
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
MUX_OK = 0,
|
||||
MUX_ERROR
|
||||
} MUX_StatusTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Type-C MUX identifier
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
TYPE_C_MUX_1 = 0,
|
||||
TYPE_C_MUX_2,
|
||||
TYPE_C_MUX_NB
|
||||
} MUX_TypeCMuxIdTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Type-C connector pin assignments
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
DFP_PIN_ASSIGNMMENT_A = 0, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
DFP_PIN_ASSIGNMMENT_B, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
DFP_PIN_ASSIGNMMENT_C, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
DFP_PIN_ASSIGNMMENT_D, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
DFP_PIN_ASSIGNMMENT_E, /*!< USB Type-C to DisplayPort */
|
||||
DFP_PIN_ASSIGNMMENT_F, /*!< USB Type-C to DisplayPort */
|
||||
UFP_PIN_ASSIGNMMENT_A, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
UFP_PIN_ASSIGNMMENT_B, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
UFP_PIN_ASSIGNMMENT_C, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
UFP_PIN_ASSIGNMMENT_D, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
UFP_PIN_ASSIGNMMENT_E, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
UFP_PIN_ASSIGNMMENT_F, /*!< USB Type-C to USB Type-C or Protocol Converter */
|
||||
USB_ONLY_PIN_ASSIGNMMENT /*!< USB 3.1 Only */
|
||||
} MUX_TypeCConnectorPinAssignmentTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Type-C port plug orientation
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
PLUG_ORIENTATION_NORMAL = 0,
|
||||
PLUG_ORIENTATION_FLIPPED
|
||||
} MUX_TypeCPlugOrientationTypeDef;
|
||||
|
||||
/**
|
||||
* @brief HDP (Hot Plug Detection) state
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
HPD_STATE_LOW = 0,
|
||||
HPD_STATE_HIGH
|
||||
} MUX_HPDStateTypeDef;
|
||||
|
||||
/**
|
||||
* @brief HPD Callback Function Pointer
|
||||
*/
|
||||
typedef void MUX_HPDCallbackFuncTypeDef(MUX_TypeCMuxIdTypeDef TypeCMuxId, MUX_HPDStateTypeDef HPDState);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Constants Exported Constants
|
||||
* @{
|
||||
*/
|
||||
#define DETn 2
|
||||
|
||||
#define DET_HPD_SOURCE_PIN GPIO_PIN_6 /* PC.06 */
|
||||
#define DET_HPD_SOURCE_GPIO_PORT GPIOC
|
||||
#define DET_HPD_SOURCE_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
#define DET_HPD_SOURCE_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
|
||||
|
||||
#define DET_EXTI_IRQn EXTI4_15_IRQn
|
||||
#define DET_EXTI_IRQHandler EXTI4_15_IRQHandler
|
||||
|
||||
#define SELn 1
|
||||
|
||||
#define SEL_HPDIN_PIN GPIO_PIN_5 /* PB.05 */
|
||||
#define SEL_HPDIN_GPIO_PORT GPIOB
|
||||
#define SEL_HPDIN_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define SEL_HPDIN_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
|
||||
#define DEBOUNCE_TIM_INSTANCE TIM6
|
||||
#define DEBOUNCE_TIM_CLK_ENABLE() __HAL_RCC_TIM6_CLK_ENABLE()
|
||||
#define DEBOUNCE_TIM_CLK_DISABLE() __HAL_RCC_TIM6_CLK_DISABLE()
|
||||
#define DEBOUNCE_TIM_COUNTER_CLK_FREQ() HAL_RCC_GetPCLK1Freq()
|
||||
#define DEBOUNCE_TIM_IRQn TIM6_DAC_LPTIM1_IRQn
|
||||
#define DEBOUNCE_TIME 1000u /* 1ms */
|
||||
#define DEBOUNCE_TIM_IRQHandler TIM6_DAC_LPTIM1_IRQHandler
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Variables Exported Variables
|
||||
* @{
|
||||
*/
|
||||
extern TIM_HandleTypeDef htim;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_MUX_Exported_Functions Exported Functions
|
||||
* @{
|
||||
*/
|
||||
MUX_StatusTypeDef BSP_MUX_Init(MUX_TypeCMuxIdTypeDef TypeCMuxId);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_DeInit(MUX_TypeCMuxIdTypeDef TypeCMuxId);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_Enable(MUX_TypeCMuxIdTypeDef TypeCMuxId);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_Disable(MUX_TypeCMuxIdTypeDef TypeCMuxId);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_SetDPPinAssignment(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_TypeCPlugOrientationTypeDef TypeCPlugOrientation,
|
||||
MUX_TypeCConnectorPinAssignmentTypeDef TypeCConnectorPinAssignment);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_SetEQGain(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
uint8_t EQGain);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_SetHPDState(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDStateTypeDef HPDState);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_GetHPDState(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDStateTypeDef * pHPDState);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_HPDIRQ(MUX_TypeCMuxIdTypeDef TypeCMuxId);
|
||||
|
||||
void BSP_MUX_Detect_HPD(void);
|
||||
|
||||
MUX_StatusTypeDef BSP_MUX_RegisterHPDCallbackFunc(MUX_TypeCMuxIdTypeDef TypeCMuxId,
|
||||
MUX_HPDCallbackFuncTypeDef * pHPDCallbackFunc);
|
||||
|
||||
#if defined(TUSB546_DEBUG) || defined(CBTL08GP053_DEBUG) || defined(SN65DP141_DEBUG)
|
||||
#define DEVICE_CBTL08GP053 0x00000001U
|
||||
#define DEVICE_SN65DP141 0x00000002U
|
||||
#define DEVICE_TUSB546 0x00000004U
|
||||
void BSP_MUX_DumpDeviceRegisters(uint32_t Device);
|
||||
#endif /* TUSB546_DEBUG || CBTL08GP053_DEBUG || SN65DP141_DEBUG */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_MUX_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,509 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_pwr.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the
|
||||
* stm32g0c1e_eval_pwr.c firmware driver.
|
||||
******************************************************************************
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_POWER
|
||||
#define STM32G0C1E_EVAL_POWER
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0xx.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_POWER STM32G0C1E_EVAL POWER
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_POWER_Exported_Types Exported Types based on BSP V1 specification (keep for legacy)
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief POWER Status
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
PWR_OK = 0,
|
||||
PWR_ERROR
|
||||
} PWR_StatusTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Power role
|
||||
*/
|
||||
#define PWR_PowerRoleTypeDef USBPD_PWR_PowerRoleTypeDef
|
||||
|
||||
/**
|
||||
* @brief Voltage control mode
|
||||
*/
|
||||
#define PWR_DCDCCtrlModeTypeDef USBPD_PWR_DCDCCtrlModeTypeDef
|
||||
|
||||
/**
|
||||
* @brief VBUS connection status
|
||||
*/
|
||||
#define PWR_VBUSConnectionStatusTypeDef USBPD_PWR_VBUSConnectionStatusTypeDef
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_POWER_Exported_Types2 Exported Types based on BSP V2 secification
|
||||
*@{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Power role
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
POWER_ROLE_SOURCE = 0,
|
||||
POWER_ROLE_SINK,
|
||||
POWER_ROLE_DUAL
|
||||
}
|
||||
USBPD_PWR_PowerRoleTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Voltage control mode
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
DCDC_CTRL_MODE_UNKNOWN = 0,
|
||||
DCDC_CTRL_MODE_GPIO,
|
||||
DCDC_CTRL_MODE_PWM,
|
||||
} USBPD_PWR_DCDCCtrlModeTypeDef;
|
||||
|
||||
/**
|
||||
* @brief VBUS connection status
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
VBUS_CONNECTED = 0,
|
||||
VBUS_NOT_CONNECTED
|
||||
} USBPD_PWR_VBUSConnectionStatusTypeDef;
|
||||
|
||||
/* Keep for Legacy BSP V1 */
|
||||
/**
|
||||
* @brief VBUS Detection Callback
|
||||
*/
|
||||
typedef void PWR_VBUSDetectCallbackFunc(uint32_t Instance,
|
||||
PWR_VBUSConnectionStatusTypeDef VBUSConnectionStatus);
|
||||
|
||||
/**
|
||||
* @brief VBUS Detection Callback
|
||||
*/
|
||||
typedef void USBPD_PWR_VBUSDetectCallbackFunc(uint32_t Instance,
|
||||
USBPD_PWR_VBUSConnectionStatusTypeDef VBUSConnectionStatus);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_POWER_Exported_Constants Exported Constants based on BSP V1 specification (keep for legacy)
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Number of TypeC ports
|
||||
*/
|
||||
#define PWR_TYPEC_PORT_NB USBPD_PWR_INSTANCES_NBR
|
||||
|
||||
/**
|
||||
* @brief Type-C port identifier
|
||||
*/
|
||||
#define TYPE_C_PORT_1 USBPD_PWR_TYPE_C_PORT_1
|
||||
#define TYPE_C_PORT_2 USBPD_PWR_TYPE_C_PORT_2
|
||||
|
||||
/**
|
||||
* @brief CC pin identifier
|
||||
*/
|
||||
#define TYPE_C_CC1 USBPD_PWR_TYPE_C_CC1
|
||||
#define TYPE_C_CC2 USBPD_PWR_TYPE_C_CC2
|
||||
|
||||
|
||||
/**
|
||||
* @brief VBUS disconnection threshold values (in mV)
|
||||
*/
|
||||
#define BSP_PWR_HIGH_VBUS_THRESHOLD USBPD_PWR_HIGH_VBUS_THRESHOLD
|
||||
#define BSP_PWR_LOW_VBUS_THRESHOLD USBPD_PWR_LOW_VBUS_THRESHOLD
|
||||
|
||||
/**
|
||||
* @brief VBUS discharge parameters
|
||||
*/
|
||||
#define BSP_PWR_DISCHARGE_MARGIN USBPD_PWR_DISCHARGE_MARGIN
|
||||
#define BSP_PWR_DISCHARGE_TIME USBPD_PWR_DISCHARGE_TIME
|
||||
|
||||
/**
|
||||
* @brief Calibration settings
|
||||
*/
|
||||
#define BSP_PWR_DCDC_PRECISION USBPD_PWR_DCDC_PRECISION
|
||||
#define BSP_PWR_CALIBRATION_ENABLED USBPD_PWR_CALIBRATION_ENABLED
|
||||
#define BSP_PWR_CALIBRATION_DISABLED USBPD_PWR_CALIBRATION_DISABLED
|
||||
|
||||
/**
|
||||
* @brief power timeout
|
||||
*/
|
||||
#define BSP_PWR_TIMEOUT_PDO USBPD_PWR_TIMEOUT_PDO
|
||||
#define BSP_PWR_TIMEOUT_APDO USBPD_PWR_TIMEOUT_APDO
|
||||
|
||||
/**
|
||||
* @brief Invalid value set during issue with voltage setting
|
||||
*/
|
||||
#define BSP_PWR_INVALID_VALUE USBPD_PWR_INVALID_VALUE
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_USBPD_PWR_Exported_Constants2 Exported Constants on BSP V2 specification
|
||||
@{
|
||||
*/
|
||||
/* Defines error for BSP V2 (copy for legacy reasons) */
|
||||
/* Common Error codes */
|
||||
#ifndef BSP_ERROR_NONE
|
||||
#define BSP_ERROR_NONE 0
|
||||
#endif
|
||||
#ifndef BSP_ERROR_NO_INIT
|
||||
#define BSP_ERROR_NO_INIT -1
|
||||
#endif
|
||||
#ifndef BSP_ERROR_WRONG_PARAM
|
||||
#define BSP_ERROR_WRONG_PARAM -2
|
||||
#endif
|
||||
#ifndef BSP_ERROR_PERIPH_FAILURE
|
||||
#define BSP_ERROR_PERIPH_FAILURE -4
|
||||
#endif
|
||||
#ifndef BSP_ERROR_FEATURE_NOT_SUPPORTED
|
||||
#define BSP_ERROR_FEATURE_NOT_SUPPORTED -11
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Number of TypeC ports
|
||||
*/
|
||||
#define USBPD_PWR_INSTANCES_NBR 2u
|
||||
|
||||
/**
|
||||
* @brief Type-C port identifier
|
||||
*/
|
||||
#define USBPD_PWR_TYPE_C_PORT_1 0u
|
||||
#define USBPD_PWR_TYPE_C_PORT_2 1u
|
||||
|
||||
/**
|
||||
* @brief CC pin identifier
|
||||
*/
|
||||
#define USBPD_PWR_TYPE_C_CC1 1u
|
||||
#define USBPD_PWR_TYPE_C_CC2 2u
|
||||
|
||||
/**
|
||||
* @brief VBUS disconnection threshold values (in mV)
|
||||
*/
|
||||
#define USBPD_PWR_HIGH_VBUS_THRESHOLD (2800u)
|
||||
#define USBPD_PWR_LOW_VBUS_THRESHOLD (750U)
|
||||
#define USBPD_PWR_VBUS_THRESHOLD_5V (3900u)
|
||||
#define USBPD_PWR_VBUS_THRESHOLD_9V (7000u)
|
||||
#define USBPD_PWR_VBUS_THRESHOLD_15V (12500u)
|
||||
#define USBPD_PWR_VBUS_THRESHOLD_20V (17000u)
|
||||
#define USBPD_PWR_VBUS_THRESHOLD_APDO (2150u)
|
||||
|
||||
/**
|
||||
* @brief VBUS discharge parameters
|
||||
*/
|
||||
#define USBPD_PWR_DISCHARGE_MARGIN (500u)
|
||||
#define USBPD_PWR_DISCHARGE_TIME (6u)
|
||||
|
||||
/**
|
||||
* @brief Calibration settings
|
||||
*/
|
||||
#define USBPD_PWR_DCDC_PRECISION (20u) /* DCDC output precision set to 20mV (Noise)*/
|
||||
#define USBPD_PWR_CALIBRATION_ENABLED (1u)
|
||||
#define USBPD_PWR_CALIBRATION_DISABLED (0u)
|
||||
|
||||
/**
|
||||
* @brief Standard VBUS voltage levels
|
||||
*/
|
||||
#define USBPD_PWR_VBUS_5V 5000u
|
||||
#define USBPD_PWR_VBUS_9V 9000u
|
||||
#define USBPD_PWR_VBUS_15V 15000u
|
||||
|
||||
/**
|
||||
* @brief power timeout
|
||||
*/
|
||||
#define USBPD_PWR_TIMEOUT_PDO 250u /* Timeout for PDO to PDO or PDO to APDO at 250ms*/
|
||||
#define USBPD_PWR_TIMEOUT_APDO 25u /* Timeout for APDO to APDO at 25ms*/
|
||||
|
||||
/**
|
||||
* @brief Invalid value set during issue with voltage setting
|
||||
*/
|
||||
#define USBPD_PWR_INVALID_VALUE 0xFFFFFFFFu
|
||||
|
||||
#define GPIO_SOURCE_EN_PIN GPIO_PIN_3 /* PD.03 */
|
||||
#define GPIO_SOURCE_EN_PORT GPIOD
|
||||
#define GPIO_SOURCE_EN_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VBUS_DISCHARGE1_PIN GPIO_PIN_13 /* PB.13 */
|
||||
#define GPIO_VBUS_DISCHARGE1_PORT GPIOB
|
||||
#define GPIO_VBUS_DISCHARGE1_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VBUS_DISCHARGE2_PIN GPIO_PIN_14 /* PB.14 */
|
||||
#define GPIO_VBUS_DISCHARGE2_PORT GPIOB
|
||||
#define GPIO_VBUS_DISCHARGE2_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VCONN_EN1_PIN GPIO_PIN_4 /* PD.04 */
|
||||
#define GPIO_VCONN_EN1_PORT GPIOD
|
||||
#define GPIO_VCONN_EN1_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VCONN_EN2_PIN GPIO_PIN_9 /* PB.09 */
|
||||
#define GPIO_VCONN_EN2_PORT GPIOB
|
||||
#define GPIO_VCONN_EN2_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VCONN_DISCHARGE1_PIN GPIO_PIN_2 /* PA.02 */
|
||||
#define GPIO_VCONN_DISCHARGE1_PORT GPIOA
|
||||
#define GPIO_VCONN_DISCHARGE1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
|
||||
#define GPIO_VCONN_DISCHARGE2_PIN GPIO_PIN_0 /* PB.00 */
|
||||
#define GPIO_VCONN_DISCHARGE2_PORT GPIOB
|
||||
#define GPIO_VCONN_DISCHARGE2_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
|
||||
#define GPIO_V_CTL2_PIN GPIO_PIN_1 /* PA.01 */
|
||||
#define GPIO_V_CTL2_PORT GPIOA
|
||||
#define GPIO_V_CTL2_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
|
||||
#define GPIO_V_CTL1_PIN GPIO_PIN_1 /* PC.01 */
|
||||
#define GPIO_V_CTL1_PORT GPIOC
|
||||
#define GPIO_V_CTL1_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
|
||||
|
||||
/* Definition of ADCx clock resources */
|
||||
#define ADCx ADC1
|
||||
#define ADCx_CLK_ENABLE() __HAL_RCC_ADC_CLK_ENABLE()
|
||||
#define ADCx_CLK_DISABLE() __HAL_RCC_ADC_CLK_DISABLE()
|
||||
|
||||
#define ADCx_FORCE_RESET() __HAL_RCC_ADC_FORCE_RESET()
|
||||
#define ADCx_RELEASE_RESET() __HAL_RCC_ADC_RELEASE_RESET()
|
||||
|
||||
/* Definition of ADCx channels */
|
||||
#define ADCx_CHANNEL_VSENSE_1 ADC_CHANNEL_9
|
||||
#define ADCx_CHANNEL_ISENSE_1 ADC_CHANNEL_11
|
||||
#define ADCx_CHANNEL_VSENSE_2 ADC_CHANNEL_3
|
||||
#define ADCx_CHANNEL_ISENSE_2 ADC_CHANNEL_16
|
||||
#define ADCx_CHANNEL_VSENSE_DCDC ADC_CHANNEL_15
|
||||
|
||||
/* Definition of ADCx channels */
|
||||
#define ADCxChanneln 5u
|
||||
|
||||
#define ADCx_CHANNEL_VSENSE_1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define ADCx_CHANNEL_VSENSE_1_GPIO_PORT GPIOB
|
||||
#define ADCx_CHANNEL_VSENSE_1_GPIO_PIN GPIO_PIN_1
|
||||
|
||||
#define ADCx_CHANNEL_ISENSE_1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define ADCx_CHANNEL_ISENSE_1_GPIO_PORT GPIOB
|
||||
#define ADCx_CHANNEL_ISENSE_1_GPIO_PIN GPIO_PIN_10
|
||||
|
||||
#define ADCx_CHANNEL_VSENSE_2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
#define ADCx_CHANNEL_VSENSE_2_GPIO_PORT GPIOA
|
||||
#define ADCx_CHANNEL_VSENSE_2_GPIO_PIN GPIO_PIN_3
|
||||
|
||||
#define ADCx_CHANNEL_ISENSE_2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define ADCx_CHANNEL_ISENSE_2_GPIO_PORT GPIOB
|
||||
#define ADCx_CHANNEL_ISENSE_2_GPIO_PIN GPIO_PIN_12
|
||||
|
||||
#define ADCx_CHANNEL_VSENSE_DCDC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define ADCx_CHANNEL_VSENSE_DCDC_GPIO_PORT GPIOB
|
||||
#define ADCx_CHANNEL_VSENSE_DCDC_GPIO_PIN GPIO_PIN_11
|
||||
|
||||
/* Definition of ADCx DMA resources */
|
||||
#define ADCx_DMA_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
|
||||
#define ADCx_DMA DMA1_Channel1
|
||||
|
||||
/* Definition of DMA NVIC resources */
|
||||
#define ADCx_DMA_IRQn DMA1_Channel1_IRQn
|
||||
#define ADCx_DMA_IRQHandler DMA1_Channel1_IRQHandler
|
||||
|
||||
/* Definition of ADCx NVIC resources */
|
||||
#define ADCx_IRQn ADC1_COMP_IRQn
|
||||
#define ADCx_IRQHandler ADC1_COMP_IRQHandler
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_POWER_Exported_Functions Exported Functions based on BSP V1 specification (keep for legacy)
|
||||
* @{
|
||||
*/
|
||||
PWR_StatusTypeDef BSP_PWR_Init(uint32_t PortId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSInit(uint32_t PortId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSDeInit(uint32_t PortId);
|
||||
|
||||
void BSP_PWR_VBUSIsGPIO(uint32_t *voltage1, uint32_t *voltage2, uint32_t *voltage3);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSOn(uint32_t PortId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSOff(uint32_t PortId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSSetVoltage_Fixed(uint32_t PortNum,
|
||||
uint32_t VbusTargetInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
uint32_t MaxOperatingCurrent);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSSetVoltage_Variable(uint32_t PortNum,
|
||||
uint32_t VbusTargetMaxInmv,
|
||||
uint32_t VbusTargetMinInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
uint32_t MaxOperatingCurrent);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSSetVoltage_Battery(uint32_t PortId,
|
||||
uint32_t VbusTargetMin,
|
||||
uint32_t VbusTargetMax,
|
||||
uint32_t OperatingPower,
|
||||
uint32_t MaxOperatingPower);
|
||||
PWR_StatusTypeDef BSP_PWR_VBUSSetVoltage_APDO(uint32_t PortId,
|
||||
uint32_t VbusTargetInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
int32_t Delta);
|
||||
uint32_t BSP_PWR_VBUSGetVoltage(uint32_t PortId);
|
||||
|
||||
int32_t BSP_PWR_VBUSGetCurrent(uint32_t PortId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VCONNInit(uint32_t PortId,
|
||||
uint32_t CCPinId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VCONNDeInit(uint32_t PortId,
|
||||
uint32_t CCPinId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VCONNOn(uint32_t PortId,
|
||||
uint32_t CCPinId);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_VCONNOff(uint32_t PortId,
|
||||
uint32_t CCPinId);
|
||||
|
||||
void BSP_PWR_SetVBUSDisconnectionThreshold(uint32_t PortId,
|
||||
uint32_t VoltageThreshold);
|
||||
|
||||
PWR_StatusTypeDef BSP_PWR_RegisterVBUSDetectCallback(uint32_t PortId,
|
||||
PWR_VBUSDetectCallbackFunc * pfnVBUSDetectCallback);
|
||||
|
||||
uint8_t BSP_PWR_VBUSIsOn(uint32_t PortId);
|
||||
|
||||
uint8_t BSP_PWR_VCONNIsOn(uint32_t PortId,
|
||||
uint32_t CCPinId);
|
||||
|
||||
uint32_t BSP_PWR_DCDCGetVoltage(uint32_t PortId);
|
||||
PWR_DCDCCtrlModeTypeDef BSP_PWR_DCDCGetCtrlMode(uint32_t PortId);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_USBPD_POWER_Exported_Functions2 Exported Functions based on BSP V2 specification
|
||||
* @{
|
||||
*/
|
||||
/* Common functions */
|
||||
int32_t BSP_USBPD_PWR_Init(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_Deinit(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSInit(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSDeInit(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSOn(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSOff(uint32_t Instance);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSSetVoltage_Fixed(uint32_t Instance,
|
||||
uint32_t VbusTargetInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
uint32_t MaxOperatingCurrent);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSSetVoltage_Variable(uint32_t Instance,
|
||||
uint32_t VbusTargetMaxInmv,
|
||||
uint32_t VbusTargetMinInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
uint32_t MaxOperatingCurrent);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSSetVoltage_Battery(uint32_t Instance,
|
||||
uint32_t VbusTargetMin,
|
||||
uint32_t VbusTargetMax,
|
||||
uint32_t OperatingPower,
|
||||
uint32_t MaxOperatingPower);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSSetVoltage_APDO(uint32_t Instance,
|
||||
uint32_t VbusTargetInmv,
|
||||
uint32_t OperatingCurrent,
|
||||
int32_t Delta);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSGetVoltage(uint32_t Instance, uint32_t *pVoltage);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSGetCurrent(uint32_t Instance, int32_t *pCurrent);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VCONNInit(uint32_t Instance,
|
||||
uint32_t CCPinId);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VCONNDeInit(uint32_t Instance,
|
||||
uint32_t CCPinId);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VCONNOn(uint32_t Instance,
|
||||
uint32_t CCPinId);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VCONNOff(uint32_t Instance,
|
||||
uint32_t CCPinId);
|
||||
|
||||
int32_t BSP_USBPD_PWR_SetVBUSDisconnectionThreshold(uint32_t Instance,
|
||||
uint32_t VoltageThreshold);
|
||||
|
||||
int32_t BSP_USBPD_PWR_RegisterVBUSDetectCallback(uint32_t Instance,
|
||||
USBPD_PWR_VBUSDetectCallbackFunc *pfnVBUSDetectCallback);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VBUSIsOn(uint32_t Instance, uint8_t *pState);
|
||||
|
||||
int32_t BSP_USBPD_PWR_VCONNIsOn(uint32_t Instance,
|
||||
uint32_t CCPinId, uint8_t *pState);
|
||||
|
||||
int32_t BSP_USBPD_PWR_DCDCGetCtrlMode(uint32_t Instance, USBPD_PWR_DCDCCtrlModeTypeDef *pDCDCCtrl);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_POWER */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1043
USB-PD_Provider_1port/Drivers/BSP/STM32G0C1E-EV/stm32g0c1e_eval_sd.c
Normal file
1043
USB-PD_Provider_1port/Drivers/BSP/STM32G0C1E-EV/stm32g0c1e_eval_sd.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,234 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_sd.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains the common defines and functions prototypes for
|
||||
* the STM32G0C1E_EVAL_sd.c driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_SD_H
|
||||
#define STM32G0C1E_EVAL_SD_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0c1e_eval.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_SD STM32G0C1E_EVAL SD
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_SD_Exported_Types Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief SD status structure definition
|
||||
*/
|
||||
enum {
|
||||
BSP_SD_OK = 0x00,
|
||||
MSD_OK = 0x00,
|
||||
BSP_SD_ERROR = 0x01,
|
||||
MSD_ERROR = 0x01,
|
||||
BSP_SD_TIMEOUT
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief SD transfer state definition
|
||||
*/
|
||||
#define SD_TRANSFER_OK ((uint8_t)0x00)
|
||||
#define SD_TRANSFER_BUSY ((uint8_t)0x01)
|
||||
#define SD_TRANSFER_ERROR ((uint8_t)0x02)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief SD status structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Reserved1:2; /* Reserved */
|
||||
uint16_t DeviceSize:12; /* Device Size */
|
||||
uint8_t MaxRdCurrentVDDMin:3; /* Max. read current @ VDD min */
|
||||
uint8_t MaxRdCurrentVDDMax:3; /* Max. read current @ VDD max */
|
||||
uint8_t MaxWrCurrentVDDMin:3; /* Max. write current @ VDD min */
|
||||
uint8_t MaxWrCurrentVDDMax:3; /* Max. write current @ VDD max */
|
||||
uint8_t DeviceSizeMul:3; /* Device size multiplier */
|
||||
} struct_v1;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Reserved1:6; /* Reserved */
|
||||
uint32_t DeviceSize:22; /* Device Size */
|
||||
uint8_t Reserved2:1; /* Reserved */
|
||||
} struct_v2;
|
||||
|
||||
/**
|
||||
* @brief Card Specific Data: CSD Register
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/* Header part */
|
||||
uint8_t CSDStruct:2; /* CSD structure */
|
||||
uint8_t Reserved1:6; /* Reserved */
|
||||
uint8_t TAAC:8; /* Data read access-time 1 */
|
||||
uint8_t NSAC:8; /* Data read access-time 2 in CLK cycles */
|
||||
uint8_t MaxBusClkFrec:8; /* Max. bus clock frequency */
|
||||
uint16_t CardComdClasses:12; /* Card command classes */
|
||||
uint8_t RdBlockLen:4; /* Max. read data block length */
|
||||
uint8_t PartBlockRead:1; /* Partial blocks for read allowed */
|
||||
uint8_t WrBlockMisalign:1; /* Write block misalignment */
|
||||
uint8_t RdBlockMisalign:1; /* Read block misalignment */
|
||||
uint8_t DSRImpl:1; /* DSR implemented */
|
||||
|
||||
/* v1 or v2 struct */
|
||||
union csd_version {
|
||||
struct_v1 v1;
|
||||
struct_v2 v2;
|
||||
} version;
|
||||
|
||||
uint8_t EraseSingleBlockEnable:1; /* Erase single block enable */
|
||||
uint8_t EraseSectorSize:7; /* Erase group size multiplier */
|
||||
uint8_t WrProtectGrSize:7; /* Write protect group size */
|
||||
uint8_t WrProtectGrEnable:1; /* Write protect group enable */
|
||||
uint8_t Reserved2:2; /* Reserved */
|
||||
uint8_t WrSpeedFact:3; /* Write speed factor */
|
||||
uint8_t MaxWrBlockLen:4; /* Max. write data block length */
|
||||
uint8_t WriteBlockPartial:1; /* Partial blocks for write allowed */
|
||||
uint8_t Reserved3:5; /* Reserved */
|
||||
uint8_t FileFormatGrouop:1; /* File format group */
|
||||
uint8_t CopyFlag:1; /* Copy flag (OTP) */
|
||||
uint8_t PermWrProtect:1; /* Permanent write protection */
|
||||
uint8_t TempWrProtect:1; /* Temporary write protection */
|
||||
uint8_t FileFormat:2; /* File Format */
|
||||
uint8_t Reserved4:2; /* Reserved */
|
||||
uint8_t crc:7; /* Reserved */
|
||||
uint8_t Reserved5:1; /* always 1*/
|
||||
|
||||
} SD_CSD;
|
||||
|
||||
/**
|
||||
* @brief Card Identification Data: CID Register
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
__IO uint8_t ManufacturerID; /* ManufacturerID */
|
||||
__IO uint16_t OEM_AppliID; /* OEM/Application ID */
|
||||
__IO uint32_t ProdName1; /* Product Name part1 */
|
||||
__IO uint8_t ProdName2; /* Product Name part2*/
|
||||
__IO uint8_t ProdRev; /* Product Revision */
|
||||
__IO uint32_t ProdSN; /* Product Serial Number */
|
||||
__IO uint8_t Reserved1; /* Reserved1 */
|
||||
__IO uint16_t ManufactDate; /* Manufacturing Date */
|
||||
__IO uint8_t CID_CRC; /* CID CRC */
|
||||
__IO uint8_t Reserved2; /* always 1 */
|
||||
} SD_CID;
|
||||
|
||||
/**
|
||||
* @brief SD Card information
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
SD_CSD Csd;
|
||||
SD_CID Cid;
|
||||
uint32_t CardCapacity; /*!< Card Capacity */
|
||||
uint32_t CardBlockSize; /*!< Card Block Size */
|
||||
uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
|
||||
uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
|
||||
} SD_CardInfo;
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_SPI_SD_Exported_Constants Exported Constants
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Block Size
|
||||
*/
|
||||
#define SD_BLOCK_SIZE 0x200
|
||||
|
||||
/**
|
||||
* @brief SD detection on its memory slot
|
||||
*/
|
||||
#define SD_PRESENT ((uint8_t)0x01)
|
||||
#define SD_NOT_PRESENT ((uint8_t)0x00)
|
||||
|
||||
#define SD_DATATIMEOUT ((uint32_t)100000000)
|
||||
|
||||
/**
|
||||
* @brief SD Card information structure
|
||||
*/
|
||||
#define BSP_SD_CardInfo SD_CardInfo
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_SD_Exported_Functions Exported Functions
|
||||
* @{
|
||||
*/
|
||||
uint8_t BSP_SD_Init(void);
|
||||
uint8_t BSP_SD_IsDetected(void);
|
||||
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
|
||||
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
|
||||
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
|
||||
uint8_t BSP_SD_GetCardState(void);
|
||||
uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo);
|
||||
|
||||
/* Link functions for SD Card peripheral */
|
||||
void SD_IO_Init(void);
|
||||
void SD_IO_CSState(uint8_t state);
|
||||
void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength);
|
||||
uint8_t SD_IO_WriteByte(uint8_t Data);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_SD_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,167 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_tsensor.c
|
||||
* @author MCD Application Team
|
||||
* @brief This file provides a set of functions needed to manage the I2C STLM75
|
||||
* temperature sensor mounted on STM32G0C1E-EV board .
|
||||
* It implements a high level communication layer for read and write
|
||||
* from/to this sensor. The needed STM32G0xx hardware resources (I2C and
|
||||
* GPIO) are defined in stm32g0c1e_eval.h file, and the initialization is
|
||||
* performed in TSENSOR_IO_Init() function declared in stm32g0c1e_eval.c
|
||||
* file.
|
||||
* You can easily tailor this driver to any other development board,
|
||||
* by just adapting the defines for hardware resources and
|
||||
* TSENSOR_IO_Init() function.
|
||||
*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Pin assignment |
|
||||
* +---------------------------------------+-----------+-------------+
|
||||
* | STM32G0xx I2C Pins | STLM75 | Pin |
|
||||
* +---------------------------------------+-----------+-------------+
|
||||
* | STLM75_I2C_SDA_PIN/ SDA | SDA | 1 |
|
||||
* | STLM75_I2C_SCL_PIN/ SCL | SCL | 2 |
|
||||
* | STLM75_I2C_SMBUSALERT_PIN/ SMBUS ALERT| OS/INT | 3 |
|
||||
* | . | GND | 4 (0V) |
|
||||
* | . | GND | 5 (0V) |
|
||||
* | . | GND | 6 (0V) |
|
||||
* | . | GND | 7 (0V) |
|
||||
* | . | VDD | 8 (3.3V)|
|
||||
* +---------------------------------------+-----------+-------------+
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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 "stm32g0c1e_eval_tsensor.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_TSENSOR
|
||||
* @brief This file includes the STLM75 Temperature Sensor driver of
|
||||
* STM32G0C1E-EV boards.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_TSENSOR_Private_Variables Private Variables
|
||||
* @{
|
||||
*/
|
||||
static TSENSOR_DrvTypeDef *tsensor_drv;
|
||||
__IO uint16_t TSENSORAddress = 0;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL_TSENSOR_Exported_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initializes peripherals used by the I2C Temperature Sensor driver.
|
||||
* @retval TSENSOR status
|
||||
*/
|
||||
uint32_t BSP_TSENSOR_Init(void)
|
||||
{
|
||||
uint8_t ret = TSENSOR_ERROR;
|
||||
TSENSOR_InitTypeDef STLM75_InitStructure;
|
||||
|
||||
/* Temperature Sensor Initialization */
|
||||
if(Stlm75Drv.IsReady(TSENSOR_I2C_ADDRESS_A01, TSENSOR_MAX_TRIALS) == HAL_OK)
|
||||
{
|
||||
/* Initialize the temperature sensor driver structure */
|
||||
TSENSORAddress = TSENSOR_I2C_ADDRESS_A01;
|
||||
tsensor_drv = &Stlm75Drv;
|
||||
|
||||
ret = TSENSOR_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Stlm75Drv.IsReady(TSENSOR_I2C_ADDRESS_A02, TSENSOR_MAX_TRIALS) == HAL_OK)
|
||||
{
|
||||
/* Initialize the temperature sensor driver structure */
|
||||
TSENSORAddress = TSENSOR_I2C_ADDRESS_A02;
|
||||
tsensor_drv = &Stlm75Drv;
|
||||
|
||||
ret = TSENSOR_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = TSENSOR_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == TSENSOR_OK)
|
||||
{
|
||||
/* Configure Temperature Sensor : Conversion 9 bits in continuous mode */
|
||||
/* Alert outside range Limit Temperature 12° <-> 24°c */
|
||||
STLM75_InitStructure.AlertMode = STLM75_INTERRUPT_MODE;
|
||||
STLM75_InitStructure.ConversionMode = STLM75_CONTINUOUS_MODE;
|
||||
STLM75_InitStructure.TemperatureLimitHigh = 24;
|
||||
STLM75_InitStructure.TemperatureLimitLow = 12;
|
||||
|
||||
/* TSENSOR Init */
|
||||
tsensor_drv->Init(TSENSORAddress, &STLM75_InitStructure);
|
||||
|
||||
ret = TSENSOR_OK;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the Temperature Sensor status.
|
||||
* @retval The Temperature Sensor status.
|
||||
*/
|
||||
uint8_t BSP_TSENSOR_ReadStatus(void)
|
||||
{
|
||||
return (tsensor_drv->ReadStatus(TSENSORAddress));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read Temperature register of STLM75.
|
||||
* @retval STLM75 measured temperature value.
|
||||
*/
|
||||
float BSP_TSENSOR_ReadTemp(void)
|
||||
{
|
||||
return tsensor_drv->ReadTemp(TSENSORAddress);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g0c1e_eval_tsensor.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the
|
||||
* stm32g0c1e_eval_tsensor.c firmware driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef STM32G0C1E_EVAL_TSENSOR_H
|
||||
#define STM32G0C1E_EVAL_TSENSOR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32g0c1e_eval.h"
|
||||
#include "../Components/stlm75/stlm75.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G0C1E_EVAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_TSENSOR STM32G0C1E_EVAL TSENSOR
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_TSENSOR_Exported_Types Exported Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief TSENSOR Status
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
TSENSOR_OK = 0,
|
||||
TSENSOR_ERROR
|
||||
} TSENSOR_Status_TypDef;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_TSENSOR_Exported_Constants Exported Constants
|
||||
* @{
|
||||
*/
|
||||
/* Temperature Sensor hardware I2C address */
|
||||
#define TSENSOR_I2C_ADDRESS_A01 0x90
|
||||
#define TSENSOR_I2C_ADDRESS_A02 0x92
|
||||
|
||||
/* Maximum number of trials use for STTS751_IsReady function */
|
||||
#define TSENSOR_MAX_TRIALS 50
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32G0C1E_EVAL_TSENSOR_Exported_Functions Exported Functions
|
||||
* @{
|
||||
*/
|
||||
uint32_t BSP_TSENSOR_Init(void);
|
||||
uint8_t BSP_TSENSOR_ReadStatus(void);
|
||||
float BSP_TSENSOR_ReadTemp(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STM32G0C1E_EVAL_TSENSOR_H */
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
Loading…
Add table
Add a link
Reference in a new issue