Esempio n. 1
0
void usbuart_init(void)
{
	UART_PIN_SETUP();
	
	periph_clock_enable(USBUART_CLK);
	__asm__("nop"); __asm__("nop"); __asm__("nop");
	
	uart_disable(USBUART);

	/* Setup UART parameters. */
	uart_clock_from_sysclk(USBUART);
	uart_set_baudrate(USBUART, 38400);
	uart_set_databits(USBUART, 8);
	uart_set_stopbits(USBUART, 1);
	uart_set_parity(USBUART, UART_PARITY_NONE);

	// Enable FIFO
	uart_enable_fifo(USBUART);

	// Set FIFO interrupt trigger levels to 1/8 full for RX buffer and
	// 7/8 empty (1/8 full) for TX buffer
	uart_set_fifo_trigger_levels(USBUART, UART_FIFO_RX_TRIG_1_8, UART_FIFO_TX_TRIG_7_8);

	uart_clear_interrupt_flag(USBUART, UART_INT_RX | UART_INT_RT);

	/* Enable interrupts */
	uart_enable_interrupts(UART0, UART_INT_RX| UART_INT_RT);

	/* Finally enable the USART. */
	uart_enable(USBUART);

	//nvic_set_priority(USBUSART_IRQ, IRQ_PRI_USBUSART);
	nvic_enable_irq(USBUART_IRQ);
}
Esempio n. 2
0
static void dmx_start_data(void) {
	switch (dmx_port_direction) {
	case DMX_PORT_DIRECTION_OUTP:
		dmx_send_always = true;
		dmx_send_state = IDLE;

		uart_enable_fifo();
		__enable_fiq();

		irq_timer_set(IRQ_TIMER_0, irq_timer0_dmx_sender);

		const uint32_t clo = h3_hs_timer_lo_us();

		if (clo - dmx_send_break_micros > dmx_output_period) {
			H3_TIMER->TMR0_CTRL |= TIMER_CTRL_SINGLE_MODE;
			H3_TIMER->TMR0_INTV = 4 * 12;
			H3_TIMER->TMR0_CTRL |= (TIMER_CTRL_EN_START | TIMER_CTRL_RELOAD); // 0x3;
		} else {
			H3_TIMER->TMR0_CTRL |= TIMER_CTRL_SINGLE_MODE;
			H3_TIMER->TMR0_INTV = (dmx_output_period + 4) * 12;
			H3_TIMER->TMR0_CTRL |= (TIMER_CTRL_EN_START | TIMER_CTRL_RELOAD); // 0x3;
		}

		isb();

		break;
	case DMX_PORT_DIRECTION_INP:
		dmx_receive_state = IDLE;

		irq_timer_set(IRQ_TIMER_0, irq_timer0_dmx_receive);
		H3_TIMER->TMR0_CTRL |= TIMER_CTRL_SINGLE_MODE;

		while ((EXT_UART->USR & UART_USR_BUSY) == UART_USR_BUSY) {
			(void) EXT_UART->O00.RBR;
		}

		uart_disable_fifo();
		__enable_fiq();

		isb();

		break;
	default:
		break;
	}

	is_stopped = false;
}
Esempio n. 3
0
void traceswo_init(void)
{
	periph_clock_enable(RCC_GPIOD);
	periph_clock_enable(TRACEUART_CLK);
	__asm__("nop"); __asm__("nop"); __asm__("nop");

	gpio_mode_setup(SWO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, SWO_PIN);
	gpio_set_af(SWO_PORT, 1, SWO_PIN); /* U2RX */

	uart_disable(TRACEUART);

	/* Setup UART parameters. */
	uart_clock_from_sysclk(TRACEUART);
	uart_set_baudrate(TRACEUART, 800000);
	uart_set_databits(TRACEUART, 8);
	uart_set_stopbits(TRACEUART, 1);
	uart_set_parity(TRACEUART, UART_PARITY_NONE);

	// Enable FIFO
	uart_enable_fifo(TRACEUART);

	// Set FIFO interrupt trigger levels to 4/8 full for RX buffer and
	// 7/8 empty (1/8 full) for TX buffer
	uart_set_fifo_trigger_levels(TRACEUART, UART_FIFO_RX_TRIG_1_2, UART_FIFO_TX_TRIG_7_8);

	uart_clear_interrupt_flag(TRACEUART, UART_INT_RX | UART_INT_RT);

	/* Enable interrupts */
	uart_enable_interrupts(TRACEUART, UART_INT_RX | UART_INT_RT);

	/* Finally enable the USART. */
	uart_enable(TRACEUART);

	nvic_set_priority(TRACEUART_IRQ, 0);
	nvic_enable_irq(TRACEUART_IRQ);

	/* Un-stall USB endpoint */
	usbd_ep_stall_set(usbdev, 0x85, 0);

	gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO3);
}
Esempio n. 4
0
int uart_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, unsigned long arg)
{
	DPRINT(cmd);
	DPRINT(arg);

#define UART_SET_BUAD_RATE	0
#define UART_ENABLE_FIFO	1

	switch (cmd)
	{
		case UART_SET_BUAD_RATE:
			uart_set_baudrate(arg);
			break;

		case UART_ENABLE_FIFO:
			uart_enable_fifo();
			break;
	}

	return 0;
}