37 lines
826 B
C++
37 lines
826 B
C++
/*
|
|
* llmemcpydma.cpp
|
|
*
|
|
* Created on: Nov 4, 2019
|
|
* Author: abody
|
|
*/
|
|
|
|
#include <ll_memcpydma.h>
|
|
|
|
namespace f4ll {
|
|
|
|
LL_MemcpyDma::LL_MemcpyDma(DMA_TypeDef *dma, uint32_t stream)
|
|
: LL_DmaHelper(dma, stream)
|
|
{
|
|
LL_DMA_EnableIT_TC(dma, stream);
|
|
}
|
|
|
|
void* LL_MemcpyDma::Copy(void *dst, void const *src, uint16_t length)
|
|
{
|
|
LL_DMA_SetM2MSrcAddress(GetDma(), GetStream(), (uint32_t)src);
|
|
LL_DMA_SetM2MDstAddress(GetDma(), GetStream(), (uint32_t)dst);
|
|
LL_DMA_SetDataLength(GetDma(), GetStream(), (length+3)/4 );
|
|
m_busy = 1;
|
|
LL_DMA_EnableStream(GetDma(), GetStream());
|
|
while(m_busy);
|
|
return dst;
|
|
}
|
|
|
|
void LL_MemcpyDma::DmaTransferCompleted()
|
|
{
|
|
if(*GetIsReg() & GetTcMask()) { // DMA transfer complete
|
|
*GetIfcReg() = GetTcMask();
|
|
LL_DMA_DisableStream(GetDma(), GetStream());
|
|
m_busy = 0;
|
|
}
|
|
}
|
|
} /* namespace f4ll */
|