i2s_subsystem.c File Reference

I2S制御関数群. More...

#include "i2s_subsystem.h"
#include "kernel_cfg.h"
#include <LPC17xx.h>
#include <kernel.h>
#include <t_syslog.h>

Data Structures

struct  LLI
 DMA用のリンクリストの構成要素型. More...
struct  I2S_AUDIO_DATA
 I2S用データ. More...

Functions

void i2s_init ()
 I2S 初期化ルーチン.
void i2s_start ()
 I2S 開始。DMA初期化後に行う.
void i2s_dma_init ()
 DMA初期化.
AUDIOSAMPLEi2s_getTxBuf ()
 現在ソフトウェアが使えるI2S TXバッファをかえす。
AUDIOSAMPLEi2s_getRxBuf ()
 現在ソフトウェアが使えるI2S RXバッファをかえす。
void i2s_dma_intr_handler ()
 I2S DMA 割り込みハンドラの初期化を行う.
void audio_task (intptr_t exinf)
 オーディオDMAに同期して動くタスク

Variables

static struct I2S_AUDIO_DATA audio_data
 I2S用データ.

Detailed Description

I2S制御関数群.

Date:
2011/02/19
Author:
takemasa

Function Documentation

void audio_task ( intptr_t  exinf  ) 

オーディオDMAに同期して動くタスク

Parameters:
exinf コンフィギュレータがタスクに引き渡す変数。このタスクは無視する。

dma_intr_handler からのSEM_I2SDMA セマフォ・シグナルを受けて しかるべきデータ・バッファを特定し、信号処理を行う。

なお、このタスクはシステム起動時にはインアクティブである。 main_task から明示的にアクティベートして始めて動作を開始する。

void i2s_dma_init (  ) 

DMA初期化.

I2Sに関連づけされたDMAを初期化する。同時に、LLIを初期化して、ピンポンバッファをすぐに使えるような 状態にする。受信DMAは各バッファの受信完了ごとにDMA割り込みをおこす。送信では起こさない。プログラムは これに同期してタスクと協調動作をする。

DMA受信割り込みは dma_intr_handler で処理を行う。

Todo:
DMAの割り当ては決め打ちである。適切なDMA管理機構を使用して衝突を避ける。
void i2s_dma_intr_handler (  ) 

I2S DMA 割り込みハンドラの初期化を行う.

LPC1768のDMA割り込みステータスをチェックし、I2S DMA 受信TC割り込みが発生していたら、その割り込みに対処する。

AUDIOSAMPLE* i2s_getRxBuf (  ) 

現在ソフトウェアが使えるI2S RXバッファをかえす。

Returns:
プログラムが読み込んでいい受信バッファの先頭アドレス

DMAが使用していないバッファをかえす。DMAと同期したプログラムを書く場合には必ず このルーチンを使用してプログラムが使ってもよいバッファを決定する。

Todo:
DMAチャンネルの番号は決め打ちである。適切なDMA管理機構を使った方式への変更が必要である。
AUDIOSAMPLE* i2s_getTxBuf (  ) 

現在ソフトウェアが使えるI2S TXバッファをかえす。

Returns:
プログラムが書き込んでいい送信バッファの先頭アドレス

DMAが使用していないバッファをかえす。DMAと同期したプログラムを書く場合には必ず このルーチンを使用してプログラムが使ってもよいバッファを決定する。

Todo:
DMAチャンネルの番号は決め打ちである。適切なDMA管理機構を使った方式への変更が必要である。
void i2s_init (  ) 

I2S 初期化ルーチン.

LPC1768のI2Sペリフェラルを初期化する。送受信とも

  • スレーブ
  • 32bit
  • 4ワイアー である。DMA1をRXに、DMA2をTXに割り当てている。

なお、このルーチンは初期化はするが、I2Sを 起動しない。起動はDMAの設定が終わった後に i2s_start ルーチンを呼んで行う。

Todo:
現在の設定でも過不足なく動くが、TXのクロックを * RXから分けるようにすれば、 もっと少ないピン数で動作させることもできるはずである。

P0.4 - P0.9を I2Sに

void i2s_start (  ) 

I2S 開始。DMA初期化後に行う.

i2s_init ルーチンと i2s_dma_init ルーチンによって準備を終えた後、 このルーチンを呼び出してi2sによる転送を始める。


Variable Documentation

struct I2S_AUDIO_DATA audio_data [static]

I2S用データ.

DMAのLLIやバッファなどはすべてこの変数にパッケージしている。こうすることで、グローバル空間に名前が散らかることを阻止できる。

 All Data Structures Files Functions Variables Typedefs Defines
Generated on Sun Feb 20 21:24:43 2011 for TalkTrhough by  doxygen 1.6.3