マクロ定義 | 関数 | 変数

C:/PIC/OpenSSM/libuart.c

#include <p24FJ64GA002.h>
#include "table.h"
#include "libuart.h"
libuart.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define abs(a)   (((a)>0) ? (a) : -(a))

関数

void __attribute__ ((interrupt, auto_psv))
void UART1_init (unsigned long baud)
void UART2_init (unsigned long baud)
void UART1_buf_clear (void)
void UART2_buf_clear (void)
int UART1_getch (void)
int UART2_getch (void)
int UART1_putch (unsigned char buf)
int UART2_putch (unsigned char buf)
void UART1_putstr (char *buf)
void UART2_putstr (char *buf)
void UART1_putint (int digit)
void UART2_putint (int digit)
void UART1_putdouble (double digit, unsigned char size2)
void UART2_putdouble (double digit, unsigned char size2)
void UART1_puthex (unsigned char a)
void UART2_puthex (unsigned char a)
unsigned char UART1_get_sendbuf (void)
unsigned char UART2_get_sendbuf (void)
unsigned char UART1_get_recvbuf (void)
unsigned char UART2_get_recvbuf (void)
unsigned int UART_get_brg (unsigned long baud)
unsigned long UART1_get_baud (void)
unsigned long UART2_get_baud (void)

変数

char uart1_tx_buf [UART1_TX_BUFFER_SIZE]
unsigned char uart1_tx_stptr
unsigned char uart1_tx_enptr
char uart2_tx_buf [UART2_TX_BUFFER_SIZE]
unsigned char uart2_tx_stptr
unsigned char uart2_tx_enptr
char uart1_rx_buf [UART1_RX_BUFFER_SIZE]
unsigned char uart1_rx_stptr
unsigned char uart1_rx_enptr
char uart2_rx_buf [UART2_RX_BUFFER_SIZE]
unsigned char uart2_rx_stptr
unsigned char uart2_rx_enptr

マクロ定義

#define abs (   a  )     (((a)>0) ? (a) : -(a))

libuart.c29 行で定義されています。

参照元 UART1_putdouble(), UART1_putint(), UART2_putdouble(), と UART2_putint().


関数

void __attribute__ ( (interrupt, auto_psv)   ) 

libuart.c139 行で定義されています。

参照先 uart2_rx_buf, UART2_RX_BUFFER_SIZE, uart2_rx_enptr, と uart2_rx_stptr.

{
    unsigned char nxptr;

    IFS1bits.U2RXIF = 0;

    if(U2STAbits.URXDA){
        /* ポインタ更新 */
        nxptr = uart2_rx_enptr + 1;
        if(nxptr >= UART2_RX_BUFFER_SIZE) nxptr = 0;
        if(uart2_rx_stptr != nxptr){
            uart2_rx_buf[ uart2_rx_enptr ] = U2RXREG;
            uart2_rx_enptr = nxptr;
        } else {
            /* バッファが満杯 */
            /* 取りこぼすことにする */
        }
    }

    return;
}

void UART1_buf_clear ( void   ) 

libuart.c216 行で定義されています。

参照先 uart1_rx_enptr, uart1_rx_stptr, uart1_tx_enptr, と uart1_tx_stptr.

参照元 SSM_init(), と UART1_init().

呼出しグラフ:

unsigned long UART1_get_baud ( void   ) 

libuart.c521 行で定義されています。

参照先 cpu_fcy.

{
    return( (unsigned long)(cpu_fcy[ OSCTUN ] >> 2) / (unsigned long)(U1BRG + 1));
}

unsigned char UART1_get_recvbuf ( void   ) 
unsigned char UART1_get_sendbuf ( void   ) 

libuart.c484 行で定義されています。

参照先 UART1_TX_BUFFER_SIZE, uart1_tx_enptr, と uart1_tx_stptr.

参照元 CONFIG_dump_config().

呼出しグラフ:

int UART1_getch ( void   ) 

libuart.c242 行で定義されています。

参照先 uart1_rx_buf, UART1_RX_BUFFER_SIZE, uart1_rx_enptr, と uart1_rx_stptr.

