mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
make it compile also with old Nordic SDK
This commit is contained in:
parent
178c4144ad
commit
1b0ec6b1bd
@ -40,7 +40,6 @@
|
|||||||
|
|
||||||
#include "nrf.h"
|
#include "nrf.h"
|
||||||
#include "nrf_clock.h"
|
#include "nrf_clock.h"
|
||||||
#include "nrf_power.h"
|
|
||||||
#include "nrfx_usbd_errata.h"
|
#include "nrfx_usbd_errata.h"
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -57,6 +56,13 @@
|
|||||||
#include "mcu/mcu.h"
|
#include "mcu/mcu.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1000*MDK_MAJOR_VERSION + MDK_MINOR_VERSION <= 8040
|
||||||
|
// Nordic actually has generated a mess here: nrfx==1.9.0 has MDK 8.40.3 while nrfx==2.0.0 has MDK 8.29.0
|
||||||
|
// Unfortunately there are API differences between nrfx<2.0.0 and nrfx>=2.0.0. Hoping that everyone uses
|
||||||
|
// nRF Connect SDK keeps the libraries up to date.
|
||||||
|
#define OLD_NORDIC_SDK
|
||||||
|
#endif
|
||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
/* MACRO TYPEDEF CONSTANT ENUM
|
/* MACRO TYPEDEF CONSTANT ENUM
|
||||||
*------------------------------------------------------------------*/
|
*------------------------------------------------------------------*/
|
||||||
@ -110,21 +116,6 @@ static struct
|
|||||||
/* Control / Bulk / Interrupt (CBI) Transfer
|
/* Control / Bulk / Interrupt (CBI) Transfer
|
||||||
*------------------------------------------------------------------*/
|
*------------------------------------------------------------------*/
|
||||||
|
|
||||||
// NVIC_GetEnableIRQ is only available in CMSIS v5
|
|
||||||
#ifndef NVIC_GetEnableIRQ
|
|
||||||
static inline uint32_t NVIC_GetEnableIRQ(IRQn_Type IRQn)
|
|
||||||
{
|
|
||||||
if ((int32_t)(IRQn) >= 0)
|
|
||||||
{
|
|
||||||
return((uint32_t)(((NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return(0U);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// check if we are in ISR
|
// check if we are in ISR
|
||||||
TU_ATTR_ALWAYS_INLINE static inline bool is_in_isr(void)
|
TU_ATTR_ALWAYS_INLINE static inline bool is_in_isr(void)
|
||||||
{
|
{
|
||||||
@ -253,13 +244,27 @@ void dcd_init (uint8_t rhport)
|
|||||||
void dcd_int_enable(uint8_t rhport)
|
void dcd_int_enable(uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
(void) rhport;
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
if (sd_nvic_EnableIRQ(USBD_IRQn) != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NVIC_EnableIRQ(USBD_IRQn);
|
||||||
|
}
|
||||||
|
#else
|
||||||
NVIC_EnableIRQ(USBD_IRQn);
|
NVIC_EnableIRQ(USBD_IRQn);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_int_disable(uint8_t rhport)
|
void dcd_int_disable(uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
(void) rhport;
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
if (sd_nvic_DisableIRQ(USBD_IRQn) != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NVIC_DisableIRQ(USBD_IRQn);
|
||||||
|
}
|
||||||
|
#else
|
||||||
NVIC_DisableIRQ(USBD_IRQn);
|
NVIC_DisableIRQ(USBD_IRQn);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
|
void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
|
||||||
@ -916,7 +921,11 @@ static bool hfclk_running(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OLD_NORDIC_SDK
|
||||||
|
return nrf_clock_hf_is_running(NRF_CLOCK_HFCLK_HIGH_ACCURACY);
|
||||||
|
#else
|
||||||
return nrf_clock_hf_is_running(NRF_CLOCK, NRF_CLOCK_HFCLK_HIGH_ACCURACY);
|
return nrf_clock_hf_is_running(NRF_CLOCK, NRF_CLOCK_HFCLK_HIGH_ACCURACY);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hfclk_enable(void)
|
static void hfclk_enable(void)
|
||||||
@ -937,9 +946,14 @@ static void hfclk_enable(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OLD_NORDIC_SDK
|
||||||
|
nrf_clock_event_clear(NRF_CLOCK_EVENT_HFCLKSTARTED);
|
||||||
|
nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTART);
|
||||||
|
#else
|
||||||
nrf_clock_event_clear(NRF_CLOCK, NRF_CLOCK_EVENT_HFCLKSTARTED);
|
nrf_clock_event_clear(NRF_CLOCK, NRF_CLOCK_EVENT_HFCLKSTARTED);
|
||||||
nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTART);
|
nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTART);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hfclk_disable(void)
|
static void hfclk_disable(void)
|
||||||
@ -957,8 +971,12 @@ static void hfclk_disable(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OLD_NORDIC_SDK
|
||||||
|
nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTOP);
|
||||||
|
#else
|
||||||
nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTOP);
|
nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_HFCLKSTOP);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Power & Clock Peripheral on nRF5x to manage USB
|
// Power & Clock Peripheral on nRF5x to manage USB
|
||||||
@ -1100,13 +1118,27 @@ void tusb_hal_nrf_power_event (uint32_t event)
|
|||||||
NRF_USBD->INTENSET = USBD_INTEN_USBRESET_Msk;
|
NRF_USBD->INTENSET = USBD_INTEN_USBRESET_Msk;
|
||||||
|
|
||||||
// Enable interrupt, priorities should be set by application
|
// Enable interrupt, priorities should be set by application
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
if (sd_nvic_ClearPendingIRQ(USBD_IRQn) != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NVIC_ClearPendingIRQ(USBD_IRQn);
|
||||||
|
}
|
||||||
|
#else
|
||||||
NVIC_ClearPendingIRQ(USBD_IRQn);
|
NVIC_ClearPendingIRQ(USBD_IRQn);
|
||||||
|
#endif
|
||||||
// Don't enable USBD interrupt yet, if dcd_init() did not finish yet
|
// Don't enable USBD interrupt yet, if dcd_init() did not finish yet
|
||||||
// Interrupt will be enabled by tud_init(), when USB stack is ready
|
// Interrupt will be enabled by tud_init(), when USB stack is ready
|
||||||
// to handle interrupts.
|
// to handle interrupts.
|
||||||
if (tud_inited())
|
if (tud_inited())
|
||||||
{
|
{
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
if (sd_nvic_EnableIRQ(USBD_IRQn) != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NVIC_EnableIRQ(USBD_IRQn);
|
||||||
|
}
|
||||||
|
#else
|
||||||
NVIC_EnableIRQ(USBD_IRQn);
|
NVIC_EnableIRQ(USBD_IRQn);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for HFCLK
|
// Wait for HFCLK
|
||||||
@ -1127,7 +1159,14 @@ void tusb_hal_nrf_power_event (uint32_t event)
|
|||||||
__ISB(); __DSB(); // for sync
|
__ISB(); __DSB(); // for sync
|
||||||
|
|
||||||
// Disable Interrupt
|
// Disable Interrupt
|
||||||
|
#ifdef SOFTDEVICE_PRESENT
|
||||||
|
if (sd_nvic_DisableIRQ(USBD_IRQn) != NRF_SUCCESS)
|
||||||
|
{
|
||||||
|
NVIC_DisableIRQ(USBD_IRQn);
|
||||||
|
}
|
||||||
|
#else
|
||||||
NVIC_DisableIRQ(USBD_IRQn);
|
NVIC_DisableIRQ(USBD_IRQn);
|
||||||
|
#endif
|
||||||
|
|
||||||
// disable all interrupt
|
// disable all interrupt
|
||||||
NRF_USBD->INTENCLR = NRF_USBD->INTEN;
|
NRF_USBD->INTENCLR = NRF_USBD->INTEN;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user