SH-2A 基板 (15)

ディジタル・オーディオ用 DAC の代表的な入力フォーマットとして、いわゆる「標準」フォーマットと、I2S フォーマットがありますが、両者の違いを表にすると下のようになります。

フォーマット 標準 I2S SSIF レジスタビット
データ位置 右詰め 左詰め SSIFn.SSICR.BIT.STDA
LRCK(WS)
極性
1=L
0=R
0=L
1=R
SSIFn.SSICR.BIT.SWDP
LRCK(WS)
エッジ位置
LSB の後 LSB の前 SSIFn.SSICR.BIT.DEL

上の表には SSIF モジュールで設定すべきレジスタ・ビットの名称もあわせて表示してありますが、都合が良いことに、各ビットが「1」の場合は「標準」フォーマットに対応する動作となり、各ビットが「0」の場合は「I2S」フォーマットに対応する動作となります。
したがって、標準フォーマットと I2S フォーマットとの両方に対応する設定は、たとえば次のコードのようになります。

// DAC input format selection
// 1 for "Standard" format (16-bit, right justfy, LRCK: 1=L, 0=R)
// 0 for I2S format (16-bit, left justify, WS: 0=L, 1=R)

#define DAC_FORMAT_SEL 1

  ...

// Serial Word Select Polarity
// 1: (std: L = 1)
// 0: (I2S: L = 0)

    SSI2F.SSICR.BIT.SWSP = DAC_FORMAT_SEL;

// Serial DaTa Alignment
// 1: (std: padding, data)
// 0: (I2S: data, padding)

    SSIF2.SSICR.BIT.SDTA = DAC_FORMAT_SEL; 

// Serial data DELay
// 1 : (std:    no serial data delay)
// 0 : (I2S: 1 clk serial data delay) 

    SSIF2.SSICR.BIT.DEL  = DAC_FORMAT_SEL; 

今回使用した AK4321VF では、

  • DIF1=0, DIF0=0 で標準フォーマット
  • DIF1=1, DIF0=1 で I2S フォーマット

に切り換えられるのを利用して、I2S フォーマットでの動作を確認しました。