PIC32MX Port

XC32コンパイラのライブラリを見てみると各ペリフェラルに対し

便利?なマクロが準備されている。

Port関係にも当然手厚く準備されている。ports.h参照。
ただ,レジスタで制御した方が明示的で分かりやす。気がするので,
ここではレジスタ制御での設定方法を記載しておく。
PIC32MX2xx 28-pin SPDIPに存在するI/Oは以下。
RAとRB系のPortが存在するが,途中歯抜けもあるので注意。
8bit連続して取れるI/Oがないのか・・・
ちなみに,パッケージ違いや,PIC32MX1xxでもアサインが異なるので注意。
RA02
RA13
RA29
RA310
RA412
RA7
RA8
RA9
RA10
RB04
RB15
RB26
RB37
RB411
RB514
RB6
RB716
RB817
RB918
RB1021
RB1122
RB12
RB1324
RB1425
RB1526


Port Diagramは以下の構成。

Port Diagram
関係するレジスタは以下の通り。
TRISxピンの入出力モード設定1:Input0:Output
LATx
ピンの出力用1:High0:Low
PORTx
ピンの入出力用1:High0:Low
ODCx
オープンドレイン設定1:OpenDrain1:CMOS
ANSELxAnalog,Digital設定1:Analog,0:Digital
CNPUxプルアップ設定1:ON1:OFF
CNPDxプルダウン設定1:ON1:OFF

ex)
レジスタ制御と言いながら,bitアクセスのマクロは使っていますが・・・
PB14のPort情報でPB13を1/0切り替えを行う例。
PB14とPB15をショートするとPB13のLEDが点灯します。
    ANSELBbits.ANSB13 = 0;  // digital
    ANSELBbits.ANSB14 = 0;  // digital
    ANSELBbits.ANSB15 = 0;  // digital
    TRISBbits.TRISB13 = 0;  // output
    TRISBbits.TRISB14 = 1;  // input
    TRISBbits.TRISB15 = 0;  // output
    LATBbits.LATB15 = 1;    // high output
    CNPDBbits.CNPDB14 = 1;  // pull-down
    for(;;)
    {
        if(PORTBbits.RB14)
            LATBbits.LATB13 = 1;    // high output
        else
            LATBbits.LATB13 = 0;    // low output
    }


PIC32MXではペリフェラルのピンアサインを下記表に従って選択することができる。

ある程度自由にピンアサインを弄ることが可能。

ex) UARTのPinをRx=PORTB13,Tx=PORTB15に割り当ててみる。
U1RXR = 3; // uart rx = RPB13に割り当て

RPB15R = 1; // uart tx = RPB15に割り当て

コメント

タイトルとURLをコピーしました