Microchip PIC24Fの UARTに Software FIFOを実装したシリアル ドライバ>です。 シリアルドライバは、PIC24Fのハードウェア UART 割込 (_U1TXInterrupt, _U2TXInterrupt, _U1RXInterrupt, _U2RXInterrupt) から呼ばれます。また、 2チャンネルの UARTに対して、送信/受信バッファサイズを任意に設定できます。
UARTxは、UART1またはUART2と置き換えてください
| RS-232 | RS-232C (D-Sub 9pin メス) | 
| 2400 〜 230kbps | |
| 送信バッファ 60byte | |
| 受信バッファ 8byte | |
| OBD-II | ISO-9141 | 
| 4800bps | |
| 送信バッファ 50byte | |
| 受信バッファ 68byte | 
| 通信速度 | 300 〜 921.6kbps | 
| FIFOバッファ有 | 
PIC24Fの場合は、TXD/RXDをそれぞれ RPピンへ接続します。その後、ファームウェア側で RPピンに TXD/RXDの機能を設定します。したがって、RPピンであればどこに接続してもよく、非常に回路が組みやすくなっています。
たとえば、ファームウェア書き換え用コネクタ (ICSP)の PGD/PGCピンに対して TXD/RXDを割り当て、デバッグ時のみシリアル通信を行うといったことが非常に簡単にできます。
回路によって TX/RXのピンを変更する場合は、UARTx_init()関数内を変更してください。
libuart.hのマクロを変更してからコンパイルします。
#define UART1_TX_BUFFER_SIZE 128 #define UART1_RX_BUFFER_SIZE 128 #define UART2_TX_BUFFER_SIZE 50 #define UART2_RX_BUFFER_SIZE 70
送信/受信のサンプルソースコードです。回路図は、OpenSSM Rev.A を想定しています。
#include <p24FJ64GA002.h>
#include "table.h"
#include "libuart.h"
_CONFIG1(   JTAGEN_OFF &
            GCP_OFF &
            GWRP_OFF &
            BKBUG_OFF &
            WINDIS_OFF &
            COE_OFF &
            ICS_PGx1 &
            FWDTEN_ON &
            WDTPS_PS256) 
_CONFIG2(   IESO_OFF &
            FNOSC_FRCPLL &
            FCKSM_CSDCMD &
            OSCIOFNC_ON &
            IOL1WAY_OFF &
            I2C1SEL_PRI &
            POSCMOD_NONE) 
int main(void)
{
    int buf;
    /* Fosc = 8.96MHz, Fcy = 17.92MHz, Core 35.84MHz */
    CLKDIV = 0;
    OSCTUN = 0b0000000000011111;
    SRbits.IPL = 0;
    TRISA   = 0b0000000000000011;
    TRISB   = 0b0000111101100001;
    UART1_init(115200);
    UART2_init(  4800);
    /* 送信受信をループバック. エコー */
    while(1){
        ClrWdt();
        if((buf = UART1_getch()) > 0){
            UART1_putch(buf);
        }
        if((buf = UART2_getch()) > 0){
            UART2_putch(buf);
        }
    }
    return(0);
}
コンパイルの確認はしていません (^^;