新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

PL330 のアセンブラ

最初、ハンドアセンブルしていた。コンパイラを作ろうとも思ったけど、そこまでする必要もないと思い、gas のマクロでなんちゃってのをつくる。でもって、適当にはできた。

pl330_test_instr:
    DMAMOV sar, rbuffer
    DMAMOV dar, 0x7AA00004
    //DMAMOV dar, wbuffer
    DMAMOV ccr, CCR(15, 2, 0, 15, 3, 1)

    DMANOP
    DMANOP
    //DMALPFE

        DMAWFP 0, periph
        DMALP  11, lc1
            //DMAMOV sar, rbuffer
            DMALP 256, lc0

                DMALD
                DMASTPB 0
                DMASTPB 0
                //DMAST

            DMALPEND lc0

                DMASTPB 0
                DMASTPB 0
                //DMAST

            DMALPEND lc0
            //DMASEV 0
        DMALPEND lc1

    //DMALPEND_FE

    DMAEND

C 言語で char の中に埋めるより圧倒的見やすくなった。シンボルも解決してくれる。DMALP が純正の表記と逆なのはご愛嬌。DMAPLEND もフレキシブルには書けない。DMALP と DMALPEND の間でラベルをつけて差分を逆算している。ラベル名を特定してしまったので、複数の DMALP を掛けない。0b とかを使えば解決すると思うけど、やっていない。

まずはここまでかな。