T4 serial x split objectsmain
| /* Teensyduino Core Library | /* Teensyduino Core Library | ||||
| * http://www.pjrc.com/teensy/ | * http://www.pjrc.com/teensy/ | ||||
| * Copyright (c) 2017 PJRC.COM, LLC. | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | * | ||||
| * Permission is hereby granted, free of charge, to any person obtaining | * Permission is hereby granted, free of charge, to any person obtaining | ||||
| * a copy of this software and associated documentation files (the | * a copy of this software and associated documentation files (the | ||||
| #define UART_CLOCK 24000000 | #define UART_CLOCK 24000000 | ||||
| #ifndef SERIAL1_TX_BUFFER_SIZE | |||||
| #define SERIAL1_TX_BUFFER_SIZE 64 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL1_RX_BUFFER_SIZE | |||||
| #define SERIAL1_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL2_TX_BUFFER_SIZE | |||||
| #define SERIAL2_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL2_RX_BUFFER_SIZE | |||||
| #define SERIAL2_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL3_TX_BUFFER_SIZE | |||||
| #define SERIAL3_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL3_RX_BUFFER_SIZE | |||||
| #define SERIAL3_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL4_TX_BUFFER_SIZE | |||||
| #define SERIAL4_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL4_RX_BUFFER_SIZE | |||||
| #define SERIAL4_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL5_TX_BUFFER_SIZE | |||||
| #define SERIAL5_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL5_RX_BUFFER_SIZE | |||||
| #define SERIAL5_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL6_TX_BUFFER_SIZE | |||||
| #define SERIAL6_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL6_RX_BUFFER_SIZE | |||||
| #define SERIAL6_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL7_TX_BUFFER_SIZE | |||||
| #define SERIAL7_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL7_RX_BUFFER_SIZE | |||||
| #define SERIAL7_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL8_TX_BUFFER_SIZE | |||||
| #define SERIAL8_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL8_RX_BUFFER_SIZE | |||||
| #define SERIAL8_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| SerialEventCheckingFunctionPointer HardwareSerial::serial_event_handler_checks[8] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; | |||||
| uint8_t HardwareSerial::serial_event_handlers_active = 0; | |||||
| #define CTRL_ENABLE (LPUART_CTRL_TE | LPUART_CTRL_RE | LPUART_CTRL_RIE | LPUART_CTRL_ILIE) | #define CTRL_ENABLE (LPUART_CTRL_TE | LPUART_CTRL_RE | LPUART_CTRL_RIE | LPUART_CTRL_ILIE) | ||||
| #define CTRL_TX_ACTIVE (CTRL_ENABLE | LPUART_CTRL_TIE) | #define CTRL_TX_ACTIVE (CTRL_ENABLE | LPUART_CTRL_TIE) | ||||
| if (format & 0x10) c |= LPUART_STAT_RXINV; // rx invert | if (format & 0x10) c |= LPUART_STAT_RXINV; // rx invert | ||||
| port->STAT = c; | port->STAT = c; | ||||
| // bit 8 can turn on 2 stop bit mote | // bit 8 can turn on 2 stop bit mote | ||||
| if ( format & 0x100) port->BAUD |= LPUART_BAUD_SBNS; | if ( format & 0x100) port->BAUD |= LPUART_BAUD_SBNS; | ||||
| //Serial.printf(" stat:%x ctrl:%x fifo:%x water:%x\n", port->STAT, port->CTRL, port->FIFO, port->WATER ); | //Serial.printf(" stat:%x ctrl:%x fifo:%x water:%x\n", port->STAT, port->CTRL, port->FIFO, port->WATER ); | ||||
| enableSerialEvents(); // Enable the processing of serialEvent for this object | |||||
| }; | }; | ||||
| inline void HardwareSerial::rts_assert() | inline void HardwareSerial::rts_assert() | ||||
| void HardwareSerial::end(void) | void HardwareSerial::end(void) | ||||
| { | { | ||||
| if (!(hardware->ccm_register & hardware->ccm_value)) return; | |||||
| while (transmitting_) yield(); // wait for buffered data to send | |||||
| port->CTRL = 0; // disable the TX and RX ... | |||||
| // Not sure if this is best, but I think most IO pins default to Mode 5? which appears to be digital IO? | |||||
| *(portConfigRegister(hardware->rx_pin)) = 5; | |||||
| *(portConfigRegister(hardware->tx_pin)) = 5; | |||||
| // Might need to clear out other areas as well? | |||||
| rx_buffer_head_ = 0; | |||||
| rx_buffer_tail_ = 0; | |||||
| if (rts_pin_baseReg_) rts_deassert(); | |||||
| // | |||||
| disableSerialEvents(); // disable the processing of serialEvent for this object | |||||
| } | } | ||||
| void HardwareSerial::transmitterEnable(uint8_t pin) | void HardwareSerial::transmitterEnable(uint8_t pin) | ||||
| //digitalWrite(4, LOW); | //digitalWrite(4, LOW); | ||||
| } | } | ||||
| void IRQHandler_Serial1() | |||||
| { | |||||
| Serial1.IRQHandler(); | |||||
| } | |||||
| void IRQHandler_Serial2() | |||||
| { | |||||
| Serial2.IRQHandler(); | |||||
| } | |||||
| void IRQHandler_Serial3() | |||||
| { | |||||
| Serial3.IRQHandler(); | |||||
| } | |||||
| void IRQHandler_Serial4() | |||||
| { | |||||
| Serial4.IRQHandler(); | |||||
| } | |||||
| void IRQHandler_Serial5() | |||||
| { | |||||
| Serial5.IRQHandler(); | |||||
| } | |||||
| void IRQHandler_Serial6() | |||||
| void HardwareSerial::processSerialEvents() | |||||
| { | { | ||||
| Serial6.IRQHandler(); | |||||
| if (!serial_event_handlers_active) return; // bail quick if no one processing SerialEvents. | |||||
| uint8_t handlers_still_to_process = serial_event_handlers_active; | |||||
| for (uint8_t i = 0; i < 8; i++) { | |||||
| if (serial_event_handler_checks[i]) { | |||||
| (*serial_event_handler_checks[i])(); | |||||
| if (--handlers_still_to_process == 0) return; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| void IRQHandler_Serial7() | |||||
| void HardwareSerial::enableSerialEvents() | |||||
| { | { | ||||
| Serial7.IRQHandler(); | |||||
| if (!serial_event_handler_checks[hardware->serial_index]) { | |||||
| serial_event_handler_checks[hardware->serial_index] = hardware->serial_event_handler_check; // clear it out | |||||
| serial_event_handlers_active++; | |||||
| } | |||||
| } | } | ||||
| void IRQHandler_Serial8() | |||||
| void HardwareSerial::disableSerialEvents() | |||||
| { | { | ||||
| Serial8.IRQHandler(); | |||||
| if (serial_event_handler_checks[hardware->serial_index]) { | |||||
| serial_event_handler_checks[hardware->serial_index] = nullptr; // clear it out | |||||
| serial_event_handlers_active--; | |||||
| } | |||||
| } | } | ||||
| // Serial1 | |||||
| static BUFTYPE tx_buffer1[SERIAL1_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer1[SERIAL1_RX_BUFFER_SIZE]; | |||||
| const HardwareSerial::hardware_t UART6_Hardware = { | |||||
| IRQ_LPUART6, &IRQHandler_Serial1, | |||||
| CCM_CCGR3, CCM_CCGR3_LPUART6(CCM_CCGR_ON), | |||||
| 0, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_03, // pin 0 | |||||
| 1, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_02, // pin 1 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART6_RX_SELECT_INPUT, | |||||
| 2, // page 473 | |||||
| 2, // page 472 | |||||
| 0, // No CTS | |||||
| 1, // page 861 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial1(&IMXRT_LPUART6, &UART6_Hardware, tx_buffer1, SERIAL1_TX_BUFFER_SIZE, | |||||
| rx_buffer1, SERIAL1_RX_BUFFER_SIZE); | |||||
| // Serial2 | |||||
| static BUFTYPE tx_buffer2[SERIAL2_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer2[SERIAL2_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART4_Hardware = { | |||||
| IRQ_LPUART4, &IRQHandler_Serial2, | |||||
| CCM_CCGR1, CCM_CCGR1_LPUART4(CCM_CCGR_ON), | |||||
| 6, //IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_01, // pin 6 | |||||
| 7, // IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_00, // pin 7 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART4_RX_SELECT_INPUT, | |||||
| 2, // page 521 | |||||
| 2, // page 520 | |||||
| 0, // No CTS | |||||
| 2, // page 858 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial2(&IMXRT_LPUART4, &UART4_Hardware, tx_buffer2, SERIAL2_TX_BUFFER_SIZE, | |||||
| rx_buffer2, SERIAL2_RX_BUFFER_SIZE); | |||||
| // Serial3 | |||||
| static BUFTYPE tx_buffer3[SERIAL3_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer3[SERIAL3_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART2_Hardware = { | |||||
| IRQ_LPUART2, &IRQHandler_Serial3, | |||||
| CCM_CCGR0, CCM_CCGR0_LPUART2(CCM_CCGR_ON), | |||||
| 15, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_03, // pin 15 | |||||
| 14, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_02, // pin 14 | |||||
| 18, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_01, // 18 | |||||
| IOMUXC_LPUART2_RX_SELECT_INPUT, | |||||
| 2, // page 491 | |||||
| 2, // page 490 | |||||
| 2, // page 473 | |||||
| 1, // Page 855 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial3(&IMXRT_LPUART2, &UART2_Hardware,tx_buffer3, SERIAL3_TX_BUFFER_SIZE, | |||||
| rx_buffer3, SERIAL3_RX_BUFFER_SIZE); | |||||
| // Serial4 | |||||
| static BUFTYPE tx_buffer4[SERIAL4_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer4[SERIAL4_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART3_Hardware = { | |||||
| IRQ_LPUART3, &IRQHandler_Serial4, | |||||
| CCM_CCGR0, CCM_CCGR0_LPUART3(CCM_CCGR_ON), | |||||
| 16, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_07, // pin 16 | |||||
| 17, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_06, // pin 17 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART3_RX_SELECT_INPUT, | |||||
| 2, // page 495 | |||||
| 2, // page 494 | |||||
| 0, // No CTS | |||||
| 0, // Page 857 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial4(&IMXRT_LPUART3, &UART3_Hardware, tx_buffer4, SERIAL4_TX_BUFFER_SIZE, | |||||
| rx_buffer4, SERIAL4_RX_BUFFER_SIZE); | |||||
| // Serial5 | |||||
| static BUFTYPE tx_buffer5[SERIAL5_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer5[SERIAL5_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART8_Hardware = { | |||||
| IRQ_LPUART8, &IRQHandler_Serial5, | |||||
| CCM_CCGR6, CCM_CCGR6_LPUART8(CCM_CCGR_ON), | |||||
| 21, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_11, // pin 21 | |||||
| 20, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_10, // pin 20 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART8_RX_SELECT_INPUT, | |||||
| 2, // page 499 | |||||
| 2, // page 498 | |||||
| 0, // No CTS | |||||
| 1, // Page 864-5 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial5(&IMXRT_LPUART8, &UART8_Hardware, tx_buffer5, SERIAL5_TX_BUFFER_SIZE, | |||||
| rx_buffer5, SERIAL5_RX_BUFFER_SIZE); | |||||
| // Serial6 | |||||
| static BUFTYPE tx_buffer6[SERIAL6_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer6[SERIAL6_RX_BUFFER_SIZE]; | |||||
| uint32_t IOMUXC_LPUART1_RX_SELECT_INPUT; // bugbug - does not exist so hack | |||||
| static HardwareSerial::hardware_t UART1_Hardware = { | |||||
| IRQ_LPUART1, &IRQHandler_Serial6, | |||||
| CCM_CCGR5, CCM_CCGR5_LPUART1(CCM_CCGR_ON), | |||||
| 25, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_13, // pin 25 | |||||
| 24, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_12, // pin 24 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART1_RX_SELECT_INPUT, | |||||
| 2, // page 486 | |||||
| 2, // page 485 | |||||
| 0, // No CTS | |||||
| 0, // ??? Does not have one ??? | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial6(&IMXRT_LPUART1, &UART1_Hardware, tx_buffer6, SERIAL6_TX_BUFFER_SIZE, | |||||
| rx_buffer6, SERIAL6_RX_BUFFER_SIZE); | |||||
| // Serial7 | |||||
| static BUFTYPE tx_buffer7[SERIAL7_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer7[SERIAL7_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART7_Hardware = { | |||||
| IRQ_LPUART7, &IRQHandler_Serial7, | |||||
| CCM_CCGR5, CCM_CCGR5_LPUART7(CCM_CCGR_ON), | |||||
| 28, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_32, // pin 28 | |||||
| 29, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_31, // pin 29 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART7_RX_SELECT_INPUT, | |||||
| 2, // page 458 | |||||
| 2, // page 457 | |||||
| 0, // No CTS | |||||
| 1, // Page 863 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial7(&IMXRT_LPUART7, &UART7_Hardware, tx_buffer7, SERIAL7_TX_BUFFER_SIZE, | |||||
| rx_buffer7, SERIAL7_RX_BUFFER_SIZE); | |||||
| // Serial8 | |||||
| static BUFTYPE tx_buffer8[SERIAL8_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer8[SERIAL8_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART5_Hardware = { | |||||
| IRQ_LPUART5, &IRQHandler_Serial8, | |||||
| CCM_CCGR3, CCM_CCGR3_LPUART5(CCM_CCGR_ON), | |||||
| 30, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24, // pin 30 | |||||
| 31, // IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23, // pin 31 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART5_RX_SELECT_INPUT, | |||||
| 2, // page 450 | |||||
| 2, // page 449 | |||||
| 0, // No CTS | |||||
| 0, | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial8(&IMXRT_LPUART5, &UART5_Hardware, tx_buffer8, SERIAL8_TX_BUFFER_SIZE, | |||||
| rx_buffer8, SERIAL8_RX_BUFFER_SIZE); | |||||
| extern void IRQHandler_Serial8(); | extern void IRQHandler_Serial8(); | ||||
| } | } | ||||
| typedef void(*SerialEventCheckingFunctionPointer)(); | |||||
| class HardwareSerial : public Stream | class HardwareSerial : public Stream | ||||
| { | { | ||||
| public: | public: | ||||
| typedef struct { | typedef struct { | ||||
| uint8_t serial_index; // which object are we? 0 based | |||||
| IRQ_NUMBER_t irq; | IRQ_NUMBER_t irq; | ||||
| void (*irq_handler)(void); | void (*irq_handler)(void); | ||||
| void (*serial_event_handler_check)(void); | |||||
| volatile uint32_t &ccm_register; | volatile uint32_t &ccm_register; | ||||
| const uint32_t ccm_value; | const uint32_t ccm_value; | ||||
| const uint8_t rx_pin; | const uint8_t rx_pin; | ||||
| void addStorageForRead(void *buffer, size_t length); | void addStorageForRead(void *buffer, size_t length); | ||||
| void addStorageForWrite(void *buffer, size_t length); | void addStorageForWrite(void *buffer, size_t length); | ||||
| size_t write9bit(uint32_t c); | size_t write9bit(uint32_t c); | ||||
| // Event Handler functions and data | |||||
| void enableSerialEvents(); | |||||
| void disableSerialEvents(); | |||||
| static void processSerialEvents(); | |||||
| using Print::write; | using Print::write; | ||||
| // Only overwrite some of the virtualWrite functions if we are going to optimize them over Print version | // Only overwrite some of the virtualWrite functions if we are going to optimize them over Print version | ||||
| friend void IRQHandler_Serial7(); | friend void IRQHandler_Serial7(); | ||||
| friend void IRQHandler_Serial8(); | friend void IRQHandler_Serial8(); | ||||
| static SerialEventCheckingFunctionPointer serial_event_handler_checks[8]; | |||||
| static uint8_t serial_event_handlers_active; | |||||
| }; | }; | ||||
| extern HardwareSerial Serial1; | extern HardwareSerial Serial1; | ||||
| extern HardwareSerial Serial6; | extern HardwareSerial Serial6; | ||||
| extern HardwareSerial Serial7; | extern HardwareSerial Serial7; | ||||
| extern HardwareSerial Serial8; | extern HardwareSerial Serial8; | ||||
| //extern void serialEvent1(void); | |||||
| extern void serialEvent1(void); | |||||
| extern void serialEvent2(void); | |||||
| extern void serialEvent3(void); | |||||
| extern void serialEvent4(void); | |||||
| extern void serialEvent5(void); | |||||
| extern void serialEvent6(void); | |||||
| extern void serialEvent7(void); | |||||
| extern void serialEvent8(void); | |||||
| #endif // __cplusplus | #endif // __cplusplus | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL1_TX_BUFFER_SIZE | |||||
| #define SERIAL1_TX_BUFFER_SIZE 64 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL1_RX_BUFFER_SIZE | |||||
| #define SERIAL1_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial1() | |||||
| { | |||||
| Serial1.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial1() | |||||
| { | |||||
| if (Serial1.available()) serialEvent1(); | |||||
| } | |||||
| // Serial1 | |||||
| static BUFTYPE tx_buffer1[SERIAL1_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer1[SERIAL1_RX_BUFFER_SIZE]; | |||||
| const HardwareSerial::hardware_t UART6_Hardware = { | |||||
| 0, IRQ_LPUART6, &IRQHandler_Serial1, &serial_event_check_serial1, | |||||
| CCM_CCGR3, CCM_CCGR3_LPUART6(CCM_CCGR_ON), | |||||
| 0, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_03, // pin 0 | |||||
| 1, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_02, // pin 1 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART6_RX_SELECT_INPUT, | |||||
| 2, // page 473 | |||||
| 2, // page 472 | |||||
| 0, // No CTS | |||||
| 1, // page 861 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial1(&IMXRT_LPUART6, &UART6_Hardware, tx_buffer1, SERIAL1_TX_BUFFER_SIZE, | |||||
| rx_buffer1, SERIAL1_RX_BUFFER_SIZE); | |||||
| void serialEvent1() __attribute__((weak)); | |||||
| void serialEvent1() {Serial1.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL2_TX_BUFFER_SIZE | |||||
| #define SERIAL2_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL2_RX_BUFFER_SIZE | |||||
| #define SERIAL2_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial2() | |||||
| { | |||||
| Serial2.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial2() | |||||
| { | |||||
| if (Serial2.available()) serialEvent2(); | |||||
| } | |||||
| // Serial2 | |||||
| static BUFTYPE tx_buffer2[SERIAL2_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer2[SERIAL2_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART4_Hardware = { | |||||
| 1, IRQ_LPUART4, &IRQHandler_Serial2, &serial_event_check_serial2, | |||||
| CCM_CCGR1, CCM_CCGR1_LPUART4(CCM_CCGR_ON), | |||||
| 6, //IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_01, // pin 6 | |||||
| 7, // IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_00, // pin 7 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART4_RX_SELECT_INPUT, | |||||
| 2, // page 521 | |||||
| 2, // page 520 | |||||
| 0, // No CTS | |||||
| 2, // page 858 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial2(&IMXRT_LPUART4, &UART4_Hardware, tx_buffer2, SERIAL2_TX_BUFFER_SIZE, | |||||
| rx_buffer2, SERIAL2_RX_BUFFER_SIZE); | |||||
| void serialEvent2() __attribute__((weak)); | |||||
| void serialEvent2() {Serial2.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL3_TX_BUFFER_SIZE | |||||
| #define SERIAL3_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL3_RX_BUFFER_SIZE | |||||
| #define SERIAL3_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial3() | |||||
| { | |||||
| Serial3.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial3() | |||||
| { | |||||
| if (Serial3.available()) serialEvent3(); | |||||
| } | |||||
| // Serial3 | |||||
| static BUFTYPE tx_buffer3[SERIAL3_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer3[SERIAL3_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART2_Hardware = { | |||||
| 2, IRQ_LPUART2, &IRQHandler_Serial3, &serial_event_check_serial3, | |||||
| CCM_CCGR0, CCM_CCGR0_LPUART2(CCM_CCGR_ON), | |||||
| 15, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_03, // pin 15 | |||||
| 14, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_02, // pin 14 | |||||
| 18, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_01, // 18 | |||||
| IOMUXC_LPUART2_RX_SELECT_INPUT, | |||||
| 2, // page 491 | |||||
| 2, // page 490 | |||||
| 2, // page 473 | |||||
| 1, // Page 855 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial3(&IMXRT_LPUART2, &UART2_Hardware,tx_buffer3, SERIAL3_TX_BUFFER_SIZE, | |||||
| rx_buffer3, SERIAL3_RX_BUFFER_SIZE); | |||||
| void serialEvent3() __attribute__((weak)); | |||||
| void serialEvent3() {Serial3.disableSerialEvents(); } // No use calling this so disable if called... | |||||
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL4_TX_BUFFER_SIZE | |||||
| #define SERIAL4_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL4_RX_BUFFER_SIZE | |||||
| #define SERIAL4_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial4() | |||||
| { | |||||
| Serial4.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial4() | |||||
| { | |||||
| if (Serial4.available()) serialEvent4(); | |||||
| } | |||||
| // Serial4 | |||||
| static BUFTYPE tx_buffer4[SERIAL4_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer4[SERIAL4_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART3_Hardware = { | |||||
| 3, IRQ_LPUART3, &IRQHandler_Serial4, &serial_event_check_serial4, | |||||
| CCM_CCGR0, CCM_CCGR0_LPUART3(CCM_CCGR_ON), | |||||
| 16, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_07, // pin 16 | |||||
| 17, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_06, // pin 17 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART3_RX_SELECT_INPUT, | |||||
| 2, // page 495 | |||||
| 2, // page 494 | |||||
| 0, // No CTS | |||||
| 0, // Page 857 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial4(&IMXRT_LPUART3, &UART3_Hardware, tx_buffer4, SERIAL4_TX_BUFFER_SIZE, | |||||
| rx_buffer4, SERIAL4_RX_BUFFER_SIZE); | |||||
| void serialEvent4() __attribute__((weak)); | |||||
| void serialEvent4() {Serial4.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL5_TX_BUFFER_SIZE | |||||
| #define SERIAL5_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL5_RX_BUFFER_SIZE | |||||
| #define SERIAL5_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial5() | |||||
| { | |||||
| Serial5.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial5() | |||||
| { | |||||
| if (Serial5.available()) serialEvent5(); | |||||
| } | |||||
| // Serial5 | |||||
| static BUFTYPE tx_buffer5[SERIAL5_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer5[SERIAL5_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART8_Hardware = { | |||||
| 4, IRQ_LPUART8, &IRQHandler_Serial5, &serial_event_check_serial5, | |||||
| CCM_CCGR6, CCM_CCGR6_LPUART8(CCM_CCGR_ON), | |||||
| 21, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_11, // pin 21 | |||||
| 20, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_10, // pin 20 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART8_RX_SELECT_INPUT, | |||||
| 2, // page 499 | |||||
| 2, // page 498 | |||||
| 0, // No CTS | |||||
| 1, // Page 864-5 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial5(&IMXRT_LPUART8, &UART8_Hardware, tx_buffer5, SERIAL5_TX_BUFFER_SIZE, | |||||
| rx_buffer5, SERIAL5_RX_BUFFER_SIZE); | |||||
| void serialEvent5() __attribute__((weak)); | |||||
| void serialEvent5() {Serial5.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL6_TX_BUFFER_SIZE | |||||
| #define SERIAL6_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL6_RX_BUFFER_SIZE | |||||
| #define SERIAL6_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial6() | |||||
| { | |||||
| Serial6.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial6() | |||||
| { | |||||
| if (Serial6.available()) serialEvent6(); | |||||
| } | |||||
| // Serial6 | |||||
| static BUFTYPE tx_buffer6[SERIAL6_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer6[SERIAL6_RX_BUFFER_SIZE]; | |||||
| uint32_t IOMUXC_LPUART1_RX_SELECT_INPUT; // bugbug - does not exist so hack | |||||
| static HardwareSerial::hardware_t UART1_Hardware = { | |||||
| 5, IRQ_LPUART1, &IRQHandler_Serial6, &serial_event_check_serial6, | |||||
| CCM_CCGR5, CCM_CCGR5_LPUART1(CCM_CCGR_ON), | |||||
| 25, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_13, // pin 25 | |||||
| 24, //IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_12, // pin 24 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART1_RX_SELECT_INPUT, | |||||
| 2, // page 486 | |||||
| 2, // page 485 | |||||
| 0, // No CTS | |||||
| 0, // ??? Does not have one ??? | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial6(&IMXRT_LPUART1, &UART1_Hardware, tx_buffer6, SERIAL6_TX_BUFFER_SIZE, | |||||
| rx_buffer6, SERIAL6_RX_BUFFER_SIZE); | |||||
| void serialEvent6() __attribute__((weak)); | |||||
| void serialEvent6() {Serial6.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL7_TX_BUFFER_SIZE | |||||
| #define SERIAL7_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL7_RX_BUFFER_SIZE | |||||
| #define SERIAL7_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial7() | |||||
| { | |||||
| Serial7.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial7() | |||||
| { | |||||
| if (Serial7.available()) serialEvent7(); | |||||
| } | |||||
| // Serial7 | |||||
| static BUFTYPE tx_buffer7[SERIAL7_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer7[SERIAL7_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART7_Hardware = { | |||||
| 6, IRQ_LPUART7, &IRQHandler_Serial7, &serial_event_check_serial7, | |||||
| CCM_CCGR5, CCM_CCGR5_LPUART7(CCM_CCGR_ON), | |||||
| 28, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_32, // pin 28 | |||||
| 29, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_31, // pin 29 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART7_RX_SELECT_INPUT, | |||||
| 2, // page 458 | |||||
| 2, // page 457 | |||||
| 0, // No CTS | |||||
| 1, // Page 863 | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial7(&IMXRT_LPUART7, &UART7_Hardware, tx_buffer7, SERIAL7_TX_BUFFER_SIZE, | |||||
| rx_buffer7, SERIAL7_RX_BUFFER_SIZE); | |||||
| void serialEvent7() __attribute__((weak)); | |||||
| void serialEvent7() {Serial7.disableSerialEvents(); } // No use calling this so disable if called... | 
| /* Teensyduino Core Library | |||||
| * http://www.pjrc.com/teensy/ | |||||
| * Copyright (c) 2019 PJRC.COM, LLC. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining | |||||
| * a copy of this software and associated documentation files (the | |||||
| * "Software"), to deal in the Software without restriction, including | |||||
| * without limitation the rights to use, copy, modify, merge, publish, | |||||
| * distribute, sublicense, and/or sell copies of the Software, and to | |||||
| * 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 | |||||
| * included in all copies or substantial portions of the Software. | |||||
| * | |||||
| * 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. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||||
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||||
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |||||
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||||
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| */ | |||||
| #include <Arduino.h> | |||||
| #include "HardwareSerial.h" | |||||
| #ifndef SERIAL8_TX_BUFFER_SIZE | |||||
| #define SERIAL8_TX_BUFFER_SIZE 40 // number of outgoing bytes to buffer | |||||
| #endif | |||||
| #ifndef SERIAL8_RX_BUFFER_SIZE | |||||
| #define SERIAL8_RX_BUFFER_SIZE 64 // number of incoming bytes to buffer | |||||
| #endif | |||||
| #define IRQ_PRIORITY 64 // 0 = highest priority, 255 = lowest | |||||
| void IRQHandler_Serial8() | |||||
| { | |||||
| Serial8.IRQHandler(); | |||||
| } | |||||
| void serial_event_check_serial8() | |||||
| { | |||||
| if (Serial8.available()) serialEvent8(); | |||||
| } | |||||
| // Serial8 | |||||
| static BUFTYPE tx_buffer8[SERIAL8_TX_BUFFER_SIZE]; | |||||
| static BUFTYPE rx_buffer8[SERIAL8_RX_BUFFER_SIZE]; | |||||
| static HardwareSerial::hardware_t UART5_Hardware = { | |||||
| 7, IRQ_LPUART5, &IRQHandler_Serial8, &serial_event_check_serial8, | |||||
| CCM_CCGR3, CCM_CCGR3_LPUART5(CCM_CCGR_ON), | |||||
| 30, //IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24, // pin 30 | |||||
| 31, // IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23, // pin 31 | |||||
| 0xff, // No CTS pin | |||||
| IOMUXC_LPUART5_RX_SELECT_INPUT, | |||||
| 2, // page 450 | |||||
| 2, // page 449 | |||||
| 0, // No CTS | |||||
| 0, | |||||
| IRQ_PRIORITY, 38, 24, // IRQ, rts_low_watermark, rts_high_watermark | |||||
| }; | |||||
| HardwareSerial Serial8(&IMXRT_LPUART5, &UART5_Hardware, tx_buffer8, SERIAL8_TX_BUFFER_SIZE, | |||||
| rx_buffer8, SERIAL8_RX_BUFFER_SIZE); | |||||
| void serialEvent8() __attribute__((weak)); | |||||
| void serialEvent8() {Serial8.disableSerialEvents(); } // No use calling this so disable if called... | 
| if (running) return; // TODO: does this need to be atomic? | if (running) return; // TODO: does this need to be atomic? | ||||
| running = 1; | running = 1; | ||||
| #if 0 | |||||
| // TODO: all serialEvent to use EventResponder | |||||
| if (Serial.available()) serialEvent(); | |||||
| if (Serial1.available()) serialEvent1(); | |||||
| if (Serial2.available()) serialEvent2(); | |||||
| if (Serial3.available()) serialEvent3(); | |||||
| if (Serial4.available()) serialEvent4(); | |||||
| if (Serial5.available()) serialEvent5(); | |||||
| if (Serial6.available()) serialEvent6(); | |||||
| #endif | |||||
| // Current workaround until integrate with EventResponder. | |||||
| HardwareSerial::processSerialEvents(); | |||||
| running = 0; | running = 0; | ||||
| EventResponder::runFromYield(); | EventResponder::runFromYield(); | ||||
| }; | }; |