MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _serial_dma_tx

Function _serial_dma_tx

components/drivers/serial/dev_serial.c:580–612  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

578}
579
580rt_inline int _serial_dma_tx(struct rt_serial_device *serial, const rt_uint8_t *data, int length)
581{
582 rt_base_t level;
583 rt_err_t result;
584 struct rt_serial_tx_dma *tx_dma;
585
586 tx_dma = (struct rt_serial_tx_dma*)(serial->serial_tx);
587
588 result = rt_data_queue_push(&(tx_dma->data_queue), data, length, RT_WAITING_FOREVER);
589 if (result == RT_EOK)
590 {
591 level = rt_spin_lock_irqsave(&(serial->spinlock));
592 if (tx_dma->activated != RT_TRUE)
593 {
594 tx_dma->activated = RT_TRUE;
595 rt_spin_unlock_irqrestore(&(serial->spinlock), level);
596
597 /* make a DMA transfer */
598 serial->ops->dma_transmit(serial, (rt_uint8_t *)data, length, RT_SERIAL_DMA_TX);
599 }
600 else
601 {
602 rt_spin_unlock_irqrestore(&(serial->spinlock), level);
603 }
604
605 return length;
606 }
607 else
608 {
609 rt_set_errno(result);
610 return 0;
611 }
612}
613#endif /* RT_SERIAL_USING_DMA */
614
615/* RT-Thread Device Interface */

Callers 1

ifFunction · 0.85

Calls 4

rt_data_queue_pushFunction · 0.85
rt_set_errnoFunction · 0.85
rt_spin_lock_irqsaveFunction · 0.50

Tested by

no test coverage detected