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 とかを使えば解決すると思うけど、やっていない。
まずはここまでかな。