This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16292 ) Change subject: cuart cleanup ...................................................................... cuart cleanup Change-Id: I15ea4d68263b62fca3da76795969358a07e7f1a6 --- M sysmoOCTSIM/cuart_driver_asf4_usart_async.c 1 file changed, 15 insertions(+), 15 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c index f12ed73..c7d29eb 100644 --- a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c +++ b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c @@ -161,8 +161,10 @@ * @param[in] baudrate baud rate in bps to set * @return if the baud rate has been set, else a parameter is out of range */ -static bool slot_set_baudrate(uint8_t slotnr, uint32_t baudrate) +static bool slot_set_baudrate(struct card_uart *cuart, uint32_t baudrate) { + uint8_t slotnr = cuart->u.asf4.slot_nr; + ASSERT(slotnr < ARRAY_SIZE(SIM_peripheral_descriptors)); // calculate the error corresponding to the clock sources @@ -206,6 +208,8 @@ // update cached values cuart->u.asf4.current_baudrate = baudrate; + cuart->u.asf4.extrawait_after_rx = 1./baudrate * 1000 * 1000; + printf("(%u) switching SERCOM clock to GCLK%u (freq = %lu kHz) and baud rate to %lu bps (baud = %u)\r\n", slotnr, (best + 1) * 2, (uint32_t)(round(sercom_glck_freqs[best] / 1000)), baudrate, bauds[best]); while (!usart_async_is_tx_empty(slot)); // wait for transmission to complete (WARNING no timeout) usart_async_disable(slot); // disable SERCOM peripheral @@ -226,8 +230,10 @@ * @param[in] d baud rate adjustment factor D * @return if the baud rate has been set, else a parameter is out of range */ -static bool slot_set_isorate(uint8_t slotnr, enum ncn8025_sim_clkdiv clkdiv, uint16_t f, uint8_t d) +static bool slot_set_isorate(struct card_uart *cuart, enum ncn8025_sim_clkdiv clkdiv, uint16_t f, uint8_t d) { + uint8_t slotnr = cuart->u.asf4.slot_nr; + // input checks ASSERT(slotnr < ARRAY_SIZE(SIM_peripheral_descriptors)); if (clkdiv != SIM_CLKDIV_1 && clkdiv != SIM_CLKDIV_2 && clkdiv != SIM_CLKDIV_4 && clkdiv != SIM_CLKDIV_8) { @@ -267,7 +273,7 @@ // set baud rate uint32_t baudrate = (freq * d) / f; // calculate actual baud rate - return slot_set_baudrate(slotnr, baudrate); // set baud rate + return slot_set_baudrate(cuart, baudrate); // set baud rate } /*********************************************************************** @@ -292,16 +298,13 @@ cuart->u.asf4.usa_pd = usa_pd; cuart->u.asf4.slot_nr = slot_nr; - /* in us, 20Mhz with default ncn8025 divider 8, F=372, D=1*/ - cuart->u.asf4.extrawait_after_rx = 1./(20./8/372); - usart_async_register_callback(usa_pd, USART_ASYNC_RXC_CB, SIM_rx_cb[slot_nr]); usart_async_register_callback(usa_pd, USART_ASYNC_TXC_CB, SIM_tx_cb[slot_nr]); usart_async_register_callback(usa_pd, USART_ASYNC_ERROR_CB, _SIM_error_cb); usart_async_enable(usa_pd); // set USART baud rate to match the interface (f = 2.5 MHz) and card default settings (Fd = 372, Dd = 1) - slot_set_isorate(cuart->u.asf4.slot_nr, SIM_CLKDIV_8, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD); + slot_set_isorate(cuart, SIM_CLKDIV_8, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD); return 0; } @@ -352,6 +355,7 @@ switch (ctl) { case CUART_CTL_NO_RXTX: + /* no op */ break; case CUART_CTL_RX: if (arg){ @@ -367,12 +371,8 @@ usart_async_flush_rx_buffer(cuart->u.asf4.usa_pd); break; case CUART_CTL_POWER: - /* in us, 20Mhz with default ncn8025 divider 8, F=372, D=1*/ - cuart->u.asf4.extrawait_after_rx = 1./(20./8/372); - - // set USART baud rate to match the interface (f = 2.5 MHz) and card default settings (Fd = 372, Dd = 1) - if(arg) - slot_set_isorate(cuart->u.asf4.slot_nr, SIM_CLKDIV_8, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD); + /* reset everything */ + slot_set_isorate(cuart, SIM_CLKDIV_8, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD); ncn8025_get(cuart->u.asf4.slot_nr, &settings); settings.cmdvcc = arg ? true : false; @@ -405,8 +405,8 @@ ncn8025_get(cuart->u.asf4.slot_nr, &settings); uint8_t divider = ncn8025_div_val[settings.clkdiv]; uint32_t baudrate = (20e6/divider)/arg; - cuart->u.asf4.extrawait_after_rx = 1./baudrate * 1000 * 1000; - slot_set_baudrate(cuart->u.asf4.slot_nr, baudrate); + slot_set_baudrate(cuart, baudrate); + break; case CUART_CTL_GET_BAUDRATE: return cuart->u.asf4.current_baudrate; break; -- To view, visit https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16292 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ccid-firmware Gerrit-Branch: master Gerrit-Change-Id: I15ea4d68263b62fca3da76795969358a07e7f1a6 Gerrit-Change-Number: 16292 Gerrit-PatchSet: 4 Gerrit-Owner: Hoernchen <ewild at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191128/65c69e74/attachment.htm>