mirror of https://github.com/ARMmbed/mbed-os.git
STM32Cube_FW_WB_V1.4.0 - template part
parent
b4f3b0799d
commit
c39a13d10c
|
@ -1,9 +1,9 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* File Name : app_common.h
|
* File Name : app_common.h
|
||||||
* Description : App Common application configuration file for BLE
|
* Description : App Common application configuration file for STM32WPAN Middleware.
|
||||||
* middleWare.
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "hw_conf.h"
|
#include "hw_conf.h"
|
||||||
|
#include "hw_if.h"
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Transparent Mode Config
|
* Transparent Mode Config
|
||||||
|
@ -431,6 +432,13 @@ typedef enum
|
||||||
CFG_LPM_APP,
|
CFG_LPM_APP,
|
||||||
} CFG_LPM_Id_t;
|
} CFG_LPM_Id_t;
|
||||||
|
|
||||||
#endif /*__APP_CONFIG_H */
|
/******************************************************************************
|
||||||
|
* OTP manager
|
||||||
|
******************************************************************************/
|
||||||
|
#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
|
||||||
|
|
||||||
|
#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
|
||||||
|
|
||||||
|
#endif /*APP_CONF_H */
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* File Name : hw_conf.h
|
* File Name : hw_conf.h
|
||||||
* Description : Hardware configuration file for BLE
|
* Description : Hardware configuration file for BLE
|
||||||
* middleWare.
|
* middleWare.
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
* All rights reserved.</center></h2>
|
* All rights reserved.</center></h2>
|
||||||
*
|
*
|
||||||
* This software component is licensed by ST under BSD 3-Clause license,
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
|
|
@ -0,0 +1,250 @@
|
||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file hw_if.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Hardware Interface
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef HW_IF_H
|
||||||
|
#define HW_IF_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32wbxx.h"
|
||||||
|
#include "stm32wbxx_ll_exti.h"
|
||||||
|
#include "stm32wbxx_ll_system.h"
|
||||||
|
#include "stm32wbxx_ll_rcc.h"
|
||||||
|
#include "stm32wbxx_ll_ipcc.h"
|
||||||
|
#include "stm32wbxx_ll_bus.h"
|
||||||
|
#include "stm32wbxx_ll_pwr.h"
|
||||||
|
#include "stm32wbxx_ll_cortex.h"
|
||||||
|
#include "stm32wbxx_ll_utils.h"
|
||||||
|
#include "stm32wbxx_ll_hsem.h"
|
||||||
|
#include "stm32wbxx_ll_gpio.h"
|
||||||
|
#include "stm32wbxx_ll_rtc.h"
|
||||||
|
|
||||||
|
#ifdef USE_STM32WBXX_USB_DONGLE
|
||||||
|
#include "stm32wbxx_usb_dongle.h"
|
||||||
|
#endif
|
||||||
|
#ifdef USE_STM32WBXX_NUCLEO
|
||||||
|
#include "stm32wbxx_nucleo.h"
|
||||||
|
#endif
|
||||||
|
#ifdef USE_X_NUCLEO_EPD
|
||||||
|
#include "x_nucleo_epd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Private includes ----------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* HW UART
|
||||||
|
******************************************************************************/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
hw_uart1,
|
||||||
|
hw_uart2,
|
||||||
|
hw_lpuart1,
|
||||||
|
} hw_uart_id_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
hw_uart_ok,
|
||||||
|
hw_uart_error,
|
||||||
|
hw_uart_busy,
|
||||||
|
hw_uart_to,
|
||||||
|
} hw_status_t;
|
||||||
|
|
||||||
|
void HW_UART_Init(hw_uart_id_t hw_uart_id);
|
||||||
|
void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
|
||||||
|
void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
|
||||||
|
hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout);
|
||||||
|
hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*Callback)(void));
|
||||||
|
void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
|
||||||
|
void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* HW TimerServer
|
||||||
|
******************************************************************************/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* This setting is used when standby mode is supported.
|
||||||
|
* hw_ts_InitMode_Limited should be used when the device restarts from Standby Mode. In that case, the Timer Server does
|
||||||
|
* not re-initialized its context. Only the Hardware register which content has been lost is reconfigured
|
||||||
|
* Otherwise, hw_ts_InitMode_Full should be requested (Start from Power ON) and everything is re-initialized.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
hw_ts_InitMode_Full,
|
||||||
|
hw_ts_InitMode_Limited,
|
||||||
|
} HW_TS_InitMode_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When a Timer is created as a SingleShot timer, it is not automatically restarted when the timeout occurs. However,
|
||||||
|
* the timer is kept reserved in the list and could be restarted at anytime with HW_TS_Start()
|
||||||
|
*
|
||||||
|
* When a Timer is created as a Repeated timer, it is automatically restarted when the timeout occurs.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
hw_ts_SingleShot,
|
||||||
|
hw_ts_Repeated
|
||||||
|
} HW_TS_Mode_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hw_ts_Successful is returned when a Timer has been successfully created with HW_TS_Create(). Otherwise, hw_ts_Failed
|
||||||
|
* is returned. When hw_ts_Failed is returned, that means there are not enough free slots in the list to create a
|
||||||
|
* Timer. In that case, CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER should be increased
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
hw_ts_Successful,
|
||||||
|
hw_ts_Failed,
|
||||||
|
}HW_TS_ReturnStatus_t;
|
||||||
|
|
||||||
|
typedef void (*HW_TS_pTimerCb_t)(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the timer server
|
||||||
|
* This API shall be called by the application before any timer is requested to the timer server. It
|
||||||
|
* configures the RTC module to be connected to the LSI input clock.
|
||||||
|
*
|
||||||
|
* @param TimerInitMode: When the device restarts from Standby, it should request hw_ts_InitMode_Limited so that the
|
||||||
|
* Timer context is not re-initialized. Otherwise, hw_ts_InitMode_Full should be requested
|
||||||
|
* @param hrtc: RTC Handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *hrtc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Interface to create a virtual timer
|
||||||
|
* The user shall call this API to create a timer. Once created, the timer is reserved to the module until it
|
||||||
|
* has been deleted. When creating a timer, the user shall specify the mode (single shot or repeated), the
|
||||||
|
* callback to be notified when the timer expires and a module ID to identify in the timer interrupt handler
|
||||||
|
* which module is concerned. In return, the user gets a timer ID to handle it.
|
||||||
|
*
|
||||||
|
* @param TimerProcessID: This is an identifier provided by the user and returned in the callback to allow
|
||||||
|
* identification of the requester
|
||||||
|
* @param pTimerId: Timer Id returned to the user to request operation (start, stop, delete)
|
||||||
|
* @param TimerMode: Mode of the virtual timer (Single shot or repeated)
|
||||||
|
* @param pTimerCallBack: Callback when the virtual timer expires
|
||||||
|
* @retval HW_TS_ReturnStatus_t: Return whether the creation is sucessfull or not
|
||||||
|
*/
|
||||||
|
HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pTimerCallBack);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Stop a virtual timer
|
||||||
|
* This API may be used to stop a running timer. A timer which is stopped is move to the pending state.
|
||||||
|
* A pending timer may be restarted at any time with a different timeout value but the mode cannot be changed.
|
||||||
|
* Nothing is done when it is called to stop a timer which has been already stopped
|
||||||
|
*
|
||||||
|
* @param TimerID: Id of the timer to stop
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_Stop(uint8_t TimerID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Start a virtual timer
|
||||||
|
* This API shall be used to start a timer. The timeout value is specified and may be different each time.
|
||||||
|
* When the timer is in the single shot mode, it will move to the pending state when it expires. The user may
|
||||||
|
* restart it at any time with a different timeout value. When the timer is in the repeated mode, it always
|
||||||
|
* stay in the running state. When the timer expires, it will be restarted with the same timeout value.
|
||||||
|
* This API shall not be called on a running timer.
|
||||||
|
*
|
||||||
|
* @param TimerID: The ID Id of the timer to start
|
||||||
|
* @param timeout_ticks: Number of ticks of the virtual timer (Maximum value is (0xFFFFFFFF-0xFFFF = 0xFFFF0000)
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_Start(uint8_t TimerID, uint32_t timeout_ticks);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Delete a virtual timer from the list
|
||||||
|
* This API should be used when a timer is not needed anymore by the user. A deleted timer is removed from
|
||||||
|
* the timer list managed by the timer server. It cannot be restarted again. The user has to go with the
|
||||||
|
* creation of a new timer if required and may get a different timer id
|
||||||
|
*
|
||||||
|
* @param TimerID: The ID of the timer to remove from the list
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_Delete(uint8_t TimerID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Schedule the timer list on the timer interrupt handler
|
||||||
|
* This interrupt handler shall be called by the application in the RTC interrupt handler. This handler takes
|
||||||
|
* care of clearing all status flag required in the RTC and EXTI peripherals
|
||||||
|
*
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_RTC_Wakeup_Handler(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the number of ticks to count before the interrupt
|
||||||
|
* This API returns the number of ticks left to be counted before an interrupt is generated by the
|
||||||
|
* Timer Server. This API may be used by the application for power management optimization. When the system
|
||||||
|
* enters low power mode, the mode selection is a tradeoff between the wakeup time where the CPU is running
|
||||||
|
* and the time while the CPU will be kept in low power mode before next wakeup. The deeper is the
|
||||||
|
* low power mode used, the longer is the wakeup time. The low power mode management considering wakeup time
|
||||||
|
* versus time in low power mode is implementation specific
|
||||||
|
* When the timer is disabled (No timer in the list), it returns 0xFFFF
|
||||||
|
*
|
||||||
|
* @param None
|
||||||
|
* @retval The number of ticks left to count
|
||||||
|
*/
|
||||||
|
uint16_t HW_TS_RTC_ReadLeftTicksToCount(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Notify the application that a registered timer has expired
|
||||||
|
* This API shall be implemented by the user application.
|
||||||
|
* This API notifies the application that a timer expires. This API is running in the RTC Wakeup interrupt
|
||||||
|
* context. The application may implement an Operating System to change the context priority where the timer
|
||||||
|
* callback may be handled. This API provides the module ID to identify which module is concerned and to allow
|
||||||
|
* sending the information to the correct task
|
||||||
|
*
|
||||||
|
* @param TimerProcessID: The TimerProcessId associated with the timer when it has been created
|
||||||
|
* @param TimerID: The TimerID of the expired timer
|
||||||
|
* @param pTimerCallBack: The Callback associated with the timer when it has been created
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_RTC_Int_AppNot(uint32_t TimerProcessID, uint8_t TimerID, HW_TS_pTimerCb_t pTimerCallBack);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Notify the application that the wakeupcounter has been updated
|
||||||
|
* This API should be implemented by the user application
|
||||||
|
* This API notifies the application that the counter has been updated. This is expected to be used along
|
||||||
|
* with the HW_TS_RTC_ReadLeftTicksToCount () API. It could be that the counter has been updated since the
|
||||||
|
* last call of HW_TS_RTC_ReadLeftTicksToCount () and before entering low power mode. This notification
|
||||||
|
* provides a way to the application to solve that race condition to reevaluate the counter value before
|
||||||
|
* entering low power mode
|
||||||
|
*
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void HW_TS_RTC_CountUpdated_AppNot(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*HW_IF_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -1,9 +1,9 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* File Name : Target/hw_ipcc.c
|
* File Name : Target/hw_ipcc.c
|
||||||
* Description : Hardware IPCC source file for BLE
|
* Description : Hardware IPCC source file for STM32WPAN Middleware.
|
||||||
* middleWare.
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
|
@ -38,9 +38,23 @@ static void HW_IPCC_MM_FreeBufHandler( void );
|
||||||
static void HW_IPCC_SYS_CmdEvtHandler( void );
|
static void HW_IPCC_SYS_CmdEvtHandler( void );
|
||||||
static void HW_IPCC_SYS_EvtHandler( void );
|
static void HW_IPCC_SYS_EvtHandler( void );
|
||||||
static void HW_IPCC_TRACES_EvtHandler( void );
|
static void HW_IPCC_TRACES_EvtHandler( void );
|
||||||
|
|
||||||
|
#ifdef THREAD_WB
|
||||||
static void HW_IPCC_OT_CmdEvtHandler( void );
|
static void HW_IPCC_OT_CmdEvtHandler( void );
|
||||||
static void HW_IPCC_THREAD_NotEvtHandler( void );
|
static void HW_IPCC_THREAD_NotEvtHandler( void );
|
||||||
static void HW_IPCC_THREAD_CliNotEvtHandler( void );
|
static void HW_IPCC_THREAD_CliNotEvtHandler( void );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MAC_802_15_4_WB
|
||||||
|
static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void );
|
||||||
|
static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ZIGBEE_WB
|
||||||
|
static void HW_IPCC_ZIGBEE_CmdEvtHandler( void );
|
||||||
|
static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void );
|
||||||
|
static void HW_IPCC_ZIGBEE_CliNotifEvtHandler( void );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Public function definition -----------------------------------------------*/
|
/* Public function definition -----------------------------------------------*/
|
||||||
|
|
||||||
|
@ -49,71 +63,125 @@ static void HW_IPCC_THREAD_CliNotEvtHandler( void );
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_Rx_Handler( void )
|
void HW_IPCC_Rx_Handler( void )
|
||||||
{
|
{
|
||||||
if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
|
if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
|
||||||
{
|
{
|
||||||
HW_IPCC_THREAD_NotEvtHandler();
|
HW_IPCC_SYS_EvtHandler();
|
||||||
}
|
}
|
||||||
else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
|
#ifdef MAC_802_15_4_WB
|
||||||
{
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL ))
|
||||||
HW_IPCC_BLE_EvtHandler();
|
{
|
||||||
}
|
HW_IPCC_MAC_802_15_4_NotEvtHandler();
|
||||||
else if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
|
}
|
||||||
{
|
#endif /* MAC_802_15_4_WB */
|
||||||
HW_IPCC_SYS_EvtHandler();
|
#ifdef THREAD_WB
|
||||||
}
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
|
||||||
else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
|
{
|
||||||
{
|
HW_IPCC_THREAD_NotEvtHandler();
|
||||||
HW_IPCC_TRACES_EvtHandler();
|
}
|
||||||
}
|
|
||||||
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
|
||||||
{
|
{
|
||||||
HW_IPCC_THREAD_CliNotEvtHandler();
|
HW_IPCC_THREAD_CliNotEvtHandler();
|
||||||
}
|
}
|
||||||
|
#endif /* THREAD_WB */
|
||||||
|
#ifdef ZIGBEE_WB
|
||||||
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_ZIGBEE_StackNotifEvtHandler();
|
||||||
|
}
|
||||||
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_ZIGBEE_CliNotifEvtHandler();
|
||||||
|
}
|
||||||
|
#endif /* ZIGBEE_WB */
|
||||||
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_BLE_EvtHandler();
|
||||||
|
}
|
||||||
|
else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_TRACES_EvtHandler();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_Tx_Handler( void )
|
void HW_IPCC_Tx_Handler( void )
|
||||||
{
|
{
|
||||||
if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
|
if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
|
||||||
{
|
{
|
||||||
HW_IPCC_OT_CmdEvtHandler();
|
HW_IPCC_SYS_CmdEvtHandler();
|
||||||
}
|
}
|
||||||
else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
|
#ifdef MAC_802_15_4_WB
|
||||||
{
|
else if (HW_IPCC_TX_PENDING( HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL ))
|
||||||
HW_IPCC_SYS_CmdEvtHandler();
|
{
|
||||||
}
|
HW_IPCC_MAC_802_15_4_CmdEvtHandler();
|
||||||
else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
|
}
|
||||||
{
|
#endif /* MAC_802_15_4_WB */
|
||||||
HW_IPCC_MM_FreeBufHandler();
|
#ifdef THREAD_WB
|
||||||
}
|
else if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
|
||||||
else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
|
{
|
||||||
{
|
HW_IPCC_OT_CmdEvtHandler();
|
||||||
HW_IPCC_BLE_AclDataEvtHandler();
|
}
|
||||||
}
|
#endif /* THREAD_WB */
|
||||||
return;
|
#ifdef ZIGBEE_WB
|
||||||
|
if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_ZIGBEE_CmdEvtHandler();
|
||||||
|
}
|
||||||
|
#endif /* ZIGBEE_WB */
|
||||||
|
else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_SYS_CmdEvtHandler();
|
||||||
|
}
|
||||||
|
else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_MM_FreeBufHandler();
|
||||||
|
}
|
||||||
|
else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
|
||||||
|
{
|
||||||
|
HW_IPCC_BLE_AclDataEvtHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* GENERAL
|
* GENERAL
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_Enable( void )
|
void HW_IPCC_Enable( void )
|
||||||
{
|
{
|
||||||
LL_PWR_EnableBootC2();
|
/**
|
||||||
|
* When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
|
||||||
|
*/
|
||||||
|
LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
|
||||||
|
LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
|
||||||
|
|
||||||
return;
|
/**
|
||||||
|
* In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
|
||||||
|
* In that case, to keep the mechanism transparent to the user application, it shall call the system command
|
||||||
|
* SHCI_C2_Reinit( ) before jumping to the application.
|
||||||
|
* When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
|
||||||
|
* This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
|
||||||
|
* When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
|
||||||
|
* So, by default, the application shall both set the event flag and set the C2BOOT bit.
|
||||||
|
*/
|
||||||
|
__SEV( ); /* Set the internal event flag and send an event to the CPU2 */
|
||||||
|
__WFE( ); /* Clear the internal event flag */
|
||||||
|
LL_PWR_EnableBootC2( );
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_Init( void )
|
void HW_IPCC_Init( void )
|
||||||
{
|
{
|
||||||
LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
|
LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
|
||||||
|
|
||||||
LL_C1_IPCC_EnableIT_RXO( IPCC );
|
LL_C1_IPCC_EnableIT_RXO( IPCC );
|
||||||
LL_C1_IPCC_EnableIT_TXF( IPCC );
|
LL_C1_IPCC_EnableIT_TXF( IPCC );
|
||||||
|
|
||||||
HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
|
HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
|
||||||
HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
|
HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -121,25 +189,25 @@ void HW_IPCC_Init( void )
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_BLE_Init( void )
|
void HW_IPCC_BLE_Init( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_BLE_SendCmd( void )
|
void HW_IPCC_BLE_SendCmd( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_BLE_EvtHandler( void )
|
static void HW_IPCC_BLE_EvtHandler( void )
|
||||||
{
|
{
|
||||||
HW_IPCC_BLE_RxEvtNot();
|
HW_IPCC_BLE_RxEvtNot();
|
||||||
|
|
||||||
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_BLE_SendAclData( void )
|
void HW_IPCC_BLE_SendAclData( void )
|
||||||
|
@ -167,98 +235,147 @@ __weak void HW_IPCC_BLE_RxEvtNot( void ){};
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_SYS_Init( void )
|
void HW_IPCC_SYS_Init( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_SYS_SendCmd( void )
|
void HW_IPCC_SYS_SendCmd( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
||||||
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_SYS_CmdEvtHandler( void )
|
static void HW_IPCC_SYS_CmdEvtHandler( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
HW_IPCC_SYS_CmdEvtNot();
|
HW_IPCC_SYS_CmdEvtNot();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_SYS_EvtHandler( void )
|
static void HW_IPCC_SYS_EvtHandler( void )
|
||||||
{
|
{
|
||||||
HW_IPCC_SYS_EvtNot();
|
HW_IPCC_SYS_EvtNot();
|
||||||
|
|
||||||
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
|
__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
|
||||||
__weak void HW_IPCC_SYS_EvtNot( void ){};
|
__weak void HW_IPCC_SYS_EvtNot( void ){};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* MAC 802.15.4
|
||||||
|
******************************************************************************/
|
||||||
|
#ifdef MAC_802_15_4_WB
|
||||||
|
void HW_IPCC_MAC_802_15_4_Init( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_MAC_802_15_4_SendCmd( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_MAC_802_15_4_SendAck( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
|
HW_IPCC_MAC_802_15_4_CmdEvtNot();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
HW_IPCC_MAC_802_15_4_EvtNot();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot( void ){};
|
||||||
|
__weak void HW_IPCC_MAC_802_15_4_EvtNot( void ){};
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* THREAD
|
* THREAD
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#ifdef THREAD_WB
|
||||||
void HW_IPCC_THREAD_Init( void )
|
void HW_IPCC_THREAD_Init( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_OT_SendCmd( void )
|
void HW_IPCC_OT_SendCmd( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_CLI_SendCmd( void )
|
void HW_IPCC_CLI_SendCmd( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_THREAD_SendAck( void )
|
void HW_IPCC_THREAD_SendAck( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HW_IPCC_THREAD_CliSendAck( void )
|
void HW_IPCC_THREAD_CliSendAck( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_OT_CmdEvtHandler( void )
|
static void HW_IPCC_OT_CmdEvtHandler( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
HW_IPCC_OT_CmdEvtNot();
|
HW_IPCC_OT_CmdEvtNot();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_THREAD_NotEvtHandler( void )
|
static void HW_IPCC_THREAD_NotEvtHandler( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
HW_IPCC_THREAD_EvtNot();
|
HW_IPCC_THREAD_EvtNot();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_THREAD_CliNotEvtHandler( void )
|
static void HW_IPCC_THREAD_CliNotEvtHandler( void )
|
||||||
|
@ -274,35 +391,112 @@ __weak void HW_IPCC_OT_CmdEvtNot( void ){};
|
||||||
__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
|
__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
|
||||||
__weak void HW_IPCC_THREAD_EvtNot( void ){};
|
__weak void HW_IPCC_THREAD_EvtNot( void ){};
|
||||||
|
|
||||||
|
#endif /* THREAD_WB */
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* ZIGBEE
|
||||||
|
******************************************************************************/
|
||||||
|
#ifdef ZIGBEE_WB
|
||||||
|
void HW_IPCC_ZIGBEE_Init( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_ZIGBEE_SendAppliCmd( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_ZIGBEE_SendCliCmd( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_ZIGBEE_SendAppliCmdAck( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HW_IPCC_ZIGBEE_SendCliCmdAck( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HW_IPCC_ZIGBEE_CmdEvtHandler( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
|
||||||
|
|
||||||
|
HW_IPCC_ZIGBEE_AppliCmdNotification();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
HW_IPCC_ZIGBEE_AppliAsyncEvtNotification();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HW_IPCC_ZIGBEE_CliNotifEvtHandler( void )
|
||||||
|
{
|
||||||
|
LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
|
||||||
|
|
||||||
|
HW_IPCC_ZIGBEE_CliEvtNotification();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak void HW_IPCC_ZIGBEE_AppliCmdNotification( void ){};
|
||||||
|
__weak void HW_IPCC_ZIGBEE_AppliAsyncEvtNotification( void ){};
|
||||||
|
__weak void HW_IPCC_ZIGBEE_CliEvtNotification( void ){};
|
||||||
|
#endif /* ZIGBEE_WB */
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* MEMORY MANAGER
|
* MEMORY MANAGER
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
|
void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
|
||||||
{
|
{
|
||||||
if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
|
if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
|
||||||
{
|
{
|
||||||
FreeBufCb = cb;
|
FreeBufCb = cb;
|
||||||
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cb();
|
cb();
|
||||||
|
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_MM_FreeBufHandler( void )
|
static void HW_IPCC_MM_FreeBufHandler( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
||||||
|
|
||||||
FreeBufCb();
|
FreeBufCb();
|
||||||
|
|
||||||
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -310,18 +504,18 @@ static void HW_IPCC_MM_FreeBufHandler( void )
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void HW_IPCC_TRACES_Init( void )
|
void HW_IPCC_TRACES_Init( void )
|
||||||
{
|
{
|
||||||
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
|
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HW_IPCC_TRACES_EvtHandler( void )
|
static void HW_IPCC_TRACES_EvtHandler( void )
|
||||||
{
|
{
|
||||||
HW_IPCC_TRACES_EvtNot();
|
HW_IPCC_TRACES_EvtNot();
|
||||||
|
|
||||||
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
|
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
__weak void HW_IPCC_TRACES_EvtNot( void ){};
|
__weak void HW_IPCC_TRACES_EvtNot( void ){};
|
||||||
|
|
|
@ -174,17 +174,17 @@
|
||||||
*/
|
*/
|
||||||
#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */
|
#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */
|
||||||
#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */
|
#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */
|
||||||
#define USE_RTOS 0
|
#define USE_RTOS 0U
|
||||||
#define PREFETCH_ENABLE 0
|
#define PREFETCH_ENABLE 0U
|
||||||
#define INSTRUCTION_CACHE_ENABLE 1
|
#define INSTRUCTION_CACHE_ENABLE 1U
|
||||||
#define DATA_CACHE_ENABLE 1
|
#define DATA_CACHE_ENABLE 1U
|
||||||
|
|
||||||
/* ########################## Assert Selection ############################## */
|
/* ########################## Assert Selection ############################## */
|
||||||
/**
|
/**
|
||||||
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||||
* HAL drivers code
|
* HAL drivers code
|
||||||
*/
|
*/
|
||||||
/* #define USE_FULL_ASSERT 1 */
|
/* #define USE_FULL_ASSERT 1U */
|
||||||
|
|
||||||
/* ################## SPI peripheral configuration ########################## */
|
/* ################## SPI peripheral configuration ########################## */
|
||||||
|
|
||||||
|
@ -329,17 +329,7 @@
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
#ifdef USE_FULL_ASSERT
|
#ifdef USE_FULL_ASSERT
|
||||||
/**
|
#include "stm32_assert.h" // MBED patch
|
||||||
* @brief The assert_param macro is used for function's parameters check.
|
|
||||||
* @param expr If expr is false, it calls assert_failed function
|
|
||||||
* which reports the name of the source file and the source
|
|
||||||
* line number of the call that failed.
|
|
||||||
* If expr is true, it returns no value.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void assert_failed(uint8_t* file, uint32_t line);
|
|
||||||
#else
|
#else
|
||||||
#define assert_param(expr) ((void)0U)
|
#define assert_param(expr) ((void)0U)
|
||||||
#endif /* USE_FULL_ASSERT */
|
#endif /* USE_FULL_ASSERT */
|
||||||
|
|
|
@ -161,10 +161,12 @@
|
||||||
const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
|
const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
|
||||||
4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
|
4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
|
||||||
|
|
||||||
|
#if defined(STM32WB55xx)
|
||||||
const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
|
const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
|
||||||
{2UL,6UL,4UL,3UL,2UL,4UL}, \
|
{2UL,6UL,4UL,3UL,2UL,4UL}, \
|
||||||
{4UL,12UL,8UL,6UL,4UL,8UL}, \
|
{4UL,12UL,8UL,6UL,4UL,8UL}, \
|
||||||
{4UL,12UL,8UL,6UL,4UL,8UL}};
|
{4UL,12UL,8UL,6UL,4UL,8UL}};
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
|
@ -221,9 +223,11 @@ void SystemInit(void)
|
||||||
/* Reset PLLCFGR register */
|
/* Reset PLLCFGR register */
|
||||||
RCC->PLLCFGR = 0x22041000U;
|
RCC->PLLCFGR = 0x22041000U;
|
||||||
|
|
||||||
|
#if defined(STM32WB55xx)
|
||||||
/* Reset PLLSAI1CFGR register */
|
/* Reset PLLSAI1CFGR register */
|
||||||
RCC->PLLSAI1CFGR = 0x22041000U;
|
RCC->PLLSAI1CFGR = 0x22041000U;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Reset HSEBYP bit */
|
/* Reset HSEBYP bit */
|
||||||
RCC->CR &= 0xFFFBFFFFU;
|
RCC->CR &= 0xFFFBFFFFU;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
/* USER CODE BEGIN Header */
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file utilities_conf.h
|
* File Name : utilities_conf.h
|
||||||
* @author MCD Application Team
|
* Description : Configuration file for STM32 Utilities.
|
||||||
* @brief Configuration of utilities
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @attention
|
* @attention
|
||||||
*
|
*
|
||||||
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
|
@ -16,67 +17,52 @@
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef UTILITIES_CONF_H
|
#ifndef UTILITIES_CONF_H
|
||||||
#define UTILITIES_CONF_H
|
#define UTILITIES_CONF_H
|
||||||
|
|
||||||
#include "app_conf.h"
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
/******************************************************************************
|
|
||||||
* OTP manager
|
|
||||||
******************************************************************************/
|
|
||||||
#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
|
|
||||||
|
|
||||||
#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Scheduler
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#define SCH_CONF_TASK_NBR CFG_TASK_NBR
|
|
||||||
|
|
||||||
#define SCH_CONF_PRIO_NBR CFG_PRIO_NBR
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Debug Trace
|
|
||||||
******************************************************************************/
|
|
||||||
/**
|
|
||||||
* When DBG_TRACE_FULL is set to 1, the trace are output with the API name, the file name and the line number
|
|
||||||
* When DBG_TRACE_LIGTH is set to 1, only the debug message is output
|
|
||||||
*
|
|
||||||
* When both are set to 0, no trace are output
|
|
||||||
* When both are set to 1, DBG_TRACE_FULL is selected
|
|
||||||
*/
|
|
||||||
#define DBG_TRACE_LIGTH 1
|
|
||||||
#define DBG_TRACE_FULL 0
|
|
||||||
|
|
||||||
#if (( CFG_DEBUG_TRACE != 0 ) && ( DBG_TRACE_LIGTH == 0 ) && (DBG_TRACE_FULL == 0))
|
|
||||||
#undef DBG_TRACE_FULL
|
|
||||||
#undef DBG_TRACE_LIGTH
|
|
||||||
#define DBG_TRACE_FULL 0
|
|
||||||
#define DBG_TRACE_LIGTH 1
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ( CFG_DEBUG_TRACE == 0 )
|
#include "cmsis_compiler.h"
|
||||||
#undef DBG_TRACE_FULL
|
#include "string.h"
|
||||||
#undef DBG_TRACE_LIGTH
|
|
||||||
#define DBG_TRACE_FULL 0
|
/******************************************************************************
|
||||||
#define DBG_TRACE_LIGTH 0
|
* common
|
||||||
|
******************************************************************************/
|
||||||
|
#define UTILS_ENTER_CRITICAL_SECTION( ) uint32_t primask_bit = __get_PRIMASK( );\
|
||||||
|
__disable_irq( )
|
||||||
|
|
||||||
|
#define UTILS_EXIT_CRITICAL_SECTION( ) __set_PRIMASK( primask_bit )
|
||||||
|
|
||||||
|
#define UTILS_MEMSET8( dest, value, size ) memset( dest, value, size);
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* tiny low power manager
|
||||||
|
* (any macro that does not need to be modified can be removed)
|
||||||
|
******************************************************************************/
|
||||||
|
#define UTIL_LPM_INIT_CRITICAL_SECTION( )
|
||||||
|
#define UTIL_LPM_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
|
||||||
|
#define UTIL_LPM_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* sequencer
|
||||||
|
* (any macro that does not need to be modified can be removed)
|
||||||
|
******************************************************************************/
|
||||||
|
#define UTIL_SEQ_INIT_CRITICAL_SECTION( )
|
||||||
|
#define UTIL_SEQ_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
|
||||||
|
#define UTIL_SEQ_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
|
||||||
|
#define UTIL_SEQ_CONF_TASK_NBR (32)
|
||||||
|
#define UTIL_SEQ_CONF_PRIO_NBR (2)
|
||||||
|
#define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* When not set, the traces is looping on sending the trace over UART
|
|
||||||
*/
|
|
||||||
#define DBG_TRACE_USE_CIRCULAR_QUEUE 1
|
|
||||||
|
|
||||||
/**
|
|
||||||
* max buffer Size to queue data traces and max data trace allowed.
|
|
||||||
* Only Used if DBG_TRACE_USE_CIRCULAR_QUEUE is defined
|
|
||||||
*/
|
|
||||||
#define DBG_TRACE_MSG_QUEUE_SIZE 4096
|
|
||||||
#define MAX_DBG_TRACE_MSG_SIZE 1024
|
|
||||||
|
|
||||||
#endif /*UTILITIES_CONF_H */
|
#endif /*UTILITIES_CONF_H */
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
Loading…
Reference in New Issue