TOPPERSでDDS

TOPPERS/JSP上でのAD1836Aオーディオ入出力環境が整ったので、DDSを使って音を出してみました。

DDS生成部

MCMもそうでしたが、この手の丸抱え環境が完成するとプログラマの仕事はほとんどありません。タスクの先頭でDDSのオブジェクトを生成し、あとは受信データが来るタイミングにあわせてrunメソッドを呼び出します。受信データは廃棄して送信データとして生成した正弦波をコピーします。

#include "t_services.h"
#include "kernel_id.h"
#include "pll.h"
#include "ad1836a.h"
#include "stk.h"

static struct CODEC_BUFFER tx_buf;
static short c[SAMPLE_PER_INTR], s[SAMPLE_PER_INTR];

void plltest_task(VP_INT extinf)
{
    struct CODEC_BUFFER * rx_buf;
    stk::CDDS *dds;
        
        
    dds = new stk::CDDS( 0x04000000 );
        
    act_tsk( CODEC_TASK );
    while( 1 )
    {
        int sample;
        rcv_dtq( CODEC_RX_DTQ, (VP_INT*)& rx_buf );

        dds->run( c, s, SAMPLE_PER_INTR );
        for ( sample = 0; sample < SAMPLE_PER_INTR; sample++ )
            tx_buf.data[sample][0] = c[sample] << 8;

        snd_dtq( CODEC_TX_DTQ, (VP_INT) & tx_buf ); 
    }
}

プログラム

これを書いているときに「あっ!」と気づいたのですがプログラム名がDDSではなくPLLになっています。あーあ。ちょっと風邪気味で面倒なので勘弁してもらってそのままアップロードします。

ダウンロード : 497KB

Blackfin空挺団 | プログラム | EZ-KIT | コア&ペリフェラル | TOPPERS/JSP | こぼれ話 | DSP掲示板