Less intrusive DMA debug
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2281 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
5df8a7a194
commit
51b0612d65
@ -298,7 +298,7 @@ static int stm32_dmainterrupt(int irq, void *context)
|
|||||||
}
|
}
|
||||||
dmach = &g_dma[chndx];
|
dmach = &g_dma[chndx];
|
||||||
|
|
||||||
/* Get the interrupt status (for this channel only) */
|
/* Get the interrupt status (for this channel only) -- not currently used */
|
||||||
|
|
||||||
isr = dmabase_getreg(dmach, STM32_DMA_ISR_OFFSET) & DMA_ISR_CHAN_MASK(dmach->chan);
|
isr = dmabase_getreg(dmach, STM32_DMA_ISR_OFFSET) & DMA_ISR_CHAN_MASK(dmach->chan);
|
||||||
|
|
||||||
@ -531,10 +531,29 @@ void stm32_dmastart(DMA_HANDLE handle, dma_callback_t callback, void *arg, boole
|
|||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: stm32_dmadump
|
* Name: stm32_dmastop
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Dump DMA register contents
|
* Cancel the DMA. After stm32_dmastop() is called, the DMA channel is
|
||||||
|
* reset and stm32_dmasetup() must be called before stm32_dmastart() can be
|
||||||
|
* called again
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void stm32_dmastop(DMA_HANDLE handle)
|
||||||
|
{
|
||||||
|
struct stm32_dma_s *dmach = (struct stm32_dma_s *)handle;
|
||||||
|
stm32_dmachandisable(dmach);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_dmasample
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Sample DMA register contents
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* - DMA handle allocated by stm32_dmachannel()
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
@ -542,31 +561,45 @@ void stm32_dmastart(DMA_HANDLE handle, dma_callback_t callback, void *arg, boole
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_DMA
|
#ifdef CONFIG_DEBUG_DMA
|
||||||
void stm32_dmadump(DMA_HANDLE handle, const char *msg)
|
void stm32_dmasample(DMA_HANDLE handle, struct stm32_dmaregs_s *regs)
|
||||||
{
|
{
|
||||||
struct stm32_dma_s *dmach = (struct stm32_dma_s *)handle;
|
struct stm32_dma_s *dmach = (struct stm32_dma_s *)handle;
|
||||||
uint32 dmabase = DMA_BASE(dmach->base);
|
|
||||||
irqstate_t flags;
|
irqstate_t flags;
|
||||||
uint32 addr;
|
|
||||||
|
|
||||||
dmalldbg("%s: base: %08x Channel base: %08x \n", msg, dmabase, dmach->base);
|
flags = irqsave();
|
||||||
|
regs->isr = dmabase_getreg(dmach, STM32_DMA_ISR_OFFSET);
|
||||||
flags = irqsave();
|
regs->ccr = dmachan_getreg(dmach, STM32_DMACHAN_CCR_OFFSET);
|
||||||
addr = dmabase + STM32_DMA_ISR_OFFSET;
|
regs->cndtr = dmachan_getreg(dmach, STM32_DMACHAN_CNDTR_OFFSET);
|
||||||
dmalldbg(" ISRC[%08x]: %08x\n", addr, getreg32(addr));
|
regs->cpar = dmachan_getreg(dmach, STM32_DMACHAN_CPAR_OFFSET);
|
||||||
|
regs->cmar = dmachan_getreg(dmach, STM32_DMACHAN_CMAR_OFFSET);
|
||||||
addr = dmach->base + STM32_DMACHAN_CCR_OFFSET;
|
|
||||||
dmalldbg(" CCR[%08x]: %08x\n", addr, getreg32(addr));
|
|
||||||
|
|
||||||
addr = dmach->base + STM32_DMACHAN_CNDTR_OFFSET;
|
|
||||||
dmalldbg(" CNDTR[%08x]: %08x\n", addr, getreg32(addr));
|
|
||||||
|
|
||||||
addr = dmach->base + STM32_DMACHAN_CPAR_OFFSET;
|
|
||||||
dmalldbg(" CPAR[%08x]: %08x\n", addr, getreg32(addr));
|
|
||||||
|
|
||||||
addr = dmach->base + STM32_DMACHAN_CMAR_OFFSET;
|
|
||||||
dmalldbg(" CMAR[%08x]: %08x\n", addr, getreg32(addr));
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_dmadump
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Dump previously sampled DMA register contents
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_DMA
|
||||||
|
void stm32_dmadump(DMA_HANDLE handle, const struct stm32_dmaregs_s *regs,
|
||||||
|
const char *msg)
|
||||||
|
{
|
||||||
|
struct stm32_dma_s *dmach = (struct stm32_dma_s *)handle;
|
||||||
|
uint32 dmabase = DMA_BASE(dmach->base);
|
||||||
|
|
||||||
|
dmadbg("%s: base: %08x Channel base: %08x \n", msg, dmabase, dmach->base);
|
||||||
|
dmadbg(" ISRC[%08x]: %08x\n", dmabase + STM32_DMA_ISR_OFFSET, regs->isr);
|
||||||
|
dmadbg(" CCR[%08x]: %08x\n", dmach->base + STM32_DMACHAN_CCR_OFFSET, regs->ccr);
|
||||||
|
dmadbg(" CNDTR[%08x]: %08x\n", dmach->base + STM32_DMACHAN_CNDTR_OFFSET, regs->cndtr);
|
||||||
|
dmadbg(" CPAR[%08x]: %08x\n", dmach->base + STM32_DMACHAN_CPAR_OFFSET, regs->cpar);
|
||||||
|
dmadbg(" CMAR[%08x]: %08x\n", dmach->base + STM32_DMACHAN_CMAR_OFFSET, regs->cmar);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -176,6 +176,17 @@
|
|||||||
typedef FAR void *DMA_HANDLE;
|
typedef FAR void *DMA_HANDLE;
|
||||||
typedef void (*dma_callback_t)(DMA_HANDLE handle, ubyte isr, void *arg);
|
typedef void (*dma_callback_t)(DMA_HANDLE handle, ubyte isr, void *arg);
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_DMA
|
||||||
|
struct stm32_dmaregs_s
|
||||||
|
{
|
||||||
|
uint32 isr;
|
||||||
|
uint32 ccr;
|
||||||
|
uint32 cndtr;
|
||||||
|
uint32 cpar;
|
||||||
|
uint32 cmar;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Inline Functions
|
* Inline Functions
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
@ -353,10 +364,25 @@ EXTERN void stm32_dmastart(DMA_HANDLE handle, dma_callback_t callback,
|
|||||||
void *arg, boolean half);
|
void *arg, boolean half);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: stm32_dmadump
|
* Name: stm32_dmastop
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Dump DMA register contents
|
* Cancel the DMA. After stm32_dmastop() is called, the DMA channel is
|
||||||
|
* reset and stm32_dmasetup() must be called before stm32_dmastart() can be
|
||||||
|
* called again
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
EXTERN void stm32_dmastop(DMA_HANDLE handle);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_dmasample
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Sample DMA register contents
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* - DMA handle allocated by stm32_dmachannel()
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
@ -364,9 +390,27 @@ EXTERN void stm32_dmastart(DMA_HANDLE handle, dma_callback_t callback,
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_DMA
|
#ifdef CONFIG_DEBUG_DMA
|
||||||
EXTERN void stm32_dmadump(DMA_HANDLE handle, const char *msg);
|
EXTERN void stm32_dmasample(DMA_HANDLE handle, struct stm32_dmaregs_s *regs);
|
||||||
#else
|
#else
|
||||||
# define stm32_dmadump(handle)
|
# define stm32_dmasample(handle,regs)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_dmadump
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Dump previously sampled DMA register contents
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
* - DMA handle allocated by stm32_dmachannel()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_DMA
|
||||||
|
EXTERN void stm32_dmadump(DMA_HANDLE handle, const struct stm32_dmaregs_s *regs,
|
||||||
|
const char *msg);
|
||||||
|
#else
|
||||||
|
# define stm32_dmadump(handle,regs,msg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user