{
    unsigned char buf;
    unsigned char nxptr;
    unsigned char ipl;

    ipl = SRbits.IPL;
    SRbits.IPL = 5;
    Nop();

    /* バッファが空 */
    if(uart1_rx_stptr == uart1_rx_enptr){
        SRbits.IPL = ipl;
        return(-1);
    }

    /* バッファから1byte取り出す */
    buf = uart1_rx_buf[ uart1_rx_stptr ];

    /* ポインタ更新 */
    nxptr = uart1_rx_stptr + 1;
    if(nxptr >= UART1_RX_BUFFER_SIZE) nxptr = 0;
    uart1_rx_stptr = nxptr;

    SRbits.IPL = ipl;
    return(buf);
}

void UART1_init ( unsigned long  baud  ) 

libuart.c165 行で定義されています。

参照先 UART1_buf_clear(), と UART_get_brg().

参照元 main(), と SSM_main().

{
    RPINR18bits.U1RXR = 5;              /* RXD : RP5 */
    RPOR2bits.RP4R = 3;                 /* TXD : RP4 */

    U1MODE = 0b1000100000001000;
    U1STA  = 0b0010010000000000;
    U1BRG  = UART_get_brg(baud);

    /* 送信割込 */
    IPC3bits.U1TXIP = 3;
    IEC0bits.U1TXIE = 1;
    IFS0bits.U1TXIF = 0;

    /* 受信割込 */
    IPC2bits.U1RXIP = 4;
    IEC0bits.U1RXIE = 1;
    IFS0bits.U1RXIF = 0;

    UART1_buf_clear();
    return;
}

関数の呼び出しグラフ:

呼出しグラフ:

int UART1_putch ( unsigned char  buf  ) 

libuart.c302 行で定義されています。

参照先 uart1_tx_buf, UART1_TX_BUFFER_SIZE, uart1_tx_enptr, と uart1_tx_stptr.

参照元 CONFIG_dump_config(), UART1_putdouble(), UART1_puthex(), UART1_putint(), と UART1_putstr().

{
    unsigned char nxptr;
    unsigned char ipl;

    ipl = SRbits.IPL;
    SRbits.IPL = 4;
    Nop();

    if(uart1_tx_stptr == uart1_tx_enptr){
        while(!U1STAbits.TRMT);
        U1TXREG = buf;
        SRbits.IPL = ipl;
        return(buf);
    }

    nxptr = uart1_tx_enptr + 1;
    if(nxptr >= UART1_TX_BUFFER_SIZE) nxptr = 0;
    if(uart1_tx_stptr == nxptr){
        SRbits.IPL = ipl;
        return(-1);
    }

    /* 送信バッファに1文字入れる */
    uart1_tx_buf[uart1_tx_enptr] = buf;
    uart1_tx_enptr = nxptr;

    SRbits.IPL = ipl;
    return(buf);
}

呼出しグラフ:

void UART1_putdouble ( double  digit,
unsigned char  size2 
)

libuart.c422 行で定義されています。

参照先 abs, と UART1_putch().

{
    if(digit < 0) UART1_putch('-');

    digit = abs(digit);

    if(digit > 9999) UART1_putch('0' + (unsigned char)(digit / 10000) % 10);
    if(digit >  999) UART1_putch('0' + (unsigned char)(digit /  1000) % 10);
    if(digit >   99) UART1_putch('0' + (unsigned char)(digit /   100) % 10);
    if(digit >    9) UART1_putch('0' + (unsigned char)(digit /    10) % 10);
    UART1_putch('0' + (unsigned char)digit % 10);
    UART1_putch('.');
    UART1_putch('0' + (unsigned int)(digit * 10.0) % 10);
    if(size2 > 1)   UART1_putch('0' + (unsigned int)(digit *   100.0) % 10);
    if(size2 > 2)   UART1_putch('0' + (unsigned int)(digit *  1000.0) % 10);
    if(size2 > 3)   UART1_putch('0' + (unsigned int)(digit * 10000.0) % 10);

    return;
}

関数の呼び出しグラフ:

void UART1_puthex ( unsigned char  a  ) 

libuart.c466 行で定義されています。

参照先 hex, と UART1_putch().

参照元 CONFIG_dump_config().

{
    UART1_putch(hex[(a >> 4)    & 0x0f]);
    UART1_putch(hex[ a          & 0x0f]);
    return;
}

関数の呼び出しグラフ:

呼出しグラフ:

void UART1_putint ( int  digit  ) 

libuart.c392 行で定義されています。

参照先 abs, と UART1_putch().

{
    if(digit < 0) UART1_putch('-');

    digit = abs(digit);

    if(digit > 9999) UART1_putch('0' + digit / 10000 % 10);
    if(digit >  999) UART1_putch('0' + digit /  1000 % 10);
    if(digit >   99) UART1_putch('0' + digit /   100 % 10);
    if(digit >    9) UART1_putch('0' + digit /    10 % 10);

    UART1_putch('0' + digit % 10);
    return;
}

