In embedded systems using digital processors, e.g., microcontrollers, having a plurality of peripheral devices and a central processing unit (CPU), certain functional units are shared between the CPU and at least some of the peripherals such as a direct memory access (DMA) controller or an in-circuit debug (ICD) controller. Thus, a data space arbiter is used to determine access rights to the memory or special function registers that are shared. In a data space arbiter for a multi-master system, the CPU is typically the highest priority bus master. A typical data space arbiter consists of a priority encoder and a set of data bus multiplexers. A conventional programmable data space arbiter implements the programmability within the priority encoder but uses predetermined priorities in which the CPU generally has the highest priority. Thus, whenever the CPU is accessing the memory all other peripherals usually are stalled. However, in embedded systems it may sometimes just temporarily be more critical to respond to an external event by, for example, a peripheral then to ensure high CPU throughput.
Therefore there exists a need for an improved more flexible data space arbiter.