https://forum.pjrc.com/threads/29446-Teensy-Hardware-Flow-Control-RTS-CTS?p=80425#post80425teensy4-core
void serial_format(uint32_t format); | void serial_format(uint32_t format); | ||||
void serial_end(void); | void serial_end(void); | ||||
void serial_set_transmit_pin(uint8_t pin); | void serial_set_transmit_pin(uint8_t pin); | ||||
int serial_set_rts(uint8_t pin); | |||||
int serial_set_cts(uint8_t pin); | |||||
void serial_putchar(uint32_t c); | void serial_putchar(uint32_t c); | ||||
void serial_write(const void *buf, unsigned int count); | void serial_write(const void *buf, unsigned int count); | ||||
void serial_flush(void); | void serial_flush(void); | ||||
void serial2_format(uint32_t format); | void serial2_format(uint32_t format); | ||||
void serial2_end(void); | void serial2_end(void); | ||||
void serial2_set_transmit_pin(uint8_t pin); | void serial2_set_transmit_pin(uint8_t pin); | ||||
int serial2_set_rts(uint8_t pin); | |||||
int serial2_set_cts(uint8_t pin); | |||||
void serial2_putchar(uint32_t c); | void serial2_putchar(uint32_t c); | ||||
void serial2_write(const void *buf, unsigned int count); | void serial2_write(const void *buf, unsigned int count); | ||||
void serial2_flush(void); | void serial2_flush(void); | ||||
void serial3_format(uint32_t format); | void serial3_format(uint32_t format); | ||||
void serial3_end(void); | void serial3_end(void); | ||||
void serial3_set_transmit_pin(uint8_t pin); | void serial3_set_transmit_pin(uint8_t pin); | ||||
int serial3_set_rts(uint8_t pin); | |||||
int serial3_set_cts(uint8_t pin); | |||||
void serial3_putchar(uint32_t c); | void serial3_putchar(uint32_t c); | ||||
void serial3_write(const void *buf, unsigned int count); | void serial3_write(const void *buf, unsigned int count); | ||||
void serial3_flush(void); | void serial3_flush(void); |
#endif | #endif | ||||
} | } | ||||
int serial_set_rts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; | |||||
if (pin == 6) { | |||||
CORE_PIN6_CONFIG = PORT_PCR_MUX(3); | |||||
} else if (pin == 19) { | |||||
CORE_PIN19_CONFIG = PORT_PCR_MUX(3); | |||||
} else { | |||||
UART0_MODEM &= ~UART_MODEM_RXRTSE; | |||||
return 0; | |||||
} | |||||
UART0_MODEM |= UART_MODEM_RXRTSE; | |||||
return 1; | |||||
} | |||||
int serial_set_cts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART0)) return 0; | |||||
if (pin == 18) { | |||||
CORE_PIN18_CONFIG = PORT_PCR_MUX(3); // TODO: weak pullup or pulldown? | |||||
} else if (pin == 20) { | |||||
CORE_PIN20_CONFIG = PORT_PCR_MUX(3); // TODO: weak pullup or pulldown? | |||||
} else { | |||||
UART0_MODEM &= ~UART_MODEM_TXCTSE; | |||||
return 0; | |||||
} | |||||
UART0_MODEM |= UART_MODEM_TXCTSE; | |||||
return 1; | |||||
} | |||||
void serial_putchar(uint32_t c) | void serial_putchar(uint32_t c) | ||||
{ | { | ||||
uint32_t head, n; | uint32_t head, n; |
#endif | #endif | ||||
} | } | ||||
int serial2_set_rts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; | |||||
if (pin == 22) { | |||||
CORE_PIN22_CONFIG = PORT_PCR_MUX(3); | |||||
} else { | |||||
UART1_MODEM &= ~UART_MODEM_RXRTSE; | |||||
return 0; | |||||
} | |||||
UART1_MODEM |= UART_MODEM_RXRTSE; | |||||
return 1; | |||||
} | |||||
int serial2_set_cts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART1)) return 0; | |||||
if (pin == 23) { | |||||
CORE_PIN23_CONFIG = PORT_PCR_MUX(3); // TODO: weak pullup or pulldown? | |||||
} else { | |||||
UART1_MODEM &= ~UART_MODEM_TXCTSE; | |||||
return 0; | |||||
} | |||||
UART1_MODEM |= UART_MODEM_TXCTSE; | |||||
return 1; | |||||
} | |||||
void serial2_putchar(uint32_t c) | void serial2_putchar(uint32_t c) | ||||
{ | { | ||||
uint32_t head, n; | uint32_t head, n; |
#endif | #endif | ||||
} | } | ||||
int serial3_set_rts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; | |||||
if (pin == 2) { | |||||
CORE_PIN2_CONFIG = PORT_PCR_MUX(3); | |||||
} else { | |||||
UART2_MODEM &= ~UART_MODEM_RXRTSE; | |||||
return 0; | |||||
} | |||||
UART2_MODEM |= UART_MODEM_RXRTSE; | |||||
return 1; | |||||
} | |||||
int serial3_set_cts(uint8_t pin) | |||||
{ | |||||
if (!(SIM_SCGC4 & SIM_SCGC4_UART2)) return 0; | |||||
if (pin == 14) { | |||||
CORE_PIN14_CONFIG = PORT_PCR_MUX(3); // TODO: weak pullup or pulldown? | |||||
} else { | |||||
UART2_MODEM &= ~UART_MODEM_TXCTSE; | |||||
return 0; | |||||
} | |||||
UART2_MODEM |= UART_MODEM_TXCTSE; | |||||
return 1; | |||||
} | |||||
void serial3_putchar(uint32_t c) | void serial3_putchar(uint32_t c) | ||||
{ | { | ||||
uint32_t head, n; | uint32_t head, n; |