Change in osmo-ccid-firmware[master]: cuart cleanup

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.org
Thu Nov 28 15:23:48 UTC 2019


laforge 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>


More information about the gerrit-log mailing list