関数の呼び出しグラフ:

void UART1_putstr ( char *  buf  ) 

libuart.c368 行で定義されています。

参照先 UART1_putch().

{
    while(*buf){
        while(UART1_putch(*buf) < 0);
        *buf++;
    }

    return;
}

関数の呼び出しグラフ:

void UART2_buf_clear ( void   ) 

libuart.c227 行で定義されています。

参照先 uart2_rx_enptr, uart2_rx_stptr, uart2_tx_enptr, と uart2_tx_stptr.

参照元 SSM_init(), と UART2_init().

呼出しグラフ:

unsigned long UART2_get_baud ( void   ) 

libuart.c526 行で定義されています。

参照先 cpu_fcy.

{
    return( (unsigned long)(cpu_fcy[ OSCTUN ] >> 2) / (unsigned long)(U2BRG + 1));
}

unsigned char UART2_get_recvbuf ( void   ) 
unsigned char UART2_get_sendbuf ( void   ) 
int UART2_getch ( void   ) 

libuart.c270 行で定義されています。

参照先 uart2_rx_buf, UART2_RX_BUFFER_SIZE, uart2_rx_enptr, と uart2_rx_stptr.

{
    unsigned char buf;
    unsigned char nxptr;
    unsigned char ipl;

    ipl = SRbits.IPL;
    SRbits.IPL = 5;
    Nop();

    /* バッファが空 */
    if(uart2_rx_stptr == uart2_rx_enptr){
        SRbits.IPL = ipl;
        return(-1);
    }

    /* バッファから1byte取り出す */
    buf = uart2_rx_buf[ uart2_rx_stptr ];

    /* ポインタ更新 */
    nxptr = uart2_rx_stptr + 1;
    if(nxptr >= UART2_RX_BUFFER_SIZE) nxptr = 0;
    uart2_rx_stptr = nxptr;

    SRbits.IPL = ipl;
    return(buf);
}

void UART2_init ( unsigned long  baud  ) 

libuart.c189 行で定義されています。

参照先 UART2_buf_clear(), と UART_get_brg().

参照元 main(), と SSM_main().

{
    RPINR19bits.U2RXR = 6;              /* RXD : RP6 */
    RPOR3bits.RP7R = 5;                 /* TXD : RP7 */

    U2MODE = 0b1000100000001000;
    U2STA  = 0b0010010000000000;
    U2BRG  = UART_get_brg(baud);

    /* 送信割込 */
    IPC7bits.U2TXIP = 3;
    IEC1bits.U2TXIE = 1;
    IFS1bits.U2TXIF = 0;

    /* 受信割込 */
    IPC7bits.U2RXIP = 4;
    IEC1bits.U2RXIE = 1;
    IFS1bits.U2RXIF = 0;

    UART2_buf_clear();
    return;
}

関数の呼び出しグラフ:

呼出しグラフ:

int UART2_putch ( unsigned char  buf  ) 

libuart.c333 行で定義されています。

参照先 uart2_tx_buf, UART2_TX_BUFFER_SIZE, uart2_tx_enptr, と uart2_tx_stptr.

参照元 UART2_putdouble(), UART2_puthex(), UART2_putint(), と UART2_putstr().

{
    unsigned char nxptr;
    unsigned char ipl;

    ipl = SRbits.IPL;
    SRbits.IPL = 4;
    Nop();

    if(uart2_tx_stptr == uart2_tx_enptr){
        while(!U2STAbits.TRMT);
        U2TXREG = buf;
        SRbits.IPL = ipl;
        return(buf);
    }

    nxptr = uart2_tx_enptr + 1;
    if(nxptr >= UART2_TX_BUFFER_SIZE) nxptr = 0;
    if(uart2_tx_stptr == nxptr){
        SRbits.IPL = ipl;
        return(-1);
    }

    /* 送信バッファに1文字入れる */
    uart2_tx_buf[uart2_tx_enptr] = buf;
    uart2_tx_enptr = nxptr;

    SRbits.IPL = ipl;
    return(buf);
}

呼出しグラフ:

void UART2_putdouble ( double  digit,
unsigned char  size2 
)

libuart.c442 行で定義されています。

参照先 abs, と UART2_putch().

