arm cm3 dsb instrukce

Lubor Otta butan na centrum.cz
Pátek Červen 5 06:59:20 CEST 2020


Zdravím konféru,

díval jsem se do knihovny na sysreset, tedy jak softem vyvolat reset 
procesoru, dělá se to nahozením bitu SYSRESETREQ v registru SCB->AIRCR

Donedávna jsem resetoval procesor zablokováním Wdogu.

Zaujala mně instrukce DSB použitá pro jakousi synchronizaci. Můžete mi 
někdo vysvětlit co ta instrukce provádí?  Kde jinde by se hodila použít?

Lubor



#define __DSB()                           __dsb(0xF)

__STATIC_INLINE void NVIC_SystemReset(void)
{
   __DSB();                                                     /* 
Ensure all outstanding memory accesses included
buffered write are completed before reset */
   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |
                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
                  SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep 
priority group unchanged */
   __DSB();                                                     /* 
Ensure completion of memory access */
   while(1);                                                    /* wait 
until reset */
}

/*@} end of CMSIS_Core_NVICFunctions */



Další informace o konferenci Hw-list