Since it would be dangerous for an ISR or DSR to make a call that might reschedule the current thread (by trying to lock a mutex for example) all functions in this API have an associated synchronization level. These levels are:
This function may only be called from within threads. This is usually the client code that makes calls into the device driver. In a non-kernel configuration, this will be code running at the default non-interrupt level.
This function may be called by either DSR or thread code.
This function may be called from ISR, DSR or thread code.
The following table shows, for each API function, the levels at which is may be called:
Callable from: Function ISR DSR Thread ------------------------------------------------------------------------- cyg_drv_isr_lock X X X cyg_drv_isr_unlock X X X cyg_drv_spinlock_init X cyg_drv_spinlock_destroy X cyg_drv_spinlock_spin X X X cyg_drv_spinlock_clear X X X cyg_drv_spinlock_try X X X cyg_drv_spinlock_test X X X cyg_drv_spinlock_spin_intsave X X X cyg_drv_spinlock_clear_intsave X X X cyg_drv_dsr_lock X X cyg_drv_dsr_unlock X X cyg_drv_mutex_init X cyg_drv_mutex_destroy X cyg_drv_mutex_lock X cyg_drv_mutex_trylock X cyg_drv_mutex_unlock X cyg_drv_mutex_release X cyg_drv_cond_init X cyg_drv_cond_destroy X cyg_drv_cond_wait X cyg_drv_cond_signal X X cyg_drv_cond_broadcast X X cyg_drv_interrupt_create X cyg_drv_interrupt_delete X cyg_drv_interrupt_attach X X X cyg_drv_interrupt_detach X X X cyg_drv_interrupt_mask X X X cyg_drv_interrupt_unmask X X X cyg_drv_interrupt_acknowledge X X X cyg_drv_interrupt_configure X X X cyg_drv_interrupt_level X X X cyg_drv_interrupt_set_cpu X X X cyg_drv_interrupt_get_cpu X X X |