{
    if(digit < 0) UART2_putch('-');

    digit = abs(digit);

    if(digit > 9999) UART2_putch('0' + (unsigned char)(digit / 10000) % 10);
    if(digit >  999) UART2_putch('0' + (unsigned char)(digit /  1000) % 10);
    if(digit >   99) UART2_putch('0' + (unsigned char)(digit /   100) % 10);
    if(digit >    9) UART2_putch('0' + (unsigned char)(digit /    10) % 10);
    UART2_putch('0' + (unsigned char)digit % 10);
    UART2_putch('.');
    UART2_putch('0' + (unsigned int)(digit * 10.0) % 10);
    if(size2 > 1)   UART2_putch('0' + (unsigned int)(digit *   100.0) % 10);
    if(size2 > 2)   UART2_putch('0' + (unsigned int)(digit *  1000.0) % 10);
    if(size2 > 3)   UART2_putch('0' + (unsigned int)(digit * 10000.0) % 10);

    return;
}

関数の呼び出しグラフ:

void UART2_puthex ( unsigned char  a  ) 

libuart.c473 行で定義されています。

参照先 hex, と UART2_putch().

{
    UART2_putch(hex[(a >> 4)    & 0x0f]);
    UART2_putch(hex[ a          & 0x0f]);
    return;
}

関数の呼び出しグラフ:

void UART2_putint ( int  digit  ) 

libuart.c407 行で定義されています。

参照先 abs, と UART2_putch().

{
    if(digit < 0) UART2_putch('-');

    digit = abs(digit);

    if(digit > 9999) UART2_putch('0' + digit / 10000 % 10);
    if(digit >  999) UART2_putch('0' + digit /  1000 % 10);
    if(digit >   99) UART2_putch('0' + digit /   100 % 10);
    if(digit >    9) UART2_putch('0' + digit /    10 % 10);

    UART2_putch('0' + digit % 10);
    return;
}

関数の呼び出しグラフ:

void UART2_putstr ( char *  buf  ) 

libuart.c378 行で定義されています。

参照先 UART2_putch().

{
    while(*buf){
        while(UART2_putch(*buf) < 0);
        *buf++;
    }

    return;
}

関数の呼び出しグラフ:

unsigned int UART_get_brg ( unsigned long  baud  ) 

libuart.c516 行で定義されています。

参照先 cpu_fcy.

参照元 UART1_init(), と UART2_init().

{
    return( ((cpu_fcy[ OSCTUN ] >> 2) / baud) - 1 );
}

呼出しグラフ:


変数

char uart1_rx_buf[UART1_RX_BUFFER_SIZE]

libuart.c45 行で定義されています。

参照元 UART1_getch().

unsigned char uart1_rx_enptr

libuart.c47 行で定義されています。

参照元 UART1_buf_clear(), UART1_get_recvbuf(), と UART1_getch().

unsigned char uart1_rx_stptr

libuart.c46 行で定義されています。

参照元 UART1_buf_clear(), UART1_get_recvbuf(), と UART1_getch().

char uart1_tx_buf[UART1_TX_BUFFER_SIZE]

libuart.c36 行で定義されています。

参照元 UART1_putch().

unsigned char uart1_tx_enptr

libuart.c38 行で定義されています。

参照元 UART1_buf_clear(), UART1_get_sendbuf(), と UART1_putch().

unsigned char uart1_tx_stptr

libuart.c37 行で定義されています。

参照元 UART1_buf_clear(), UART1_get_sendbuf(), と UART1_putch().

char uart2_rx_buf[UART2_RX_BUFFER_SIZE]

libuart.c49 行で定義されています。

参照元 __attribute__(), と UART2_getch().

unsigned char uart2_rx_enptr

libuart.c51 行で定義されています。

参照元 __attribute__(), UART2_buf_clear(), UART2_get_recvbuf(), と UART2_getch().

unsigned char uart2_rx_stptr

libuart.c50 行で定義されています。

参照元 __attribute__(), UART2_buf_clear(), UART2_get_recvbuf(), と UART2_getch().

char uart2_tx_buf[UART2_TX_BUFFER_SIZE]

libuart.c40 行で定義されています。

参照元 UART2_putch().

unsigned char uart2_tx_enptr

libuart.c42 行で定義されています。

参照元 UART2_buf_clear(), UART2_get_sendbuf(), と UART2_putch().

unsigned char uart2_tx_stptr

libuart.c41 行で定義されています。

参照元 UART2_buf_clear(), UART2_get_sendbuf(), と UART2_putch().