英文翻译
Interfacing
1 Introduction
we use processors to implement processing,memories to implement storage, and
buses to implement communication. This chapter describes implementing
communication with buses, i.e., interfacing.
Buses implement communication among processors or among processors and
memories. Communication is the transfer of data among those components. For
example,a general-purpose processor reading or writing a memory is a common form
of communication. A general-purpose processor reading or writing a peripheral’s
register isanother common form.
2 Hardware protocol basics Concepts
Hardware protocols can be much more complex. However, we can understand
them better by defining some basic protocol concepts. These concepts include: actors,
data direction, addresses, time-multiplexing, and control methods. An actor is a
processor or memory involved in the data transfer. A protocol typically involves two
actors: a master and a servant. A master initiates the data transfer. A servant responds
to the initiation request. The servant could also be another processor. Masters are
usually general-purpose processors, while servants are usually peripherals and
memories. Data direction denotes the direction that the transferred data moves
between the actors.
3 Interfacing with a general-purpose processor
Perhaps the most common communication situation in embedded systems is the
input and output (I/O) of data to and from a general-purpose processor, as it
communicates with its peripherals and memories. I/O is relative to the processor:
input means data comes into the processor, while output means data goes out of the
processor. We will describe three processor I/O issues: addressing, interrupts, and
direct memory access. We’ll use the term microprocessor in this section to refer to a
general-purpose processor.
3.1 Interrupts
Another microprocessor I/O issue is that of interrupt-driven I/O. In particular,
suppose the program running on a microprocessor must, among other tasks, read and
process data from a peripheral whenever that peripheral has new data; such processing
is called servicing. If the peripheral gets new data at unpredictable intervals, then how
can the program determine when the peripheral has new data? The most
straightforward approach is to interleave the microprocessor’s other tasks with a
routine that checks for new data in the peripheral, perhaps by checking for a 1 in a
particular bit in a register of the peripheral. This repeated checking by the
microprocessor for data is called polling. Polling is simple to implement, but this
repeated checking wastes many clock cycles, so may not be acceptable in many cases,
especially when there are numerous peripherals to be checked. We could check at