/** * \brief Configure USART in synchronous mode. * * \param ul_ismaster 1 for master, 0 for slave. * \param ul_baudrate Baudrate for synchronous communication. * */ static void configure_usart(uint32_t ul_ismaster, uint32_t ul_baudrate) { sam_usart_opt_t usart_console_settings = { 0, US_MR_CHRL_8_BIT, US_MR_PAR_NO, US_MR_NBSTOP_1_BIT, US_MR_CHMODE_NORMAL, /* This field is only used in IrDA mode. */ 0 }; usart_console_settings.baudrate = ul_baudrate; /* Enable the peripheral clock in the PMC. */ sysclk_enable_peripheral_clock(BOARD_ID_USART); /* Configure USART in SYNC. master or slave mode. */ if (ul_ismaster) { usart_init_sync_master(BOARD_USART, &usart_console_settings, sysclk_get_peripheral_hz()); } else { usart_init_sync_slave(BOARD_USART, &usart_console_settings); } /* Disable all the interrupts. */ usart_disable_interrupt(BOARD_USART, ALL_INTERRUPT_MASK); /* Enable TX & RX function. */ usart_enable_tx(BOARD_USART); usart_enable_rx(BOARD_USART); /* Configure and enable interrupt of USART. */ NVIC_EnableIRQ(USART_IRQn); }
/** Enables the target's PDI interface, holding the target in reset until PDI mode is exited. */ void XPROGTarget_EnableTargetPDI(void) { IsSending = false; /* Turn on clock */ sysclk_enable_peripheral_clock(USART_PDI_ID); /* Set Tx and XCK as outputs, Rx as input */ gpio_configure_pin(PIN_PDIDTX_GPIO, PIN_PDIDTX_OUT_FLAGS); gpio_configure_pin(PIN_PDIDRX_GPIO, PIN_PDIDRX_FLAGS); gpio_configure_pin(PIN_PDIC_GPIO, PIN_PDIC_OUT_FLAGS); delay_us(50); /* Set DATA line high for at least 90ns to disable /RESET functionality */ gpio_set_pin_high(PIN_PDIDTX_GPIO); delay_us(10); /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */ const sam_usart_opt_t usart_pdid_settings = { PDI_BAUD_RATE, US_MR_CHRL_8_BIT, US_MR_PAR_EVEN, US_MR_NBSTOP_2_BIT, US_MR_CHMODE_NORMAL }; usart_init_sync_master(USART_PDI, &usart_pdid_settings, sysclk_get_main_hz()); /* Turn on clock */ gpio_configure_pin(PIN_PDIC_GPIO, PIN_PDIC_USART_FLAGS); /* Send two IDLEs of 12 bits each to enable PDI interface (need at least 16 idle bits) */ XPROGTarget_SendIdle(); XPROGTarget_SendIdle(); }
void ledstripe_on(uint16_t num_leds, uint8_t* in_ledstripe_buffer) { ledstripe_buffer = in_ledstripe_buffer; ledstripe_buffer_len = LEDSTRIPE_BUFFER_CAPACITY(num_leds); ledstripe_idx = ledstripe_buffer_len; usart_configure_pin(USART0_TXD_GROUP, USART0_TXD_IDX, USART0_TXD_MODE, false, true); usart_configure_pin(USART0_RXD_GROUP, USART0_RXD_IDX, USART0_RXD_MODE, true, true); usart_configure_pin(USART0_UCLK_GROUP, USART0_UCLK_IDX, USART0_UCLK_MODE, false, true); write_pin(PORT_5V_EN_PIN, true); usart_init_sync_master(LEDSTRIPE_USART_IDX, 8, 3200000, 16, USART_FCR_RXTRIGLVL_8, NULL, NULL/*ledstripe_refill*/, NULL); }