5
5
*/
6
6
7
7
#include <hal/nrf_clock.h>
8
- #if defined(NRF_UARTE0 ) || defined(NRF_UARTE1 )
9
- #include <hal/nrf_uarte.h>
10
- #endif
8
+ #include <hal/nrf_uarte.h>
9
+ #include <haly/nrfy_uarte.h>
11
10
#if defined(NRF_RTC0 ) || defined(NRF_RTC1 ) || defined(NRF_RTC2 )
12
11
#include <hal/nrf_rtc.h>
13
12
#endif
24
23
#include <pm_config.h>
25
24
#endif
26
25
26
+ #if defined(NRF_UARTE0 ) || defined(NRF_UARTE1 ) || defined(NRF_UARTE20 ) || \
27
+ defined(NRF_UARTE30 )
28
+ #define NRF_UARTE_CLEANUP
29
+ #endif
30
+
27
31
#define NRF_UARTE_SUBSCRIBE_CONF_OFFS offsetof(NRF_UARTE_Type, SUBSCRIBE_STARTRX)
28
32
#define NRF_UARTE_SUBSCRIBE_CONF_SIZE (offsetof(NRF_UARTE_Type, EVENTS_CTS) -\
29
33
NRF_UARTE_SUBSCRIBE_CONF_OFFS)
@@ -41,6 +45,23 @@ static inline void nrf_cleanup_rtc(NRF_RTC_Type * rtc_reg)
41
45
}
42
46
#endif
43
47
48
+ #if defined(NRF_UARTE_CLEANUP )
49
+ static NRF_UARTE_Type * nrf_uarte_to_clean [] = {
50
+ #if defined(NRF_UARTE0 )
51
+ NRF_UARTE0 ,
52
+ #endif
53
+ #if defined(NRF_UARTE1 )
54
+ NRF_UARTE1 ,
55
+ #endif
56
+ #if defined(NRF_UARTE20 )
57
+ NRF_UARTE20 ,
58
+ #endif
59
+ #if defined(NRF_UARTE30 )
60
+ NRF_UARTE30 ,
61
+ #endif
62
+ };
63
+ #endif
64
+
44
65
static void nrf_cleanup_clock (void )
45
66
{
46
67
nrf_clock_int_disable (NRF_CLOCK , 0xFFFFFFFF );
@@ -57,26 +78,31 @@ void nrf_cleanup_peripheral(void)
57
78
#if defined(NRF_RTC2 )
58
79
nrf_cleanup_rtc (NRF_RTC2 );
59
80
#endif
60
- #if defined(NRF_UARTE0 )
61
- nrf_uarte_disable (NRF_UARTE0 );
62
- nrf_uarte_int_disable (NRF_UARTE0 , 0xFFFFFFFF );
63
- #if defined(NRF_DPPIC )
64
- /* Clear all SUBSCRIBE configurations. */
65
- memset ((uint8_t * )NRF_UARTE0 + NRF_UARTE_SUBSCRIBE_CONF_OFFS , 0 , NRF_UARTE_SUBSCRIBE_CONF_SIZE );
66
- /* Clear all PUBLISH configurations. */
67
- memset ((uint8_t * )NRF_UARTE0 + NRF_UARTE_PUBLISH_CONF_OFFS , 0 , NRF_UARTE_PUBLISH_CONF_SIZE );
68
- #endif
69
- #endif
70
- #if defined(NRF_UARTE1 )
71
- nrf_uarte_disable (NRF_UARTE1 );
72
- nrf_uarte_int_disable (NRF_UARTE1 , 0xFFFFFFFF );
81
+
82
+ #if defined(NRF_UARTE_CLEANUP )
83
+ for (int i = 0 ; i < sizeof (nrf_uarte_to_clean ) / sizeof (nrf_uarte_to_clean [0 ]); ++ i ) {
84
+ NRF_UARTE_Type * current = nrf_uarte_to_clean [i ];
85
+
86
+ nrfy_uarte_int_disable (current , 0xFFFFFFFF );
87
+ nrfy_uarte_int_uninit (current );
88
+ nrfy_uarte_task_trigger (current , NRF_UARTE_TASK_STOPRX );
89
+
90
+ nrfy_uarte_event_clear (current , NRF_UARTE_EVENT_RXSTARTED );
91
+ nrfy_uarte_event_clear (current , NRF_UARTE_EVENT_ENDRX );
92
+ nrfy_uarte_event_clear (current , NRF_UARTE_EVENT_RXTO );
93
+ nrfy_uarte_disable (current );
94
+
73
95
#if defined(NRF_DPPIC )
74
- /* Clear all SUBSCRIBE configurations. */
75
- memset ((uint8_t * )NRF_UARTE1 + NRF_UARTE_SUBSCRIBE_CONF_OFFS , 0 , NRF_UARTE_SUBSCRIBE_CONF_SIZE );
76
- /* Clear all PUBLISH configurations. */
77
- memset ((uint8_t * )NRF_UARTE1 + NRF_UARTE_PUBLISH_CONF_OFFS , 0 , NRF_UARTE_PUBLISH_CONF_SIZE );
96
+ /* Clear all SUBSCRIBE configurations. */
97
+ memset ((uint8_t * )current + NRF_UARTE_SUBSCRIBE_CONF_OFFS , 0 ,
98
+ NRF_UARTE_SUBSCRIBE_CONF_SIZE );
99
+ /* Clear all PUBLISH configurations. */
100
+ memset ((uint8_t * )current + NRF_UARTE_PUBLISH_CONF_OFFS , 0 ,
101
+ NRF_UARTE_PUBLISH_CONF_SIZE );
78
102
#endif
103
+ }
79
104
#endif
105
+
80
106
#if defined(NRF_PPI )
81
107
nrf_ppi_channels_disable_all (NRF_PPI );
82
108
#endif
0 commit comments