CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

D/Aコンバータテスト

コーデック内のA/DコンバータとD/Aコンバータを同時に動作させ、
A/Dコンバータの変換完了(=受信完了)でD/Aコンバータにインクリメントデータを出力させてみます。
LEDチカチカのアナログ版といったところです。

 

以下はコーデックの初期化でサンプリング周波数25kHz、アナログ出力ゲイン0dBに設定し、DAC送信バッファに14ビット分のインクリメントデータを出力する例です。

 

       1            ************************************************
       2            *       TMS320C25 AIC_TEST C25AIC.asm         *
       3            ************************************************
       4            
       5      0000  DRR     .set    0
       6      0001  DXR     .set    1
       7      0004  IMR     .set    4
       8            
       9      010a  PR1     .set    010ah ;A register 2FCLK=10MHz/10=1000kHz
      10      0214  PR2     .set    0214h ;B register Fs=FCLK/20=25.0kHz
      11      0300  PR3     .set    0300h ;A prime register
      12      0406  PR4     .set    0405h ;amplifier gain register in = 0dB out = 0dB
      13      0501  PR5     .set    0501h ;analog configuration register
      14      0600  PR6     .set    0600h ;digital configuration register
      15      0730  PR7     .set    0730h ;frame synch delay register
      16      0802  PR8     .set    0802h ;frame synch number register
      17            
      18 0000               .bss    tmp,1
      19 0000               .text
      20                    
      21 0000 c800          LDPK    0
      22 0001 ce0d          SXF
      23 0002 ce20          RTXM
      24 0003 ce0e          FORT    0
      25 0004 ce37          SFSM
      26 0005 ca20          LACK    100000b
      27 0006 6004          SACL    IMR
      28 0007 d001          LACK    0ffffh
         0008 ffff  
      29 0009 c800-         LDPK    tmp
      30 000a 6000-         SACL    tmp
      31 000b e200-         OUT     tmp,PA2
      32 000c c800          LDPK    0
      33 000d ca00          ZAC
      34 000e 6001          SACL    DXR
      35 000f ce1f          IDLE
      36            
      37 0010 5500          NOP
      38 0011 5500          NOP
      39 0012 5500          NOP
      40 0013 5500          NOP
      41 0014 fe80          CALL    INIT
         0015 001c' 
      42                    
      43 0016 ca10          LACK    010000b
      44 0017 6004          SACL    IMR
      45 0018 ce00          EINT
      46 0019 ff80  LOOP    B       LOOP
         001a 0019' 
     :
     :
     中略
     :
     :
         
      80 0000               .sect   "tx_int"        ;送信割込み
      81 0000 ce26          RET
      82                    
      83 0000               .sect   "rx_int"        ;受信割込み
      84 0000 c800-         LDPK    tmp
      85 0001 2000-         LAC     tmp
      86 0002 d002          ADDK    1024            ;インクリメント
         0003 0400  
      87 0004 d004          ANDK    0FFFCh
         0005 fffc  
      88 0006 6000-         SACL    tmp
      89 0007 c800          LDPK    0
      90 0008 6001          SACL    DXR             ;送信バッファ書込み
      91 0009 ce00          EINT
      92 000a ce26          RET
      93                    
      94                    .end

 

ステップ数は1024なので16ビットカウンタで一周64ステップ、そのうち上位14ビットが出力されるので繰り返しのノコギリ波となるはずです。
 
コーデックの実際の出力波形はこうなりました。
波形のプラス側先端が暴れているのはおそらくコーデックに内蔵された出力フィルタの伝達特性によるものです。

 

イメージ 1

マイナス側は潰れてしまっていますが、これは外付けオペアンプの振幅不足ですね。
考えてみるとオペアンプを電源電圧5V(±2.5V)で動作させようとしているのはかなり無理がありました。内部吸収電圧が1Vとしても片側1.5Vしか余裕がありません
コーデックは設定で出力ゲインを調整できるので-6dB設定(ゲイン1/2)とすれば一応波形はまともになります

 

イメージ 2

オペアンプは低電圧動作、レールtoレールのものに交換したいところです。