MDMA

ADSP-BF561のメモリー間DMAです。BF533のMDMAを書き換えただけですので説明は省きます。

#include <cdefBF53x.h>
#include <sys/exception.h>

char srcBuf[20] = "Chiba City Blues";
char dstBuf[20];

                                                // DMA descriptor
struct {
        void * ndp;                             // next descriptor
        void * sa;                              // start address
        unsigned short config;
        unsigned short xcnt;
                 short xmod;
}src, dst;

EX_INTERRUPT_HANDLER(intHandler);


main(void)
{
        
        *pSICA_IMASK0 = 0xffffffff;
        *pSICA_IMASK1 = 0xffffffff;
        register_handler( ik_ivg8, intHandler );
        // デスクリプタ・アドレス指定
        *pMDMA1_D0_NEXT_DESC_PTR = &dst;
        *pMDMA1_S0_NEXT_DESC_PTR = &src;
        
        // デスティネーション
        // 転送後、DMAを終了
        dst.ndp = 0;
        dst.sa = dstBuf;
        dst.xcnt = 20;
        dst.xmod = 1;
        dst.config = DI_EN | DMAEN | WNR | WDSIZE_8;
        
        // ソース
        // 転送後DMAを終了
        src.ndp = 0;
        src.sa = srcBuf;
        src.xcnt = 20;
        src.xmod = 1;
        src.config = DMAEN | WDSIZE_8;
        
        // キックスタート
        // ラージ・デスクリプタ・リンク&デスクリプタサイズ=7
        *pMDMA1_S0_CONFIG = DMAEN |       WDSIZE_8 | 0x7700;
        *pMDMA1_D0_CONFIG = DMAEN | WNR | WDSIZE_8 | 0x7700;
        while(1)
                ;
        
}

        // 割り込みハンドラ
EX_INTERRUPT_HANDLER(intHandler)
{
        *pMDMA1_D0_IRQ_STATUS = DMA_DONE;       // 割り込みクリア
}
Blackfin空挺団 | プログラム | EZ-KIT | コア&ペリフェラル | TOPPERS/JSP | こぼれ話 | DSP掲示板