« ビス・スプリングワッシャ・ナット・スペーサーのセット | トップページ | PCM2706 でUSB->I2S »

2010年3月24日 (水)

CS8416のソフトモード その2

前回うまく動作しなかったCS8416ソフトモードの再度挑戦してみましたが、結局CS8416のレジスターの読み取りがうまくいきませんでした。

ただ今回原因が大体分かってきました。
SPIフォーマットはコンパイラーのライブラリーを利用していますが、これがうまく使えないようなので、SPIフォーマットを自作すればうまくいくのではないかと思っています。I2Cでやり直そうかとも考えましたが、今回はSPIでなんとか動かすことにしました。
SPIフォーマットは電子ボリュームの時に一度作っているので、それほど手間がかからないと思います。

Cimg3796_2

//-----------------------------------------------------------------
//       CS8416ソフトモード用
// 使用PIC PIC16F886: 8.0MHz
//-------------------------------------------------------------------

#include "16F886.H"
#fuses INTRC_IO,NOWDT,NOPROTECT,PUT,BROWNOUT,MCLR,NOLVP
#use delay(clock=8000000)
// 関数
// 変数
static int addres;
static int reg_data;
static int read_data1;

void main(void)
{   
     setup_oscillator(OSC_8MHZ);
// MSSP初期設定 SPIモード
     setup_spi(SPI_MASTER | SPI_H_TO_L|SPI_CLK_DIV_16 );
//ポート設定
     setup_adc(NO_ANALOGS);
     SET_TRIS_A(0x00);
     SET_TRIS_B(0x00);
     SET_TRIS_C(0x10);

     output_high(PIN_a0); // rest
     output_high(PIN_a1); // cs
     delay_ms(400);
    // CS8416 RESET
     output_low(PIN_a0); // rest
     delay_ms(2);
     output_high(PIN_a0); // rest

    // reg_set start
     addres =   0x02;
     reg_data = 0x40;
     output_low(PIN_a1); // cs
     spi_write(0x20);
     spi_write(addres); 
     spi_write(reg_data);
     output_high(PIN_a1);// cs

     addres =   0x04;
     reg_data = 0x80;
     output_low(PIN_a1); // cs
     spi_write(0x20);
     spi_write(addres); 
     spi_write(reg_data);
     output_high(PIN_a1); // cs

     addres =   0x05;
     reg_data = 0x88;
     output_low(PIN_a1); // cs
     spi_write(0x20);
     spi_write(addres); 
     spi_write(reg_data);
     output_high(PIN_a1); // cs
 
    // spi read test   
     while(1)
     {
          output_low(PIN_a1); // cs
          spi_write(0x20);
          spi_write(0x05);   
          output_high(PIN_a1); // cs
          delay_us(1); 
          output_low(PIN_a1); // cs
          spi_write(0x21);
          read_data1 = spi_read(0xff);
          output_high(PIN_a1); // cs
          write_eeprom(0x0a,read_data1);
      }
}

レジスター読み取り時の波形です。
Spitest1_2
A0:クロック、A1:SDI(CS8416->PIC)、A2:SDO(PIC -> CS8416)、A3:/CS 、A4:RESET

次回はうまく出来上がりそうなので、ソフトモード対応DAIのプリント基板の試作を行う事にしました。

« ビス・スプリングワッシャ・ナット・スペーサーのセット | トップページ | PCM2706 でUSB->I2S »

オーディオ機器の自作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/511109/47896807

この記事へのトラックバック一覧です: CS8416のソフトモード その2:

« ビス・スプリングワッシャ・ナット・スペーサーのセット | トップページ | PCM2706 でUSB->I2S »