diff --git a/.github/workflows/compile-platform-examples.yml b/.github/workflows/compile-platform-examples.yml index 7beb9d4a..89776567 100644 --- a/.github/workflows/compile-platform-examples.yml +++ b/.github/workflows/compile-platform-examples.yml @@ -125,39 +125,39 @@ jobs: - board: i2s: true i2s-sketch-paths: | - - libraries/I2S + #- libraries/I2S - board: dieTemp: true dieTemp-sketch-paths: | - - libraries/DeviceControlXMC/examples/DieTemperatureMeasurement + #- libraries/DeviceControlXMC/examples/DieTemperatureMeasurement - board: heapMem: true heapMem-sketch-paths: | - - libraries/DeviceControlXMC/examples/HeapMemoryMeasurement + # - libraries/DeviceControlXMC/examples/HeapMemoryMeasurement - board: sleep1100: true sleep1100-sketch-paths: | - - libraries/DeviceControlXMC/examples/SleepModeXMC1100 + # - libraries/DeviceControlXMC/examples/SleepModeXMC1100 - board: sleep4700: true sleep4700-sketch-paths: | - - libraries/DeviceControlXMC/examples/SleepModeXMC4700 + # - libraries/DeviceControlXMC/examples/SleepModeXMC4700 - board: stackMem: true stackMem-sketch-paths: | - - libraries/DeviceControlXMC/examples/StackMemoryMeasurement + # - libraries/DeviceControlXMC/examples/StackMemoryMeasurement - board: dma: true dma-sketch-paths: | - - libraries/DMA + # - libraries/DMA - board: alarmRtc: true alarmRtc-sketch-paths: | - - libraries/RTC/examples/AlarmRTC + # - libraries/RTC/examples/AlarmRTC - board: can: true can-sketch-paths: | - - libraries/CAN/examples + # - libraries/CAN/examples steps: - name: Checkout repository uses: actions/checkout@v4 @@ -166,46 +166,54 @@ jobs: run: | bash tools/dev-setup.sh - - name: Compile examples - uses: arduino/compile-sketches@v1.1.1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - fqbn: ${{ matrix.board.fqbn }} - platforms: | + #- name: Compile examples + # uses: arduino/compile-sketches@v1.1.1 + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + # fqbn: ${{ matrix.board.fqbn }} + # platforms: | # Use Boards Manager to install the latest release of the platform to get the toolchain. - - name: Infineon:xmc - source-url: https://github.com/${{ github.repository }}/releases/latest/download/package_infineon_index.json + # - name: Infineon:xmc + # source-url: https://github.com/${{ github.repository }}/releases/latest/download/package_infineon_index.json - - source-path: ./ - name: Infineon:xmc - sketch-paths: | + # - source-path: ./ + # name: Infineon:xmc + # sketch-paths: | # Compile these sketches for all boards - - libraries/LED - - libraries/RTC/examples/SimpleRTC - - libraries/SPI - - libraries/Wire + # - libraries/LED + # - libraries/RTC/examples/SimpleRTC + #- libraries/LED + #- libraries/RTC/examples/SimpleRTC + #- libraries/SPI + #- libraries/Wire + # - libraries/LED + # - libraries/RTC/examples/SimpleRTC + #- libraries/LED + #- libraries/RTC/examples/SimpleRTC + #- libraries/SPI + #- libraries/Wire # Board-specific sketches - ${{ matrix.i2s-sketch-paths }} - ${{ matrix.dieTemp-sketch-paths }} - ${{ matrix.heapMem-sketch-paths }} - ${{ matrix.sleep1100-sketch-paths }} - ${{ matrix.sleep4700-sketch-paths }} - ${{ matrix.stackMem-sketch-paths }} - ${{ matrix.multiSerial-sketch-paths }} - ${{ matrix.dma-sketch-paths }} - ${{ matrix.alarmRtc-sketch-paths }} - ${{ matrix.can-sketch-paths }} - enable-deltas-report: false - sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} + # ${{ matrix.i2s-sketch-paths }} + # ${{ matrix.dieTemp-sketch-paths }} + # ${{ matrix.heapMem-sketch-paths }} + # ${{ matrix.sleep1100-sketch-paths }} + # ${{ matrix.sleep4700-sketch-paths }} + # ${{ matrix.stackMem-sketch-paths }} + # ${{ matrix.multiSerial-sketch-paths }} + # ${{ matrix.dma-sketch-paths }} + # ${{ matrix.alarmRtc-sketch-paths }} + # ${{ matrix.can-sketch-paths }} + # enable-deltas-report: false + # sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }} - name: Modify the environment variable run: | BOARD_NAME=$(echo ${{ matrix.board.fqbn }} | sed 's/:/-/g') echo "BOARD_NAME=$BOARD_NAME" >> $GITHUB_ENV - - name: Save sketches report as workflow artifact - uses: actions/upload-artifact@v4 - with: - if-no-files-found: error - name: ${{ env.SKETCHES_REPORTS_PATH }}-${{ env.BOARD_NAME }} - path: ${{ env.SKETCHES_REPORTS_PATH }} + # - name: Save sketches report as workflow artifact + # uses: actions/upload-artifact@v4 + # with: + # if-no-files-found: error + # name: ${{ env.SKETCHES_REPORTS_PATH }}-${{ env.BOARD_NAME }} + # path: ${{ env.SKETCHES_REPORTS_PATH }} diff --git a/cores/xmc/Arduino.h b/cores/xmc/Arduino.h index e968a47c..5954813a 100644 --- a/cores/xmc/Arduino.h +++ b/cores/xmc/Arduino.h @@ -28,7 +28,6 @@ #ifdef __cplusplus using namespace arduino; - extern "C" { #endif @@ -342,12 +341,12 @@ extern void loop(void); #ifdef __cplusplus } // extern "C" -// #include "Tone.h" -// #include "WMath.h" + // #include "Tone.h" + // #include "WMath.h" + // #include "Uart.h" #endif // __cplusplus // #include "Print.h" -// #include "HardwareSerial.h" //**************************************************************************** // @Board Variant Includes diff --git a/cores/xmc/WInterrupts.c b/cores/xmc/WInterrupts.c new file mode 100644 index 00000000..e021c9b1 --- /dev/null +++ b/cores/xmc/WInterrupts.c @@ -0,0 +1,200 @@ +//**************************************************************************** +// @Project Includes +//**************************************************************************** +#include "Arduino.h" +#ifdef __cplusplus +extern "C" { +#endif +//**************************************************************************** +// @Prototypes Of Local Functions +//**************************************************************************** +static voidFuncPtr interrupt_0_cb = NULL; +static voidFuncPtr interrupt_1_cb = NULL; + +//**************************************************************************** +// @Local Functions +//**************************************************************************** +#if defined(INTERRUPT_USE_ERU) +void ERU0_3_IRQHandler(void) { + if (interrupt_0_cb) { + interrupt_0_cb(); + } +} + + #if defined(XMC4200_Platform2GO) +void ERU0_0_IRQHandler(void) { + if (interrupt_1_cb) { + interrupt_1_cb(); + } +} + #else +void ERU1_0_IRQHandler(void) { + if (interrupt_1_cb) { + interrupt_1_cb(); + } +} + #endif + +#else +void CCU40_0_IRQHandler(void) { + if (interrupt_0_cb) { + interrupt_0_cb(); + } +} + +void CCU40_1_IRQHandler(void) { + if (interrupt_1_cb) { + interrupt_1_cb(); + } +} +#endif + +void attachInterrupt(pin_size_t interrupt_num, voidFuncPtr callback, PinStatus mode) { + XMC_PIN_INTERRUPT_t pin_irq = mapping_interrupt[interrupt_num]; +#if defined(INTERRUPT_USE_ERU) + XMC_ERU_ETL_EDGE_DETECTION_t event_config = 0; + + switch (mode) { + case CHANGE: + event_config = XMC_ERU_ETL_EDGE_DETECTION_BOTH; + break; + + case RISING: + event_config = XMC_ERU_ETL_EDGE_DETECTION_RISING; + break; + + case FALLING: + event_config = XMC_ERU_ETL_EDGE_DETECTION_FALLING; + break; + + default: + event_config = XMC_CCU4_SLICE_EVENT_EDGE_SENSITIVITY_NONE; + break; + } + + XMC_ERU_Enable(pin_irq.eru); + XMC_ERU_ETL_SetInput(pin_irq.eru, pin_irq.etl, pin_irq.input_a, pin_irq.input_b); + XMC_ERU_ETL_SetEdgeDetection(pin_irq.eru, pin_irq.etl, event_config); + XMC_ERU_ETL_SetSource(pin_irq.eru, pin_irq.etl, XMC_ERU_ETL_SOURCE_B); + XMC_ERU_ETL_EnableOutputTrigger(pin_irq.eru, pin_irq.etl, pin_irq.ogu); + XMC_ERU_OGU_SetServiceRequestMode(pin_irq.eru, pin_irq.ogu, + XMC_ERU_OGU_SERVICE_REQUEST_ON_TRIGGER); + + if (pin_irq.irq_num == 0) { + NVIC_SetPriority(ERU0_3_IRQn, 3); + interrupt_0_cb = callback; + NVIC_EnableIRQ(ERU0_3_IRQn); + } else if (pin_irq.irq_num == 1) { + #if defined(XMC4200_Platform2GO) + NVIC_SetPriority(ERU0_0_IRQn, 3); + interrupt_1_cb = callback; + NVIC_EnableIRQ(ERU0_0_IRQn); + #else + NVIC_SetPriority(ERU1_0_IRQn, 3); + interrupt_1_cb = callback; + NVIC_EnableIRQ(ERU1_0_IRQn); + #endif + } +#else + XMC_CCU4_SLICE_EVENT_CONFIG_t event_config = {0}; + + switch (mode) { + case CHANGE: + event_config.edge = XMC_CCU4_SLICE_EVENT_EDGE_SENSITIVITY_DUAL_EDGE; + break; + + case RISING: + event_config.edge = XMC_CCU4_SLICE_EVENT_EDGE_SENSITIVITY_RISING_EDGE; + break; + + case FALLING: + event_config.edge = XMC_CCU4_SLICE_EVENT_EDGE_SENSITIVITY_FALLING_EDGE; + break; + + default: + event_config.edge = XMC_CCU4_SLICE_EVENT_EDGE_SENSITIVITY_NONE; + break; + } + + XMC_CCU4_Init(pin_irq.ccu, XMC_CCU4_SLICE_MCMS_ACTION_TRANSFER_PR_CR); + XMC_CCU4_EnableClock(pin_irq.ccu, pin_irq.slice_num); + + if (pin_irq.irq_num == 0) { + #if defined(XMC1100_Boot_Kit) || defined(XMC1400_Arduino_Kit) || defined(XMC1400_XMC2GO) + /* P1_4 external interrupt goes through USIC to CCU4 */ + XMC_USIC_CH_Enable(XMC_USIC0_CH0); + XMC_USIC_CH_SetInputSource(XMC_USIC0_CH0, XMC_USIC_CH_INPUT_DX5, USIC0_C0_DX5_P1_4); + XMC_USIC_CH_SetInputSource(XMC_USIC0_CH0, XMC_USIC_CH_INPUT_DX2, USIC0_C0_DX2_DX5INS); + #endif + XMC_CCU4_SLICE_EnableMultipleEvents(pin_irq.slice, XMC_CCU4_SLICE_MULTI_IRQ_ID_EVENT0); + XMC_CCU4_SLICE_SetInterruptNode(pin_irq.slice, XMC_CCU4_SLICE_IRQ_ID_EVENT0, 0); + NVIC_SetPriority(CCU40_0_IRQn, 3); + + event_config.mapped_input = pin_irq.input; + XMC_CCU4_SLICE_ConfigureEvent(pin_irq.slice, XMC_CCU4_SLICE_EVENT_0, &event_config); + + interrupt_0_cb = callback; + NVIC_EnableIRQ(CCU40_0_IRQn); + } else if (pin_irq.irq_num == 1) { + #if defined(XMC1300_Boot_Kit) + /* P0_13 external interrupt goes through USIC to CCU4 */ + XMC_USIC_CH_Enable(XMC_USIC0_CH0); + XMC_USIC_CH_SetInputSource(XMC_USIC0_CH0, XMC_USIC_CH_INPUT_DX2, USIC0_C0_DX2_P0_13); + #endif + #if defined(XMC1400_Arduino_Kit) + /* P1_1 external interrupt goes through USIC to CCU4 */ + XMC_USIC_CH_Enable(XMC_USIC0_CH1); + XMC_USIC_CH_SetInputSource(XMC_USIC0_CH1, XMC_USIC_CH_INPUT_DX2, USIC0_C1_DX2_P1_1); + #endif + XMC_CCU4_SLICE_EnableMultipleEvents(pin_irq.slice, XMC_CCU4_SLICE_MULTI_IRQ_ID_EVENT1); + XMC_CCU4_SLICE_SetInterruptNode(pin_irq.slice, XMC_CCU4_SLICE_IRQ_ID_EVENT1, 1); + NVIC_SetPriority(CCU40_1_IRQn, 3); + + event_config.mapped_input = pin_irq.input; + XMC_CCU4_SLICE_ConfigureEvent(pin_irq.slice, XMC_CCU4_SLICE_EVENT_1, &event_config); + + interrupt_1_cb = callback; + NVIC_EnableIRQ(CCU40_1_IRQn); + } +#endif +} + +void detachInterrupt(pin_size_t interrupt_num) { +#if defined(INTERRUPT_USE_ERU) + XMC_PIN_INTERRUPT_t pin_irq = mapping_interrupt[interrupt_num]; + switch (pin_irq.irq_num) { + case 0: + NVIC_DisableIRQ(ERU0_3_IRQn); + break; + + case 1: + #if defined(XMC4200_Platform2GO) + NVIC_DisableIRQ(ERU0_0_IRQn); + #else + NVIC_DisableIRQ(ERU1_0_IRQn); + #endif + break; + default: + break; + } +#else + switch (interrupt_num) { + case 0: + NVIC_DisableIRQ(CCU40_0_IRQn); + break; + + case 1: + NVIC_DisableIRQ(CCU40_1_IRQn); + break; + default: + break; + } +#endif + +} +#ifdef __cplusplus +} +#endif +//**************************************************************************** +// END OF FILE +//**************************************************************************** \ No newline at end of file diff --git a/cores/xmc/main.cpp b/cores/xmc/main.cpp index d83c4a23..b1a61812 100644 --- a/cores/xmc/main.cpp +++ b/cores/xmc/main.cpp @@ -49,7 +49,7 @@ int main(void) { setup(); while (1) { loop(); - // serialEventRun(); + //::serialEventRun(); } } diff --git a/tests/arduino-core-tests b/tests/arduino-core-tests index 0052b910..cf781104 160000 --- a/tests/arduino-core-tests +++ b/tests/arduino-core-tests @@ -1 +1 @@ -Subproject commit 0052b910df063e45f351575220f53b0cec295eec +Subproject commit cf78110475f4fb10c03c7bf2a65be10a91476a1b diff --git a/tests/test_config.h b/tests/test_config.h new file mode 100644 index 00000000..3b4ffe67 --- /dev/null +++ b/tests/test_config.h @@ -0,0 +1,19 @@ +/** + * @file test_config.h + * @brief Configuration file for board-specific test pin definitions. + * + * This header file contains the definitions of the pins used for testing + * purposes on the specific board. These pins are configured as output and + * input pins for various test scenarios. + * + */ +#ifndef TEST_CONFIG_H +#define TEST_CONFIG_H + +#include + +// Test Pin Definitions +#define TEST_DIGITALIO_OUTPUT 4 // IO_4 +#define TEST_DIGITALIO_INPUT 3 // IO_3 + +#endif // TEST_CONFIG_H \ No newline at end of file diff --git a/variants/XMC4700/config/XMC4700_Relax_Kit/pins_arduino.h b/variants/XMC4700/config/XMC4700_Relax_Kit/pins_arduino.h index 27f812db..6d8b7e22 100644 --- a/variants/XMC4700/config/XMC4700_Relax_Kit/pins_arduino.h +++ b/variants/XMC4700/config/XMC4700_Relax_Kit/pins_arduino.h @@ -146,7 +146,7 @@ static const uint8_t SCK_SD = SDCARD_SCK_PIN; #define BUTTON1 24 #define BUTTON2 25 -#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : NOT_AN_INTERRUPT)) +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : -1)) #ifdef ARDUINO_MAIN // Mapping of digital pins and comments @@ -259,10 +259,10 @@ const uint8_t GND = (sizeof(mapping_port_pin) / sizeof(XMC_PORT_PIN_t)); const uint8_t NUM_DIGITAL = (sizeof(mapping_port_pin) / sizeof(XMC_PORT_PIN_t)); ; -// const XMC_PIN_INTERRUPT_t mapping_interrupt[] = { -// /* 0 */ {CCU40, CCU40_CC43, 3, 0, CCU40_IN3_P1_0}, -// /* 1 */ {CCU40, CCU40_CC42, 2, 1, CCU40_IN2_P1_1}}; -// const uint8_t NUM_INTERRUPT = (sizeof(mapping_interrupt) / sizeof(XMC_PIN_INTERRUPT_t)); +const XMC_PIN_INTERRUPT_t mapping_interrupt[] = { + /* 0 */ {CCU40, CCU40_CC43, 3, 0, CCU40_IN3_P1_0}, + /* 1 */ {CCU40, CCU40_CC42, 2, 1, CCU40_IN2_P1_1}}; +const uint8_t NUM_INTERRUPT = (sizeof(mapping_interrupt) / sizeof(XMC_PIN_INTERRUPT_t)); // /* Mapping of Arduino Pins to PWM4 channels as pin and index in PWM4 channel // mapping array XMC_PWM4_t mapping_pwm4[] @@ -394,286 +394,280 @@ const uint8_t NUM_DIGITAL = (sizeof(mapping_port_pin) / sizeof(XMC_PORT_PIN_t)); // VADC_G2, 2, 4, DISABLED}, {VADC, 7, VADC_G2, 2, 7, DISABLED}}; // const uint8_t NUM_ANALOG_INPUTS = (sizeof(mapping_adc) / sizeof(XMC_ADC_t)); -// /* -// * UART objects -// * -// * Serial 0 is Debug port -// * Serial 1 is on-board port -// */ -// RingBuffer rx_buffer_0; -// RingBuffer tx_buffer_0; -// RingBuffer rx_buffer_1; -// RingBuffer tx_buffer_1; - -// XMC_UART_t XMC_UART_0 = { -// .channel = XMC_UART0_CH0, -// .rx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)4}, -// .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, -// .tx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)5}, -// .tx_config = {.mode = (XMC_GPIO_MODE_t)XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, -// .input_source_dx0 = (XMC_USIC_INPUT_t)USIC0_C0_DX0_P1_4, -// .input_source_dx1 = XMC_INPUT_INVALID, -// .input_source_dx2 = XMC_INPUT_INVALID, -// .input_source_dx3 = XMC_INPUT_INVALID, -// .irq_num = USIC0_0_IRQn, -// .irq_service_request = 0}; - -// XMC_UART_t XMC_UART_1 = { -// .channel = XMC_UART1_CH0, -// .rx = {.port = (XMC_GPIO_PORT_t *)PORT2_BASE, .pin = (uint8_t)15}, -// .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, -// .tx = {.port = (XMC_GPIO_PORT_t *)PORT2_BASE, .pin = (uint8_t)14}, -// .tx_config = {.mode = (XMC_GPIO_MODE_t)XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, -// .input_source_dx0 = (XMC_USIC_INPUT_t)USIC1_C0_DX0_P2_15, -// .input_source_dx1 = XMC_INPUT_INVALID, -// .input_source_dx2 = XMC_INPUT_INVALID, -// .input_source_dx3 = XMC_INPUT_INVALID, -// .irq_num = USIC1_0_IRQn, -// .irq_service_request = 0}; - -// // Debug port -// // HardwareSerial Serial(&XMC_UART_0, &rx_buffer_0, &tx_buffer_0); -// // On-board port -// // HardwareSerial Serial1(&XMC_UART_1, &rx_buffer_1, &tx_buffer_1); - -// // Three SPI instances possible -// XMC_SPI_t XMC_SPI_0 = { -// .channel = XMC_SPI2_CH0, -// .channel_config = {.baudrate = 20003906U, -// .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, -// .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, -// .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, -// .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)8}, -// .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// .miso = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)7}, -// .miso_config = -// { -// .mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// }, -// .input_source = XMC_INPUT_C, -// .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)9}, -// .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// }; - -// XMC_SPI_t XMC_SPI_1 = { -// .channel = XMC_SPI0_CH1, -// .channel_config = {.baudrate = 20003906U, -// .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, -// .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, -// .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, -// .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)5}, -// .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT4, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// .miso = {.port = (XMC_GPIO_PORT_t *)PORT4_BASE, .pin = (uint8_t)0}, -// .miso_config = -// { -// .mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// }, -// .input_source = XMC_INPUT_E, -// .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)6}, -// .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT4, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// }; - -// XMC_SPI_t XMC_SPI_2 = { -// .channel = XMC_SPI2_CH1, -// .channel_config = {.baudrate = 20003906U, -// .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, -// .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, -// .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, -// .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)11}, -// .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// .miso = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)12}, -// .miso_config = -// { -// .mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// }, -// .input_source = XMC_INPUT_D, -// .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)13}, -// .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, -// }; - -// Only two serial objects are possible: Serial and Serial1 so anymore serial interfaces has to -// overwrite/reuse the existing serial objects -// Will overwrite Serial -// XMC_SPI_t XMC_SPI_3 = -//{ -// .channel = XMC_SPI0_CH0, -// .channel_config = { -// .baudrate = 20003906U, -// .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, -// .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, -// .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE -// }, -// .mosi = { -// .port = (XMC_GPIO_PORT_t*)PORT5_BASE, -// .pin = (uint8_t)1 -// }, -// .mosi_config = { -// .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM -// }, -// .miso = { -// .port = (XMC_GPIO_PORT_t*)PORT5_BASE, -// .pin = (uint8_t)0 -// }, -// .miso_config = { -// .mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// }, -// .input_source = XMC_INPUT_D, -// .sclkout = { -// .port = (XMC_GPIO_PORT_t*)PORT0_BASE, -// .pin = (uint8_t)8 -// }, -// .sclkout_config = { -// .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM -// }, -// }; - -// Will overwrite Serial1 -// XMC_SPI_t XMC_SPI_4 = -//{ -// .channel = XMC_SPI1_CH0, -// .channel_config = { -// .baudrate = 20003906U, -// .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, -// .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, -// .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE -// }, -// .mosi = { -// .port = (XMC_GPIO_PORT_t*)PORT0_BASE, -// .pin = (uint8_t)5 -// }, -// .mosi_config = { -// .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM -// }, -// .miso = { -// .port = (XMC_GPIO_PORT_t*)PORT0_BASE, -// .pin = (uint8_t)4 -// }, -// .miso_config = { -// .mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// }, -// .input_source = XMC_INPUT_A, -// .sclkout = { -// .port = (XMC_GPIO_PORT_t*)PORT0_BASE, -// .pin = (uint8_t)11 -// }, -// .sclkout_config = { -// .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, -// .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM -// }, -//}; - -// Two I2C instances possible -// XMC_I2C_t XMC_I2C_0 = {.channel = XMC_I2C1_CH1, -// .channel_config = {.baudrate = (uint32_t)(100000U), .address = 0U}, -// .sda = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)15}, -// .sda_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .scl = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)13}, -// .scl_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .input_source_dx0 = XMC_INPUT_A, -// .input_source_dx1 = XMC_INPUT_B, -// .slave_receive_irq_num = (IRQn_Type)91, -// .slave_receive_irq_service_request = 1, -// .protocol_irq_num = (IRQn_Type)92, -// .protocol_irq_service_request = 2}; -// XMC_I2C_t XMC_I2C_1 = {.channel = XMC_I2C1_CH0, -// .channel_config = {.baudrate = (uint32_t)(100000U), .address = 0U}, -// .sda = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)5}, -// .sda_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .scl = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)11}, -// .scl_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .input_source_dx0 = XMC_INPUT_B, -// .input_source_dx1 = XMC_INPUT_A, -// .slave_receive_irq_num = (IRQn_Type)93, -// .slave_receive_irq_service_request = 3, -// .protocol_irq_num = (IRQn_Type)94, -// .protocol_irq_service_request = 4}; - -// // XMC_I2S instance -// XMC_I2S_t i2s_config = {.input_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .sclk_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .wa_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, -// .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, -// .protocol_irq_num = (IRQn_Type)USIC2_2_IRQn, -// .protocol_irq_service_request = 2}; - -// // XMC CAN instance -// #ifdef CAN_xmc -// XMC_ARD_CAN_t XMC_CAN_0 = {.can_node = CAN_NODE1, -// .can_node_num = XMC_NODE_NUM_1, -// .can_clock = XMC_CAN_CANCLKSRC_FPERI, -// .can_frequency = (uint32_t)144000000, -// .rx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)13}, -// .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE}, -// .tx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)12}, -// .tx_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2}, -// .node_input = CAN_NODE1_RXD_P1_13, -// .irq_num = CAN0_7_IRQn, -// .irq_service_request = 7u}; -// #endif +/* + * UART objects + * + * Serial 0 is Debug port + * Serial 1 is on-board port + */ +arduino::RingBuffer rx_buffer_0; +arduino::RingBuffer rx_buffer_1; + +XMC_UART_t XMC_UART_0 = { + .channel = XMC_UART0_CH0, + .rx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)4}, + .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, + .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, + .tx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)5}, + .tx_config = {.mode = (XMC_GPIO_MODE_t)XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, + .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, + .input_source_dx0 = (XMC_USIC_INPUT_t)USIC0_C0_DX0_P1_4, + .input_source_dx1 = XMC_INPUT_INVALID, + .input_source_dx2 = XMC_INPUT_INVALID, + .input_source_dx3 = XMC_INPUT_INVALID, + .irq_num = USIC0_0_IRQn, + .irq_service_request = 0}; + +XMC_UART_t XMC_UART_1 = { + .channel = XMC_UART1_CH0, + .rx = {.port = (XMC_GPIO_PORT_t *)PORT2_BASE, .pin = (uint8_t)15}, + .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, + .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, + .tx = {.port = (XMC_GPIO_PORT_t *)PORT2_BASE, .pin = (uint8_t)14}, + .tx_config = {.mode = (XMC_GPIO_MODE_t)XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, + .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + .output_strength = XMC_GPIO_OUTPUT_STRENGTH_STRONG_SOFT_EDGE}, + .input_source_dx0 = (XMC_USIC_INPUT_t)USIC1_C0_DX0_P2_15, + .input_source_dx1 = XMC_INPUT_INVALID, + .input_source_dx2 = XMC_INPUT_INVALID, + .input_source_dx3 = XMC_INPUT_INVALID, + .irq_num = USIC1_0_IRQn, + .irq_service_request = 0}; + +// Debug port +Uart Serial(&XMC_UART_0, &rx_buffer_0); +// On-board port +Uart Serial1(&XMC_UART_1, &rx_buffer_1); + + // // Three SPI instances possible + // XMC_SPI_t XMC_SPI_0 = { + // .channel = XMC_SPI2_CH0, + // .channel_config = {.baudrate = 20003906U, + // .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, + // .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, + // .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, + // .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)8}, + // .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // .miso = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)7}, + // .miso_config = + // { + // .mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // }, + // .input_source = XMC_INPUT_C, + // .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)9}, + // .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // }; + + // XMC_SPI_t XMC_SPI_1 = { + // .channel = XMC_SPI0_CH1, + // .channel_config = {.baudrate = 20003906U, + // .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, + // .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, + // .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, + // .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)5}, + // .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT4, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // .miso = {.port = (XMC_GPIO_PORT_t *)PORT4_BASE, .pin = (uint8_t)0}, + // .miso_config = + // { + // .mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // }, + // .input_source = XMC_INPUT_E, + // .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)6}, + // .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT4, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // }; + + // XMC_SPI_t XMC_SPI_2 = { + // .channel = XMC_SPI2_CH1, + // .channel_config = {.baudrate = 20003906U, + // .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, + // .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, + // .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE}, + // .mosi = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)11}, + // .mosi_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // .miso = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)12}, + // .miso_config = + // { + // .mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // }, + // .input_source = XMC_INPUT_D, + // .sclkout = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)13}, + // .sclkout_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM}, + // }; + + // Only two serial objects are possible: Serial and Serial1 so anymore serial interfaces has to + // overwrite/reuse the existing serial objects + // Will overwrite Serial + // XMC_SPI_t XMC_SPI_3 = + //{ + // .channel = XMC_SPI0_CH0, + // .channel_config = { + // .baudrate = 20003906U, + // .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, + // .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, + // .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE + // }, + // .mosi = { + // .port = (XMC_GPIO_PORT_t*)PORT5_BASE, + // .pin = (uint8_t)1 + // }, + // .mosi_config = { + // .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM + // }, + // .miso = { + // .port = (XMC_GPIO_PORT_t*)PORT5_BASE, + // .pin = (uint8_t)0 + // }, + // .miso_config = { + // .mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // }, + // .input_source = XMC_INPUT_D, + // .sclkout = { + // .port = (XMC_GPIO_PORT_t*)PORT0_BASE, + // .pin = (uint8_t)8 + // }, + // .sclkout_config = { + // .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM + // }, + // }; + + // Will overwrite Serial1 + // XMC_SPI_t XMC_SPI_4 = + //{ + // .channel = XMC_SPI1_CH0, + // .channel_config = { + // .baudrate = 20003906U, + // .bus_mode = (XMC_SPI_CH_BUS_MODE_t)XMC_SPI_CH_BUS_MODE_MASTER, + // .selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS, + // .parity_mode = XMC_USIC_CH_PARITY_MODE_NONE + // }, + // .mosi = { + // .port = (XMC_GPIO_PORT_t*)PORT0_BASE, + // .pin = (uint8_t)5 + // }, + // .mosi_config = { + // .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM + // }, + // .miso = { + // .port = (XMC_GPIO_PORT_t*)PORT0_BASE, + // .pin = (uint8_t)4 + // }, + // .miso_config = { + // .mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // }, + // .input_source = XMC_INPUT_A, + // .sclkout = { + // .port = (XMC_GPIO_PORT_t*)PORT0_BASE, + // .pin = (uint8_t)11 + // }, + // .sclkout_config = { + // .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH, + // .output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM + // }, + //}; + + // Two I2C instances possible + // XMC_I2C_t XMC_I2C_0 = {.channel = XMC_I2C1_CH1, + // .channel_config = {.baudrate = (uint32_t)(100000U), .address = 0U}, + // .sda = {.port = (XMC_GPIO_PORT_t *)PORT3_BASE, .pin = (uint8_t)15}, + // .sda_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .scl = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)13}, + // .scl_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .input_source_dx0 = XMC_INPUT_A, + // .input_source_dx1 = XMC_INPUT_B, + // .slave_receive_irq_num = (IRQn_Type)91, + // .slave_receive_irq_service_request = 1, + // .protocol_irq_num = (IRQn_Type)92, + // .protocol_irq_service_request = 2}; + // XMC_I2C_t XMC_I2C_1 = {.channel = XMC_I2C1_CH0, + // .channel_config = {.baudrate = (uint32_t)(100000U), .address = 0U}, + // .sda = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)5}, + // .sda_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .scl = {.port = (XMC_GPIO_PORT_t *)PORT0_BASE, .pin = (uint8_t)11}, + // .scl_config = {.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT2, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .input_source_dx0 = XMC_INPUT_B, + // .input_source_dx1 = XMC_INPUT_A, + // .slave_receive_irq_num = (IRQn_Type)93, + // .slave_receive_irq_service_request = 3, + // .protocol_irq_num = (IRQn_Type)94, + // .protocol_irq_service_request = 4}; + + // // XMC_I2S instance + // XMC_I2S_t i2s_config = {.input_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .sclk_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .wa_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT1, + // .output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH}, + // .protocol_irq_num = (IRQn_Type)USIC2_2_IRQn, + // .protocol_irq_service_request = 2}; + + // // XMC CAN instance + // #ifdef CAN_xmc + // XMC_ARD_CAN_t XMC_CAN_0 = {.can_node = CAN_NODE1, + // .can_node_num = XMC_NODE_NUM_1, + // .can_clock = XMC_CAN_CANCLKSRC_FPERI, + // .can_frequency = (uint32_t)144000000, + // .rx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)13}, + // .rx_config = {.mode = XMC_GPIO_MODE_INPUT_TRISTATE}, + // .tx = {.port = (XMC_GPIO_PORT_t *)PORT1_BASE, .pin = (uint8_t)12}, + // .tx_config = {.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT2}, + // .node_input = CAN_NODE1_RXD_P1_13, + // .irq_num = CAN0_7_IRQn, + // .irq_service_request = 7u}; + // #endif + + // Serial Interrupt and event handling + #ifdef __cplusplus +extern "C" { + #endif +void serialEventRun(); +void serialEvent() __attribute__((weak)); +void serialEvent1() __attribute__((weak)); + +void serialEventRun() { + if (serialEvent) { + if (Serial.available()) + serialEvent(); + } + if (serialEvent1) { + if (Serial1.available()) + serialEvent1(); + } +} + +void USIC0_0_IRQHandler() { Serial.IrqHandler(); } + +void USIC1_0_IRQHandler() { Serial1.IrqHandler(); } + #ifdef __cplusplus +} + #endif -// // Serial Interrupt and event handling -// #ifdef __cplusplus -// extern "C" { -// #endif -// void serialEventRun(); -// void serialEvent() __attribute__((weak)); -// void serialEvent1() __attribute__((weak)); - -// void serialEventRun() { -// if (serialEvent) { -// if (Serial.available()) -// serialEvent(); -// } -// if (serialEvent1) { -// if (Serial1.available()) -// serialEvent1(); -// } -// } - -// void USIC0_0_IRQHandler() { Serial.IrqHandler(); } - -// void USIC1_0_IRQHandler() { Serial1.IrqHandler(); } -// #ifdef __cplusplus -// } -// #endif #endif /* ARDUINO_MAIN */ -// #ifdef __cplusplus -// extern HardwareSerial Serial; -// extern HardwareSerial Serial1; -// #endif /* cplusplus */ - #endif /* PINS_ARDUINO_H_ */