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/.
Hoernchen gerrit-no-reply at lists.osmocom.orgHoernchen has uploaded this change for review. ( 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(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/92/16292/1
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: 1
Gerrit-Owner: Hoernchen <ewild at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191127/1fa04588/attachment.htm>