Skip to content

Commit 4a4584f

Browse files
committed
include the STM32Cube_FW to support the BLE of the stm32WB55
Signed-off-by: Francois Ramu <[email protected]>
1 parent a2096d5 commit 4a4584f

File tree

13 files changed

+4315
-0
lines changed

13 files changed

+4315
-0
lines changed

src/utility/STM32Cube_FW/app_conf.h

+527
Large diffs are not rendered by default.

src/utility/STM32Cube_FW/hw.h

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/**
2+
******************************************************************************
3+
* @file hw.h
4+
* @author MCD Application Team
5+
* @brief Hardware
6+
******************************************************************************
7+
* @attention
8+
*
9+
* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10+
* All rights reserved.</center></h2>
11+
*
12+
* This software component is licensed by ST under BSD 3-Clause license,
13+
* the "License"; You may not use this file except in compliance with the
14+
* License. You may obtain a copy of the License at:
15+
* opensource.org/licenses/BSD-3-Clause
16+
*
17+
******************************************************************************
18+
*/
19+
20+
21+
/* Define to prevent recursive inclusion -------------------------------------*/
22+
#ifndef __HW_H
23+
#define __HW_H
24+
25+
#ifdef __cplusplus
26+
extern "C" {
27+
#endif
28+
29+
/* Includes ------------------------------------------------------------------*/
30+
#include "stm32wbxx.h"
31+
#include "stm32wb55xx.h"
32+
#include "stm32wbxx_ll_bus.h"
33+
#include "stm32wbxx_ll_exti.h"
34+
#include "stm32wbxx_ll_system.h"
35+
#include "stm32wbxx_ll_rcc.h"
36+
#include "stm32wbxx_ll_ipcc.h"
37+
#include "stm32wbxx_ll_cortex.h"
38+
#include "stm32wbxx_ll_utils.h"
39+
#include "stm32wbxx_ll_pwr.h"
40+
41+
/******************************************************************************
42+
* HW IPCC
43+
******************************************************************************/
44+
void HW_IPCC_Enable( void );
45+
void HW_IPCC_Init( void );
46+
void HW_IPCC_Rx_Handler( void );
47+
void HW_IPCC_Tx_Handler( void );
48+
49+
void HW_IPCC_BLE_Init( void );
50+
void HW_IPCC_BLE_SendCmd( void );
51+
void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) );
52+
void HW_IPCC_BLE_RxEvtNot( void );
53+
void HW_IPCC_BLE_SendAclData( void );
54+
void HW_IPCC_BLE_AclDataAckNot( void );
55+
56+
void HW_IPCC_SYS_Init( void );
57+
void HW_IPCC_SYS_SendCmd( void );
58+
void HW_IPCC_SYS_CmdEvtNot( void );
59+
void HW_IPCC_SYS_EvtNot( void );
60+
61+
void HW_IPCC_THREAD_Init( void );
62+
void HW_IPCC_OT_SendCmd( void );
63+
void HW_IPCC_CLI_SendCmd( void );
64+
void HW_IPCC_THREAD_SendAck( void );
65+
void HW_IPCC_OT_CmdEvtNot( void );
66+
void HW_IPCC_CLI_CmdEvtNot( void );
67+
void HW_IPCC_THREAD_EvtNot( void );
68+
void HW_IPCC_THREAD_CliSendAck( void );
69+
void HW_IPCC_THREAD_CliEvtNot( void );
70+
71+
void HW_IPCC_LLDTESTS_Init( void );
72+
void HW_IPCC_LLDTESTS_SendCliCmd( void );
73+
void HW_IPCC_LLDTESTS_ReceiveCliRsp( void );
74+
void HW_IPCC_LLDTESTS_SendCliRspAck( void );
75+
void HW_IPCC_LLDTESTS_ReceiveM0Cmd( void );
76+
void HW_IPCC_LLDTESTS_SendM0CmdAck( void );
77+
78+
void HW_IPCC_TRACES_Init( void );
79+
void HW_IPCC_TRACES_EvtNot( void );
80+
81+
#ifdef __cplusplus
82+
}
83+
#endif
84+
85+
#endif /*__HW_H */
86+
87+
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

src/utility/STM32Cube_FW/hw_ipcc.c

