HACK: add gpio-toggling on arrival of tx-completion interrupt

Change-Id: I57e76f61f629c367fbbdf0227b27f1199270465d
This commit is contained in:
Harald Welte 2019-11-17 19:26:28 +01:00
parent ab053a25b7
commit 05c11a8192
3 changed files with 63 additions and 1 deletions

View File

@ -44,6 +44,14 @@ static void _SIM_tx_cb(const struct usart_async_descriptor *const io_descr, uint
{ {
struct card_uart *cuart = cuart4slot_nr(slot_nr); struct card_uart *cuart = cuart4slot_nr(slot_nr);
OSMO_ASSERT(cuart); OSMO_ASSERT(cuart);
if (slot_nr == 6) {
hri_sercomusart_clear_INTFLAG_TXC_bit(SERCOM6);
#if 0
gpio_set_pin_level(PIN_PB13, true);
delay_us(1);
gpio_set_pin_level(PIN_PB13, false);
#endif
}
card_uart_notification(cuart, CUART_E_TX_COMPLETE, io_descr->tx_buffer); card_uart_notification(cuart, CUART_E_TX_COMPLETE, io_descr->tx_buffer);
} }
@ -161,7 +169,7 @@ static const uint8_t SIM_peripheral_GCLK_ID[] = {SERCOM0_GCLK_ID_CORE, SERCOM1_G
* @param[in] baudrate baud rate in bps to set * @param[in] baudrate baud rate in bps to set
* @return if the baud rate has been set, else a parameter is out of range * @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) bool slot_set_baudrate(uint8_t slotnr, uint32_t baudrate)
{ {
ASSERT(slotnr < ARRAY_SIZE(SIM_peripheral_descriptors)); ASSERT(slotnr < ARRAY_SIZE(SIM_peripheral_descriptors));

View File

@ -45,6 +45,8 @@
#include <utils.h> #include <utils.h>
#include <utils_assert.h> #include <utils_assert.h>
#include <hal_gpio.h>
#ifndef CONF_SERCOM_0_USART_ENABLE #ifndef CONF_SERCOM_0_USART_ENABLE
#define CONF_SERCOM_0_USART_ENABLE 0 #define CONF_SERCOM_0_USART_ENABLE 0
#endif #endif
@ -2617,6 +2619,9 @@ void SERCOM6_0_Handler(void)
*/ */
void SERCOM6_1_Handler(void) void SERCOM6_1_Handler(void)
{ {
gpio_set_pin_level(PIN_PB13, true);
delay_us(1);
gpio_set_pin_level(PIN_PB13, false);
_sercom_usart_interrupt_handler(_sercom6_dev); _sercom_usart_interrupt_handler(_sercom6_dev);
} }
/** /**

View File

@ -1124,8 +1124,23 @@ static const struct ccid_ops c_ops = {
//####################### //#######################
static void dbgio_init()
{
/* CAN_TX */
gpio_set_pin_function(PIN_PB12, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_direction(PIN_PB12, GPIO_DIRECTION_OUT);
gpio_set_pin_level(PIN_PB12, false);
/* CAN_RX */
gpio_set_pin_function(PIN_PB13, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_direction(PIN_PB13, GPIO_DIRECTION_OUT);
gpio_set_pin_level(PIN_PB13, false);
}
#define NUM_OUT_BUF 7 #define NUM_OUT_BUF 7
extern bool slot_set_baudrate(uint8_t slotnr, uint32_t baudrate);
int main(void) int main(void)
{ {
char sernr_buf[16*2+1]; char sernr_buf[16*2+1];
@ -1187,8 +1202,41 @@ int main(void)
submit_next_out(); submit_next_out();
CRITICAL_SECTION_LEAVE() CRITICAL_SECTION_LEAVE()
dbgio_init();
#if 1
struct ncn8025_settings settings;
settings.rstin = false;
settings.cmdvcc = true;
settings.led = true;
settings.clkdiv = SIM_CLKDIV_1;
settings.vsel = SIM_VOLT_3V0;
ncn8025_set(6, &settings);
slot_set_baudrate(6, 6720);
//slot_set_isorate(6, settings.clkdiv, ISO7816_3_DEFAULT_FD, ISO7816_3_DEFAULT_DD);
//slot_set_baudrate(6, 300000);
hri_sercomusart_write_CTRLB_TXEN_bit(SERCOM6, true);
hri_sercomusart_write_CTRLB_RXEN_bit(SERCOM6, false);
hri_sercomusart_set_INTEN_TXC_bit(SERCOM6);
for (uint32_t i = 0; i < 4; i++) {
uint32_t irq = 70+i;
NVIC_DisableIRQ((IRQn_Type)irq);
NVIC_ClearPendingIRQ((IRQn_Type)irq);
NVIC_EnableIRQ((IRQn_Type)irq);
}
while (true) {
delay_us(100000);
while (!hri_sercomusart_get_interrupt_DRE_bit(SERCOM6)) {}
hri_sercomusart_set_INTEN_TXC_bit(SERCOM6);
hri_sercomusart_write_DATA_reg(SERCOM6, 0x55);
}
#else
// command_print_prompt(); // command_print_prompt();
while (true) { // main loop while (true) { // main loop
command_try_recv(); command_try_recv();
poll_card_detect(); poll_card_detect();
submit_next_irq(); submit_next_irq();
@ -1213,4 +1261,5 @@ int main(void)
} }
} }
#endif
} }