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);
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);
}
@ -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
* @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));

View File

@ -45,6 +45,8 @@
#include <utils.h>
#include <utils_assert.h>
#include <hal_gpio.h>
#ifndef CONF_SERCOM_0_USART_ENABLE
#define CONF_SERCOM_0_USART_ENABLE 0
#endif
@ -2617,6 +2619,9 @@ void SERCOM6_0_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);
}
/**

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
extern bool slot_set_baudrate(uint8_t slotnr, uint32_t baudrate);
int main(void)
{
char sernr_buf[16*2+1];
@ -1187,8 +1202,41 @@ int main(void)
submit_next_out();
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();
while (true) { // main loop
command_try_recv();
poll_card_detect();
submit_next_irq();
@ -1213,4 +1261,5 @@ int main(void)
}
}
#endif
}