+268
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
/**
2+
******************************************************************************
3+
* File Name : Target/hw_ipcc.c
4+
* Description : Hardware IPCC source file for STM32WPAN Middleware.
5+
*
6+
******************************************************************************
7+
* @attention
8+
*
9+
* <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10+
* All rights reserved.</center></h2>
11+
*
12+
* This software component is licensed by ST under BSD 3-Clause license,
13+
* the "License"; You may not use this file except in compliance with the
14+
* License. You may obtain a copy of the License at:
15+
* opensource.org/licenses/BSD-3-Clause
16+
*
17+
******************************************************************************
18+
*/
19+
20+
/* Includes ------------------------------------------------------------------*/
21+
#include "hw.h"
22+
#include "mbox_def.h"
23+
#include "stm32_def.h"
24+
#include "stm32wbxx_ll_rcc.h"
25+
#include "stm32wbxx_ll_bus.h"
26+
#include "stm32wbxx_ll_exti.h"
27+
28+
/* Global variables ---------------------------------------------------------*/
29+
/* Private defines -----------------------------------------------------------*/
30+
#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
31+
#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
32+
33+
/* Private macros ------------------------------------------------------------*/
34+
/* Private typedef -----------------------------------------------------------*/
35+
/* Private variables ---------------------------------------------------------*/
36+
static void (*FreeBufCb)( void );
37+
38+
/* Private function prototypes -----------------------------------------------*/
39+
static void HW_IPCC_BLE_EvtHandler( void );
40+
static void HW_IPCC_BLE_AclDataEvtHandler( void );
41+
static void HW_IPCC_MM_FreeBufHandler( void );
42+
static void HW_IPCC_SYS_CmdEvtHandler( void );
43+
static void HW_IPCC_SYS_EvtHandler( void );
44+
static void HW_IPCC_TRACES_EvtHandler( void );
45+
46+
/* Public function definition -----------------------------------------------*/
47+
48+
/******************************************************************************
49+
* INTERRUPT HANDLER
50+
******************************************************************************/
51+
void HW_IPCC_Rx_Handler( void )
52+
{
53+
if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
54+
{
55+
HW_IPCC_SYS_EvtHandler();
56+
}
57+
else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
58+
{
59+
HW_IPCC_BLE_EvtHandler();
60+
}
61+
else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
62+
{
63+
HW_IPCC_TRACES_EvtHandler();
64+
}
65+
66+
return;
67+
}
68+
69+
void HW_IPCC_Tx_Handler( void )
70+
{
71+
if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
72+
{
73+
HW_IPCC_SYS_CmdEvtHandler();
74+
}
75+
else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
76+
{
77+
HW_IPCC_SYS_CmdEvtHandler();
78+
}
79+
else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
80+
{
81+
HW_IPCC_MM_FreeBufHandler();
82+
}
83+
else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
84+
{
85+
HW_IPCC_BLE_AclDataEvtHandler();
86+
}
87+
88+
return;
89+
}
90+
/******************************************************************************
91+
* GENERAL
92+
******************************************************************************/
93+
void HW_IPCC_Enable( void )
94+
{
95+
/**
96+
* When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
97+
*/
98+
LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
99+
LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
100+
101+
/**
102+
* In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
103+
* In that case, to keep the mechanism transparent to the user application, it shall call the system command
104+
* SHCI_C2_Reinit( ) before jumping to the application.
105+
* When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
106+
* This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
107+
* When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
108+
* So, by default, the application shall both set the event flag and set the C2BOOT bit.
109+
*/
110+
__SEV( ); /* Set the internal event flag and send an event to the CPU2 */
111+
__WFE( ); /* Clear the internal event flag */
112+
LL_PWR_EnableBootC2( );
113+
114+
return;
115+
}
116+
117+
void HW_IPCC_Init( void )
118+
{
119+
120+
LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
121+
122+
LL_C1_IPCC_EnableIT_RXO( IPCC );
123+
LL_C1_IPCC_EnableIT_TXF( IPCC );
124+
125+
HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
126+
HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
127+
128+
return;
129+
}
130+
131+
/******************************************************************************
132+
* BLE
133+
******************************************************************************/
134+
void HW_IPCC_BLE_Init( void )
135+
{
136+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
137+
138+
return;
139+
}
140+
141+
void HW_IPCC_BLE_SendCmd( void )
142+
{
143+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
144+
145+
return;
146+
}
147+
148+
static void HW_IPCC_BLE_EvtHandler( void )
149+
{
150+
HW_IPCC_BLE_RxEvtNot();
151+
152+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
153+
154+
return;
155+
}
156+
157+
void HW_IPCC_BLE_SendAclData( void )
158+
{
159+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
160+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
161+
162+
return;
163+
}
164+
165+
static void HW_IPCC_BLE_AclDataEvtHandler( void )
166+
{
167+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
168+
169+
HW_IPCC_BLE_AclDataAckNot();
170+
171+
return;
172+
}
173+
174+
WEAK void HW_IPCC_BLE_AclDataAckNot( void ){};
175+
WEAK void HW_IPCC_BLE_RxEvtNot( void ){};
176+
177+
/******************************************************************************
178+
* SYSTEM
179+
******************************************************************************/
180+
void HW_IPCC_SYS_Init( void )
181+
{
182+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
183+
184+
return;
185+
}
186+
187+
void HW_IPCC_SYS_SendCmd( void )
188+
{
189+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
190+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
191+
192+
return;
193+
}
194+
195+
static void HW_IPCC_SYS_CmdEvtHandler( void )
196+
{
197+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
198+
199+
HW_IPCC_SYS_CmdEvtNot();
200+
201+
return;
202+
}
203+
204+
static void HW_IPCC_SYS_EvtHandler( void )
205+
{
206+
HW_IPCC_SYS_EvtNot();
207+
208+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
209+
210+
return;
211+
}
212+
213+
WEAK void HW_IPCC_SYS_CmdEvtNot( void ){};
214+
WEAK void HW_IPCC_SYS_EvtNot( void ){};
215+
216+
/******************************************************************************
217+
* MEMORY MANAGER
218+
******************************************************************************/
219+
void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
220+
{
221+
if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
222+
{
223+
FreeBufCb = cb;
224+
LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
225+
}
226+
else
227+
{
228+
cb();
229+
230+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
231+
}
232+
233+
return;
234+
}
235+
236+
static void HW_IPCC_MM_FreeBufHandler( void )
237+
{
238+
LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
239+
240+
FreeBufCb();
241+
242+
LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
243+
244+
return;
245+
}
246+
247+
/******************************************************************************
248+
* TRACES
249+
******************************************************************************/
250+
void HW_IPCC_TRACES_Init( void )
251+
{
252+
LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
253+
254+
return;
255+
}
256+
257+
static void HW_IPCC_TRACES_EvtHandler( void )
258+
{
259+
HW_IPCC_TRACES_EvtNot();
260+
261+
LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
262+
263+
return;
264+
}
265+
266+
WEAK void HW_IPCC_TRACES_EvtNot( void ){};
267+
268+
/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/

0 commit comments

Comments
 (0)