diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2019-08-22 08:52:42 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-08-22 09:58:58 -0400 |
commit | 4990fe814d55b5b1f63c405852bb3ae0bcc28708 (patch) | |
tree | 978b5a8510f39f2be77b675f31cbcf5302da689e /src/atsamd/serial.c | |
parent | 4ef53ab0953ac664a9935b26cd6536aac44eaec7 (diff) | |
download | kutter-4990fe814d55b5b1f63c405852bb3ae0bcc28708.tar.gz kutter-4990fe814d55b5b1f63c405852bb3ae0bcc28708.tar.xz kutter-4990fe814d55b5b1f63c405852bb3ae0bcc28708.zip |
atsamd: Move irq handler code above irq setup
Only code movement.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/atsamd/serial.c')
-rw-r--r-- | src/atsamd/serial.c | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/src/atsamd/serial.c b/src/atsamd/serial.c index 54c3cede..f38fb3d8 100644 --- a/src/atsamd/serial.c +++ b/src/atsamd/serial.c @@ -9,6 +9,38 @@ #include "internal.h" // enable_pclock #include "sched.h" // DECL_INIT +void +serial_enable_tx_irq(void) +{ + SERCOM0->USART.INTENSET.reg = SERCOM_USART_INTENSET_DRE; +} + +void __visible +SERCOM0_Handler(void) +{ + uint32_t status = SERCOM0->USART.INTFLAG.reg; + if (status & SERCOM_USART_INTFLAG_RXC) + serial_rx_byte(SERCOM0->USART.DATA.reg); + if (status & SERCOM_USART_INTFLAG_DRE) { + uint8_t data; + int ret = serial_get_tx_byte(&data); + if (ret) + SERCOM0->USART.INTENCLR.reg = SERCOM_USART_INTENSET_DRE; + else + SERCOM0->USART.DATA.reg = data; + } +} + +// Aliases for irq handler on SAMD51 +void SERCOM0_0_Handler(void) + __visible __attribute__((alias("SERCOM0_Handler"))); +void SERCOM0_1_Handler(void) + __visible __attribute__((alias("SERCOM0_Handler"))); +void SERCOM0_2_Handler(void) + __visible __attribute__((alias("SERCOM0_Handler"))); +void SERCOM0_3_Handler(void) + __visible __attribute__((alias("SERCOM0_Handler"))); + DECL_CONSTANT_STR("RESERVE_PINS_serial", "PA11,PA10"); void @@ -51,35 +83,3 @@ serial_init(void) #endif } DECL_INIT(serial_init); - -void -serial_enable_tx_irq(void) -{ - SERCOM0->USART.INTENSET.reg = SERCOM_USART_INTENSET_DRE; -} - -void __visible -SERCOM0_Handler(void) -{ - uint32_t status = SERCOM0->USART.INTFLAG.reg; - if (status & SERCOM_USART_INTFLAG_RXC) - serial_rx_byte(SERCOM0->USART.DATA.reg); - if (status & SERCOM_USART_INTFLAG_DRE) { - uint8_t data; - int ret = serial_get_tx_byte(&data); - if (ret) - SERCOM0->USART.INTENCLR.reg = SERCOM_USART_INTENSET_DRE; - else - SERCOM0->USART.DATA.reg = data; - } -} - -// Aliases for irq handler on SAMD51 -void SERCOM0_0_Handler(void) - __visible __attribute__((alias("SERCOM0_Handler"))); -void SERCOM0_1_Handler(void) - __visible __attribute__((alias("SERCOM0_Handler"))); -void SERCOM0_2_Handler(void) - __visible __attribute__((alias("SERCOM0_Handler"))); -void SERCOM0_3_Handler(void) - __visible __attribute__((alias("SERCOM0_Handler"))); |