1040
6437E–ATARM–23-Apr-13
SAM9M11
The application can also wait for an interrupt notice in order to read data from AC97C_CxRHR.
The interrupt remains active until RXRDY is cleared by reading AC97C_CxSR.
The RXRDY flag in AC97C_CxSR is set automatically when data is received in the Channel x
shift register. Data is then shifted to AC97C_CxRHR.
Figure 43-6. Audio Transfer (PCM L Front, PCM R Front) on Channel x
If the previously received data has not been read by the application, the new data overwrites the
data already waiting in AC97C_CxRHR, therefore the OVRUN flag in AC97C_CxSR is raised.
The application can either poll the OVRUN flag in AC97C_CxSR or wait for an interrupt notice.
The interrupt remains active until the OVRUN flag in AC97C_CxSR is set.
The AC97 Controller can also be used in sound recording devices in association with an AC97
Codec. The AC97 Controller may also be exposed to heavy PCM transfers. The application can
use the PDC connected to channel A in order to reduce processor overhead and increase per-
formance especially under an operating system.
The PDC receive counter values must be equal to the number of PCM samples to be received,
each sample goes in one slot.
43.7.3.5
AC97 Input Frame
The AC97 Controller receives a thirteen slot frame on the AC-Link sent by the AC97 Codec. The
first slot (tag slot or slot 0) flags the validity of the entire frame and the validity of each slot;
whether a slot carries valid data or not. Slots 1 and 2 are used if the application requires status
informations from AC97 Codec. Slots [3:12] are used according to AC97 Controller Output
Channel Assignment Register (AC97C_ICA) content. The AC97 Controller will not receive any
data from any slot if AC97C_ICA is not assigned to a channel in input.
43.7.3.6
Configuring and Using Interrupts
Instead of polling flags in AC97 Controller Global Status Register (AC97C_SR) and in AC97
Controller Channel x Status Register (AC97C_CxSR), the application can wait for an interrupt
notice. The following steps show how to configure and use interrupts correctly:
Set the interruptible flag in AC97 Controller Channel x Mode Register (AC97C_CxMR).
Set the interruptible event and channel event in AC97 Controller Interrupt Enable Register
(AC97C_IER).
The interrupt handler must read both AC97 Controller Global Status Register (AC97C_SR) and
AC97 Controller Interrupt Mask Register (AC97C_IMR) and AND them to get the real interrupt
source. Furthermore, to get which event was activated, the interrupt handler has to read AC97
Controller Channel x Status Register (AC97C_CxSR), x being the channel whose event triggers
the interrupt.
Slot #
AC97FS
01
23
4
5
6
7
8
9
10
11
12
RXRDYCx
(AC97C_SR)
Read access to
AC97C_RHRx
AC97RX
(Codec output)
TAG
STATUS
ADDR
STATUS
DATA
PCM
LEFT
PCM
RIGHT
LINE 1
DAC
PCM
MIC
RSVED
LINE 2
ADC
HSET
ADC
IO
STATUS