#include <p24FJ64GA002.h>
#include "table.h"
#include "libuart.h"
マクロ定義 | |
#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)) |
void __attribute__ | ( | (interrupt, auto_psv) | ) |
参照先 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 | ) |
参照先 uart1_rx_enptr, uart1_rx_stptr, uart1_tx_enptr, と uart1_tx_stptr.
参照元 SSM_init(), と UART1_init().
{ uart1_tx_stptr = 0; uart1_tx_enptr = 0; uart1_rx_stptr = 0; uart1_rx_enptr = 0; return; }
unsigned long UART1_get_baud | ( | void | ) |
unsigned char UART1_get_recvbuf | ( | void | ) |
参照先 UART1_RX_BUFFER_SIZE, uart1_rx_enptr, と uart1_rx_stptr.
{ if(uart1_rx_stptr >= uart1_rx_enptr) return(UART1_RX_BUFFER_SIZE - (uart1_rx_stptr - uart1_rx_enptr)); else return(UART1_RX_BUFFER_SIZE - uart1_rx_enptr + uart1_rx_stptr); }
unsigned char UART1_get_sendbuf | ( | void | ) |
参照先 UART1_TX_BUFFER_SIZE, uart1_tx_enptr, と uart1_tx_stptr.
参照元 CONFIG_dump_config().
{ if(uart1_tx_stptr >= uart1_tx_enptr) return(UART1_TX_BUFFER_SIZE - (uart1_tx_stptr - uart1_tx_enptr)); else return(UART1_TX_BUFFER_SIZE - uart1_tx_enptr + uart1_tx_stptr); }
int UART1_getch | ( | void | ) |
参照先 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 | ) |
参照先 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 | ) |
参照先 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 | |||
) |
参照先 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 | ) |
参照先 hex, と UART1_putch().
参照元 CONFIG_dump_config().
{ UART1_putch(hex[(a >> 4) & 0x0f]); UART1_putch(hex[ a & 0x0f]); return; }
void UART1_putint | ( | int | digit | ) |
参照先 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 | ) |
void UART2_buf_clear | ( | void | ) |
参照先 uart2_rx_enptr, uart2_rx_stptr, uart2_tx_enptr, と uart2_tx_stptr.
参照元 SSM_init(), と UART2_init().
{ uart2_tx_stptr = 0; uart2_tx_enptr = 0; uart2_rx_stptr = 0; uart2_rx_enptr = 0; return; }
unsigned long UART2_get_baud | ( | void | ) |
unsigned char UART2_get_recvbuf | ( | void | ) |
参照先 UART2_RX_BUFFER_SIZE, uart2_rx_enptr, と uart2_rx_stptr.
{ if(uart2_rx_stptr >= uart2_rx_enptr) return(UART2_RX_BUFFER_SIZE - (uart2_rx_stptr - uart2_rx_enptr)); else return(UART2_RX_BUFFER_SIZE - uart2_rx_enptr + uart2_rx_stptr); }
unsigned char UART2_get_sendbuf | ( | void | ) |
参照先 UART2_TX_BUFFER_SIZE, uart2_tx_enptr, と uart2_tx_stptr.
{ if(uart2_tx_stptr >= uart2_tx_enptr) return(UART2_TX_BUFFER_SIZE - (uart2_tx_stptr - uart2_tx_enptr)); else return(UART2_TX_BUFFER_SIZE - uart2_tx_enptr + uart2_tx_stptr); }
int UART2_getch | ( | void | ) |
参照先 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 | ) |
参照先 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 | ) |
参照先 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 | |||
) |
参照先 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 | ) |
参照先 hex, と UART2_putch().
{ UART2_putch(hex[(a >> 4) & 0x0f]); UART2_putch(hex[ a & 0x0f]); return; }
void UART2_putint | ( | int | digit | ) |
参照先 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 | ) |
unsigned int UART_get_brg | ( | unsigned long | baud | ) |
参照先 cpu_fcy.
参照元 UART1_init(), と UART2_init().
{ return( ((cpu_fcy[ OSCTUN ] >> 2) / baud) - 1 ); }
char uart1_rx_buf[UART1_RX_BUFFER_SIZE] |
参照元 UART1_getch().
unsigned char uart1_rx_enptr |
unsigned char uart1_rx_stptr |
char uart1_tx_buf[UART1_TX_BUFFER_SIZE] |
参照元 UART1_putch().
unsigned char uart1_tx_enptr |
unsigned char uart1_tx_stptr |
char uart2_rx_buf[UART2_RX_BUFFER_SIZE] |
参照元 __attribute__(), と UART2_getch().
unsigned char uart2_rx_enptr |
unsigned char uart2_rx_stptr |
char uart2_tx_buf[UART2_TX_BUFFER_SIZE] |
参照元 UART2_putch().
unsigned char uart2_tx_enptr |
unsigned char uart2_tx_stptr |