aboutsummaryrefslogtreecommitdiffstats
path: root/src/atsamd/serial.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-08-22 08:52:42 -0400
committerKevin O'Connor <kevin@koconnor.net>2019-08-22 09:58:58 -0400
commit4990fe814d55b5b1f63c405852bb3ae0bcc28708 (patch)
tree978b5a8510f39f2be77b675f31cbcf5302da689e /src/atsamd/serial.c
parent4ef53ab0953ac664a9935b26cd6536aac44eaec7 (diff)
downloadkutter-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.c64
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")));