38 #ifndef __CORE_CMINSTR_H 
   39 #define __CORE_CMINSTR_H 
   48 #if   defined ( __CC_ARM )  
   51 #if (__ARMCC_VERSION < 400677) 
   52   #error "Please use ARM Compiler Toolchain V4.0.677 or later!" 
   92 #define __ISB()                           __isb(0xF) 
  100 #define __DSB()                           __dsb(0xF) 
  108 #define __DMB()                           __dmb(0xF) 
  128 #ifndef __NO_EMBEDDED_ASM 
  129 __attribute__((section(
".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
 
  143 #ifndef __NO_EMBEDDED_ASM 
  144 __attribute__((section(
".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value)
 
  171 #define __BKPT(value)                       __breakpoint(value) 
  174 #if       (__CORTEX_M >= 0x03) 
  183 #define __RBIT                            __rbit 
  193 #define __LDREXB(ptr)                     ((uint8_t ) __ldrex(ptr)) 
  203 #define __LDREXH(ptr)                     ((uint16_t) __ldrex(ptr)) 
  213 #define __LDREXW(ptr)                     ((uint32_t ) __ldrex(ptr)) 
  225 #define __STREXB(value, ptr)              __strex(value, ptr) 
  237 #define __STREXH(value, ptr)              __strex(value, ptr) 
  249 #define __STREXW(value, ptr)              __strex(value, ptr) 
  257 #define __CLREX                           __clrex 
  268 #define __SSAT                            __ssat 
  279 #define __USAT                            __usat 
  294 #elif defined ( __GNUC__ )  
  300 #if defined (__thumb__) && !defined (__thumb2__) 
  301 #define __CMSIS_GCC_OUT_REG(r) "=l" (r) 
  302 #define __CMSIS_GCC_USE_REG(r) "l" (r) 
  304 #define __CMSIS_GCC_OUT_REG(r) "=r" (r) 
  305 #define __CMSIS_GCC_USE_REG(r) "r" (r) 
  312 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __NOP(
void)
 
  314   __ASM 
volatile (
"nop");
 
  323 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __WFI(
void)
 
  325   __ASM 
volatile (
"wfi");
 
  334 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __WFE(
void)
 
  336   __ASM 
volatile (
"wfe");
 
  344 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __SEV(
void)
 
  346   __ASM 
volatile (
"sev");
 
  356 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __ISB(
void)
 
  358   __ASM 
volatile (
"isb");
 
  367 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __DSB(
void)
 
  369   __ASM 
volatile (
"dsb");
 
  378 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __DMB(
void)
 
  380   __ASM 
volatile (
"dmb");
 
  391 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value)
 
  393 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) 
  394   return __builtin_bswap32(value);
 
  398   __ASM 
volatile (
"rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
 
  411 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value)
 
  415   __ASM 
volatile (
"rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
 
  427 __attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value)
 
  429 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) 
  430   return (
short)__builtin_bswap16(value);
 
  434   __ASM 
volatile (
"revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
 
  448 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
 
  450   return (op1 >> op2) | (op1 << (32 - op2)); 
 
  462 #define __BKPT(value)                       __ASM volatile ("bkpt "#value) 
  465 #if       (__CORTEX_M >= 0x03) 
  474 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
 
  478    __ASM 
volatile (
"rbit %0, %1" : 
"=r" (result) : 
"r" (value) );
 
  490 __attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr)
 
  494 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) 
  495    __ASM 
volatile (
"ldrexb %0, %1" : 
"=r" (result) : 
"Q" (*addr) );
 
  500    __ASM 
volatile (
"ldrexb %0, [%1]" : 
"=r" (result) : 
"r" (addr) : 
"memory" );
 
  502    return ((uint8_t) result);    
 
  513 __attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr)
 
  517 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) 
  518    __ASM 
volatile (
"ldrexh %0, %1" : 
"=r" (result) : 
"Q" (*addr) );
 
  523    __ASM 
volatile (
"ldrexh %0, [%1]" : 
"=r" (result) : 
"r" (addr) : 
"memory" );
 
  525    return ((uint16_t) result);    
 
  536 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr)
 
  540    __ASM 
volatile (
"ldrex %0, %1" : 
"=r" (result) : 
"Q" (*addr) );
 
  554 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
 
  558    __ASM 
volatile (
"strexb %0, %2, %1" : 
"=&r" (result), 
"=Q" (*addr) : 
"r" ((uint32_t)value) );
 
  572 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
 
  576    __ASM 
volatile (
"strexh %0, %2, %1" : 
"=&r" (result), 
"=Q" (*addr) : 
"r" ((uint32_t)value) );
 
  590 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
 
  594    __ASM 
volatile (
"strex %0, %2, %1" : 
"=&r" (result), 
"=Q" (*addr) : 
"r" (value) );
 
  604 __attribute__( ( always_inline ) ) __STATIC_INLINE 
void __CLREX(
void)
 
  606   __ASM 
volatile (
"clrex" ::: 
"memory");
 
  618 #define __SSAT(ARG1,ARG2) \ 
  620   uint32_t __RES, __ARG1 = (ARG1); \ 
  621   __ASM ("ssat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \ 
  634 #define __USAT(ARG1,ARG2) \ 
  636   uint32_t __RES, __ARG1 = (ARG1); \ 
  637   __ASM ("usat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \ 
  649 __attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value)
 
  653   __ASM 
volatile (
"clz %0, %1" : 
"=r" (result) : 
"r" (value) );
 
  654    return ((uint8_t) result);    
 
  660 #elif defined ( __ICCARM__ )  
  662 #include <cmsis_iar.h> 
  665 #elif defined ( __TMS470__ )  
  667 #include <cmsis_ccs.h> 
  670 #elif defined ( __TASKING__ )  
  679 #elif defined ( __CSMC__ )  
  681 #include <cmsis_csm.h> 
void __attribute__((interrupt))
This ISR handles most of the business interacting with the 1-wire bus.