Add support for pins 26 and 27main
@@ -10,10 +10,10 @@ | |||
* permit persons to whom the Software is furnished to do so, subject to | |||
* the following conditions: | |||
* | |||
* 1. The above copyright notice and this permission notice shall be | |||
* 1. The above copyright notice and this permission notice shall be | |||
* included in all copies or substantial portions of the Software. | |||
* | |||
* 2. If the Software is incorporated into a build system that allows | |||
* 2. If the Software is incorporated into a build system that allows | |||
* selection among a list of target devices, then similar target | |||
* devices manufactured by PJRC.COM must be included in the list of | |||
* target devices and selectable in the same manner. | |||
@@ -210,6 +210,9 @@ void serial_set_tx(uint8_t pin, uint8_t opendrain) | |||
case 4: CORE_PIN4_CONFIG = 0; break; // PTA2 | |||
case 24: CORE_PIN24_CONFIG = 0; break; // PTE20 | |||
#endif | |||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||
case 26: CORE_PIN26_CONFIG = 0; break; //PTA14 | |||
#endif | |||
} | |||
if (opendrain) { | |||
cfg = PORT_PCR_DSE | PORT_PCR_ODE; | |||
@@ -223,6 +226,9 @@ void serial_set_tx(uint8_t pin, uint8_t opendrain) | |||
case 4: CORE_PIN4_CONFIG = cfg | PORT_PCR_MUX(2); break; | |||
case 24: CORE_PIN24_CONFIG = cfg | PORT_PCR_MUX(4); break; | |||
#endif | |||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||
case 26: CORE_PIN26_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
#endif | |||
} | |||
} | |||
tx_pin_num = pin; | |||
@@ -239,6 +245,9 @@ void serial_set_rx(uint8_t pin) | |||
case 3: CORE_PIN3_CONFIG = 0; break; // PTA1 | |||
case 25: CORE_PIN25_CONFIG = 0; break; // PTE21 | |||
#endif | |||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||
case 27: CORE_PIN27_CONFIG = 0; break; // PTA15 | |||
#endif | |||
} | |||
switch (pin) { | |||
case 0: CORE_PIN0_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; | |||
@@ -247,6 +256,9 @@ void serial_set_rx(uint8_t pin) | |||
case 3: CORE_PIN3_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(2); break; | |||
case 25: CORE_PIN25_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(4); break; | |||
#endif | |||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||
case 27: CORE_PIN27_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; | |||
#endif | |||
} | |||
} | |||
rx_pin_num = pin; | |||
@@ -442,7 +454,7 @@ void serial_clear(void) | |||
if (rts_pin) rts_assert(); | |||
} | |||
// status interrupt combines | |||
// status interrupt combines | |||
// Transmit data below watermark UART_S1_TDRE | |||
// Transmit complete UART_S1_TC | |||
// Idle line UART_S1_IDLE |
@@ -10,10 +10,10 @@ | |||
* permit persons to whom the Software is furnished to do so, subject to | |||
* the following conditions: | |||
* | |||
* 1. The above copyright notice and this permission notice shall be | |||
* 1. The above copyright notice and this permission notice shall be | |||
* included in all copies or substantial portions of the Software. | |||
* | |||
* 2. If the Software is incorporated into a build system that allows | |||
* 2. If the Software is incorporated into a build system that allows | |||
* selection among a list of target devices, then similar target | |||
* devices manufactured by PJRC.COM must be included in the list of | |||
* target devices and selectable in the same manner. | |||
@@ -212,7 +212,9 @@ void serial2_set_tx(uint8_t pin, uint8_t opendrain) | |||
if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { | |||
switch (tx_pin_num & 127) { | |||
case 10: CORE_PIN10_CONFIG = 0; break; // PTC4 | |||
#if !(defined(__MK64FX512__) || defined(__MK66FX1M0__)) // not on T3.4 or T3.5 | |||
case 31: CORE_PIN31_CONFIG = 0; break; // PTE0 | |||
#endif | |||
} | |||
if (opendrain) { | |||
cfg = PORT_PCR_DSE | PORT_PCR_ODE; | |||
@@ -221,7 +223,9 @@ void serial2_set_tx(uint8_t pin, uint8_t opendrain) | |||
} | |||
switch (pin & 127) { | |||
case 10: CORE_PIN10_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
#if !(defined(__MK64FX512__) || defined(__MK66FX1M0__)) // not on T3.4 or T3.5 | |||
case 31: CORE_PIN31_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
#endif | |||
} | |||
} | |||
tx_pin_num = pin; | |||
@@ -235,11 +239,15 @@ void serial2_set_rx(uint8_t pin) | |||
if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { | |||
switch (rx_pin_num) { | |||
case 9: CORE_PIN9_CONFIG = 0; break; // PTC3 | |||
#if !(defined(__MK64FX512__) || defined(__MK66FX1M0__)) // not on T3.4 or T3.5 | |||
case 26: CORE_PIN26_CONFIG = 0; break; // PTE1 | |||
#endif | |||
} | |||
switch (pin) { | |||
case 9: CORE_PIN9_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; | |||
#if !(defined(__MK64FX512__) || defined(__MK66FX1M0__)) // not on T3.4 or T3.5 | |||
case 26: CORE_PIN26_CONFIG = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); break; | |||
#endif | |||
} | |||
} | |||
rx_pin_num = pin; | |||
@@ -431,7 +439,7 @@ void serial2_clear(void) | |||
if (rts_pin) rts_assert(); | |||
} | |||
// status interrupt combines | |||
// status interrupt combines | |||
// Transmit data below watermark UART_S1_TDRE | |||
// Transmit complete UART_S1_TC | |||
// Idle line UART_S1_IDLE | |||
@@ -518,7 +526,7 @@ void uart1_status_isr(void) | |||
if (head >= RX_BUFFER_SIZE) head = 0; | |||
if (head != rx_buffer_tail) { | |||
rx_buffer[head] = n; | |||
rx_buffer_head = head; | |||
rx_buffer_head = head; | |||
} | |||
} | |||
c = UART1_C2; |
@@ -10,10 +10,10 @@ | |||
* permit persons to whom the Software is furnished to do so, subject to | |||
* the following conditions: | |||
* | |||
* 1. The above copyright notice and this permission notice shall be | |||
* 1. The above copyright notice and this permission notice shall be | |||
* included in all copies or substantial portions of the Software. | |||
* | |||
* 2. If the Software is incorporated into a build system that allows | |||
* 2. If the Software is incorporated into a build system that allows | |||
* selection among a list of target devices, then similar target | |||
* devices manufactured by PJRC.COM must be included in the list of | |||
* target devices and selectable in the same manner. | |||
@@ -91,8 +91,8 @@ static volatile uint8_t rx_buffer_tail = 0; | |||
#endif | |||
#if defined(KINETISL) | |||
static uint8_t rx_pin_num = 7; | |||
static uint8_t tx_pin_num = 8; | |||
#endif | |||
static uint8_t tx_pin_num = 8; | |||
// UART0 and UART1 are clocked by F_CPU, UART2 is clocked by F_BUS | |||
// UART0 has 8 byte fifo, UART1 and UART2 have 1 byte buffer | |||
@@ -188,7 +188,6 @@ void serial3_set_transmit_pin(uint8_t pin) | |||
void serial3_set_tx(uint8_t pin, uint8_t opendrain) | |||
{ | |||
#if defined(KINETISL) | |||
uint32_t cfg; | |||
if (opendrain) pin |= 128; | |||
@@ -196,7 +195,9 @@ void serial3_set_tx(uint8_t pin, uint8_t opendrain) | |||
if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { | |||
switch (tx_pin_num & 127) { | |||
case 8: CORE_PIN8_CONFIG = 0; break; // PTD3 | |||
#if defined(KINETISL) | |||
case 20: CORE_PIN20_CONFIG = 0; break; // PTD5 | |||
#endif | |||
} | |||
if (opendrain) { | |||
cfg = PORT_PCR_DSE | PORT_PCR_ODE; | |||
@@ -205,11 +206,12 @@ void serial3_set_tx(uint8_t pin, uint8_t opendrain) | |||
} | |||
switch (pin & 127) { | |||
case 8: CORE_PIN8_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
#if defined(KINETISL) | |||
case 20: CORE_PIN20_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
#endif | |||
} | |||
} | |||
tx_pin_num = pin; | |||
#endif | |||
} | |||
void serial3_set_rx(uint8_t pin) | |||
@@ -370,7 +372,7 @@ void serial3_clear(void) | |||
if (rts_pin) rts_assert(); | |||
} | |||
// status interrupt combines | |||
// status interrupt combines | |||
// Transmit data below watermark UART_S1_TDRE | |||
// Transmit complete UART_S1_TC | |||
// Idle line UART_S1_IDLE | |||
@@ -393,7 +395,7 @@ void uart2_status_isr(void) | |||
if (head >= RX_BUFFER_SIZE) head = 0; | |||
if (head != rx_buffer_tail) { | |||
rx_buffer[head] = n; | |||
rx_buffer_head = head; | |||
rx_buffer_head = head; | |||
} | |||
if (rts_pin) { | |||
int avail; |
@@ -10,10 +10,10 @@ | |||
* permit persons to whom the Software is furnished to do so, subject to | |||
* the following conditions: | |||
* | |||
* 1. The above copyright notice and this permission notice shall be | |||
* 1. The above copyright notice and this permission notice shall be | |||
* included in all copies or substantial portions of the Software. | |||
* | |||
* 2. If the Software is incorporated into a build system that allows | |||
* 2. If the Software is incorporated into a build system that allows | |||
* selection among a list of target devices, then similar target | |||
* devices manufactured by PJRC.COM must be included in the list of | |||
* target devices and selectable in the same manner. | |||
@@ -81,6 +81,8 @@ static volatile uint8_t rx_buffer_head = 0; | |||
static volatile uint8_t rx_buffer_tail = 0; | |||
#endif | |||
static uint8_t tx_pin_num = 32; | |||
// UART0 and UART1 are clocked by F_CPU, UART2 is clocked by F_BUS | |||
// UART0 has 8 byte fifo, UART1 and UART2 have 1 byte buffer | |||
@@ -155,6 +157,25 @@ void serial4_set_transmit_pin(uint8_t pin) | |||
void serial4_set_tx(uint8_t pin, uint8_t opendrain) | |||
{ | |||
uint32_t cfg; | |||
if (opendrain) pin |= 128; | |||
if (pin == tx_pin_num) return; | |||
if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { | |||
switch (tx_pin_num & 127) { | |||
case 32: CORE_PIN8_CONFIG = 0; break; // PTD3 | |||
} | |||
if (opendrain) { | |||
cfg = PORT_PCR_DSE | PORT_PCR_ODE; | |||
} else { | |||
cfg = PORT_PCR_DSE | PORT_PCR_SRE; | |||
} | |||
switch (pin & 127) { | |||
case 32: CORE_PIN8_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
} | |||
} | |||
tx_pin_num = pin; | |||
} | |||
void serial4_set_rx(uint8_t pin) | |||
@@ -277,7 +298,7 @@ void serial4_clear(void) | |||
if (rts_pin) rts_assert(); | |||
} | |||
// status interrupt combines | |||
// status interrupt combines | |||
// Transmit data below watermark UART_S1_TDRE | |||
// Transmit complete UART_S1_TC | |||
// Idle line UART_S1_IDLE | |||
@@ -300,7 +321,7 @@ void uart3_status_isr(void) | |||
if (head >= RX_BUFFER_SIZE) head = 0; | |||
if (head != rx_buffer_tail) { | |||
rx_buffer[head] = n; | |||
rx_buffer_head = head; | |||
rx_buffer_head = head; | |||
} | |||
if (rts_pin) { | |||
int avail; |
@@ -10,10 +10,10 @@ | |||
* permit persons to whom the Software is furnished to do so, subject to | |||
* the following conditions: | |||
* | |||
* 1. The above copyright notice and this permission notice shall be | |||
* 1. The above copyright notice and this permission notice shall be | |||
* included in all copies or substantial portions of the Software. | |||
* | |||
* 2. If the Software is incorporated into a build system that allows | |||
* 2. If the Software is incorporated into a build system that allows | |||
* selection among a list of target devices, then similar target | |||
* devices manufactured by PJRC.COM must be included in the list of | |||
* target devices and selectable in the same manner. | |||
@@ -81,6 +81,8 @@ static volatile uint8_t rx_buffer_head = 0; | |||
static volatile uint8_t rx_buffer_tail = 0; | |||
#endif | |||
static uint8_t tx_pin_num = 34; | |||
// UART0 and UART1 are clocked by F_CPU, UART2 is clocked by F_BUS | |||
// UART0 has 8 byte fifo, UART1 and UART2 have 1 byte buffer | |||
@@ -155,6 +157,24 @@ void serial5_set_transmit_pin(uint8_t pin) | |||
void serial5_set_tx(uint8_t pin, uint8_t opendrain) | |||
{ | |||
uint32_t cfg; | |||
if (opendrain) pin |= 128; | |||
if (pin == tx_pin_num) return; | |||
if ((SIM_SCGC4 & SIM_SCGC4_UART2)) { | |||
switch (tx_pin_num & 127) { | |||
case 34: CORE_PIN8_CONFIG = 0; break; // PTD3 | |||
} | |||
if (opendrain) { | |||
cfg = PORT_PCR_DSE | PORT_PCR_ODE; | |||
} else { | |||
cfg = PORT_PCR_DSE | PORT_PCR_SRE; | |||
} | |||
switch (pin & 127) { | |||
case 34: CORE_PIN8_CONFIG = cfg | PORT_PCR_MUX(3); break; | |||
} | |||
} | |||
tx_pin_num = pin; | |||
} | |||
void serial5_set_rx(uint8_t pin) | |||
@@ -285,7 +305,7 @@ void serial5_clear(void) | |||
if (rts_pin) rts_assert(); | |||
} | |||
// status interrupt combines | |||
// status interrupt combines | |||
// Transmit data below watermark UART_S1_TDRE | |||
// Transmit complete UART_S1_TC | |||
// Idle line UART_S1_IDLE | |||
@@ -308,7 +328,7 @@ void uart4_status_isr(void) | |||
if (head >= RX_BUFFER_SIZE) head = 0; | |||
if (head != rx_buffer_tail) { | |||
rx_buffer[head] = n; | |||
rx_buffer_head = head; | |||
rx_buffer_head = head; | |||
} | |||
if (rts_pin) { | |||
int avail; |