Skip to content

Commit 1598e44

Browse files
turbinenreitertannewt
authored andcommitted
atmel-samd: Add preliminary support for UART
1 parent af17b64 commit 1598e44

File tree

22 files changed

+811
-38
lines changed

22 files changed

+811
-38
lines changed

atmel-samd/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ CFLAGS_CORTEX_M0 = \
106106
-DSYSTICK_MODE \
107107
-DEXTINT_CALLBACK_MODE=true \
108108
-DUDD_ENABLE \
109-
-DUSART_CALLBACK_MODE=true \
109+
-DUSART_CALLBACK_MODE=false \
110110
-DSPI_CALLBACK_MODE=false \
111111
-DI2C_MASTER_CALLBACK_MODE=false \
112112
-DDAC_CALLBACK_MODE=false \
@@ -155,7 +155,6 @@ SRC_ASF = $(addprefix asf/sam0/,\
155155
drivers/sercom/sercom_interrupt.c \
156156
drivers/sercom/spi/spi.c \
157157
drivers/sercom/usart/usart.c \
158-
drivers/sercom/usart/usart_interrupt.c \
159158
drivers/system/clock/clock_samd21_r21_da/clock.c \
160159
drivers/system/clock/clock_samd21_r21_da/gclk.c \
161160
drivers/system/interrupt/system_interrupt.c \
@@ -219,6 +218,7 @@ SRC_BINDINGS = \
219218
nativeio/I2C.c \
220219
nativeio/PWMOut.c \
221220
nativeio/SPI.c \
221+
nativeio/UART.c \
222222
neopixel_write/__init__.c \
223223
time/__init__.c
224224

atmel-samd/asf/sam0/drivers/sercom/usart/usart.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ static enum status_code _usart_set_config(
187187
}
188188

189189
/* Set stopbits and enable transceivers */
190-
ctrlb =
190+
ctrlb =
191191
#ifdef FEATURE_USART_IRDA
192192
(config->encoding_format_enable << SERCOM_USART_CTRLB_ENC_Pos) |
193193
#endif
@@ -207,18 +207,18 @@ static enum status_code _usart_set_config(
207207
ctrla |= SERCOM_USART_CTRLA_TXINV | SERCOM_USART_CTRLA_RXINV;
208208
}
209209
ctrlb |= USART_CHARACTER_SIZE_8BIT;
210-
210+
211211
switch(config->iso7816_config.protocol_t) {
212212
case ISO7816_PROTOCOL_T_0:
213-
ctrlb |= (uint32_t)config->stopbits;
213+
ctrlb |= (uint32_t)config->stopbits;
214214
ctrlc |= SERCOM_USART_CTRLC_GTIME(config->iso7816_config.guard_time) | \
215215
(config->iso7816_config.inhibit_nack) | \
216216
(config->iso7816_config.successive_recv_nack) | \
217217
SERCOM_USART_CTRLC_MAXITER(config->iso7816_config.max_iterations);
218-
break;
218+
break;
219219
case ISO7816_PROTOCOL_T_1:
220220
ctrlb |= USART_STOPBITS_1;
221-
break;
221+
break;
222222
}
223223
} else {
224224
#endif
@@ -334,8 +334,8 @@ enum status_code usart_init(
334334
SercomUsart *const usart_hw = &(module->hw->USART);
335335

336336
uint32_t sercom_index = _sercom_get_sercom_inst_index(module->hw);
337-
uint32_t pm_index, gclk_index;
338-
#if (SAML22) || (SAMC20)
337+
uint32_t pm_index, gclk_index;
338+
#if (SAML22) || (SAMC20)
339339
pm_index = sercom_index + MCLK_APBCMASK_SERCOM0_Pos;
340340
gclk_index = sercom_index + SERCOM0_GCLK_ID_CORE;
341341
#elif (SAML21) || (SAMR30)
@@ -348,7 +348,7 @@ enum status_code usart_init(
348348
}
349349
#elif (SAMC21)
350350
pm_index = sercom_index + MCLK_APBCMASK_SERCOM0_Pos;
351-
351+
352352
if (sercom_index == 5){
353353
gclk_index = SERCOM5_GCLK_ID_CORE;
354354
} else {
@@ -374,7 +374,7 @@ enum status_code usart_init(
374374
if (sercom_index == 5) {
375375
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBD, 1 << pm_index);
376376
} else {
377-
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, 1 << pm_index);
377+
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, 1 << pm_index);
378378
}
379379
#else
380380
system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, 1 << pm_index);
@@ -639,8 +639,8 @@ enum status_code usart_read_wait(
639639
* \param[in] tx_data Pointer to data to transmit
640640
* \param[in] length Number of characters to transmit
641641
*
642-
* \note If using 9-bit data, the array that *tx_data point to should be defined
643-
* as uint16_t array and should be casted to uint8_t* pointer. Because it
642+
* \note If using 9-bit data, the array that *tx_data point to should be defined
643+
* as uint16_t array and should be casted to uint8_t* pointer. Because it
644644
* is an address pointer, the highest byte is not discarded. For example:
645645
* \code
646646
#define TX_LEN 3
@@ -733,8 +733,8 @@ enum status_code usart_write_buffer_wait(
733733
* \param[out] rx_data Pointer to receive buffer
734734
* \param[in] length Number of characters to receive
735735
*
736-
* \note If using 9-bit data, the array that *rx_data point to should be defined
737-
* as uint16_t array and should be casted to uint8_t* pointer. Because it
736+
* \note If using 9-bit data, the array that *rx_data point to should be defined
737+
* as uint16_t array and should be casted to uint8_t* pointer. Because it
738738
* is an address pointer, the highest byte is not discarded. For example:
739739
* \code
740740
#define RX_LEN 3

atmel-samd/boards/feather_m0_flash/pins.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ STATIC const mp_map_elem_t board_global_dict_table[] = {
1010
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCK), (mp_obj_t)&pin_PB11 },
1111
{ MP_OBJ_NEW_QSTR(MP_QSTR_MOSI), (mp_obj_t)&pin_PB10 },
1212
{ MP_OBJ_NEW_QSTR(MP_QSTR_MISO), (mp_obj_t)&pin_PA12 },
13-
{ MP_OBJ_NEW_QSTR(MP_QSTR_0RX), (mp_obj_t)&pin_PA11 },
14-
{ MP_OBJ_NEW_QSTR(MP_QSTR_1TX), (mp_obj_t)&pin_PA10 },
13+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA11 },
14+
{ MP_OBJ_NEW_QSTR(MP_QSTR_RX), (mp_obj_t)&pin_PA11 },
15+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D1), (mp_obj_t)&pin_PA10 },
16+
{ MP_OBJ_NEW_QSTR(MP_QSTR_TX), (mp_obj_t)&pin_PA10 },
1517
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), (mp_obj_t)&pin_PA22 },
1618
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCL), (mp_obj_t)&pin_PA23 },
1719
{ MP_OBJ_NEW_QSTR(MP_QSTR_D5), (mp_obj_t)&pin_PA15 },

atmel-samd/boards/metro_m0_flash/mpconfigboard.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
LD_FILE = boards/samd21x18-bootloader-external-flash.ld
1+
LD_FILE = boards/samd21x18-external-flash.ld
22
USB_VID = 0x239A
33
USB_PID = 0x8015
44

atmel-samd/common-hal/nativeio/SPI.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,12 @@ void common_hal_nativeio_spi_construct(nativeio_spi_obj_t *self,
125125
&config_spi_master.pinmux_pad3};
126126
*pinmuxes[clock_pad] = clock_pinmux;
127127
self->clock_pin = clock->pin;
128-
self->MOSI_pin = 0;
128+
self->MOSI_pin = NO_PIN;
129129
if (!mosi_none) {
130130
*pinmuxes[mosi_pad] = mosi_pinmux;
131131
self->MOSI_pin = mosi->pin;
132132
}
133-
self->MISO_pin = 0;
133+
self->MISO_pin = NO_PIN;
134134
if (!miso_none) {
135135
*pinmuxes[miso_pad] = miso_pinmux;
136136
self->MISO_pin = miso->pin;

0 commit comments

Comments
 (0)