gn="justify"> Наступним кроком процесор P1 входить в режим IDLE, а процесор P0, перевіривши доступ до кодеку:
/* перевірка Семафора0 в P0 */ChecK:
ay0 = 0x0001 = reg (0x34); = ax0 AND ay0EQ JUMP Get_InData;
JUMP Sema0Check;
...
виконує набір вікна даних, виставляє семафор 0
/* виставляння Семафора0 */
... = 0x0001; (0x34) = ax0;
...
генерує переривання
... = 0x0004; (0x34) = ax0;
...
і починає обробку даних.
Після того, як процесор P0 згенерує переривання, процесор P1 перевіряє, за допомогою семафорів, що йому робити:
/* перевірка Семафора0 в P1 */ChecK:
ay0 = 0x0001 = reg (0x34); = ax0 AND ay0NE JUMP Get_InData;
JUMP Sema0Check;
...
очищає семафор0, і починає обробку даних.
Аналогічним чином організовується і виведення даних, тільки замість семафора 0 процесори оперують семафором1. Докладніше про межпроцессорной комутації можна дізнатися з електронної книги [5] . p> До особливостей вводу/виводу можна віднести використання адресних регістрів вводу/виводу для комутації з хост-процесором і кодеком.
Передачі даних від AC97 в пам'ять процесора ЦОС виконується використанням ПДП передач через буфери FIFO процесора ЦОС. Кожне ядро ​​ЦГЗ має чотири буфера FIFO, доступних для передач до/від кодека AC97. Регістри, які контролюють ПДП передачі доступні лише з процесора ЦОС та визначено, як частина простору регістрів ядра. p> Кілька слів про архітектуру FIFO даних.
Два FIFO з чотирьох є вхідними буферами, приймаючими дані в процесор. Два інших - передавальні, посилають дані від процесора ЦОС до кодеку AC97 або іншому процесору ЦГЗ. Кожен FIFO здатний містити вісім 16-ти розрядних слів. Коли отримані слова, або коли є вільні місця в буфері передачі можуть генеруватися переривання. p> Коли здійснюється коммутірованіе з AC97 інтерфейсом, біти дозволу з'єднання Connection Enable в регістрі управління встановлюються в значення 102. Біт 3 вибирає стерео або моно передачі до і від AC97 інтерфейсу. Біти 7-4 асоціюють слот AC97 з конкретним FIFO. Коли вибрано стерео, обидва, вибраний слот і наступний слот, асоціюються з FIFO. Зазвичай, стерео вибрано для даних лівого і правого каналів, і обидва - лівий і правий - повинні бути асоційовані з одним і тим же зовнішнім AC97 кодеком. У цьому випадку дані лівого і правого каналів будуть подаватися в один FIFO, при цьому дані лівого каналу подаються першими. p> Конфігурація для нашого випадку: AC97, стерео, передача - слот 3,4; прийом - слот 6,7.
/* маскування AC97 переривання */= 0x7FFF;
ax0 = IMASK; = ax0 AND ay...