TI VC5509A 用DMA向MCBSP0发送时只进入一次FRAME中断,然后再也不进入中断了?

[复制链接]
1602|15
 楼主| sunnyhgh 发表于 2015-7-13 10:43 | 显示全部楼层 |阅读模式
芯片是VC5509A ,用DMA向MCBSP0发送时,只有在仿真开始的时候进入一次中断,然后再也没有进入过,很奇怪!

//DMA发送部分:

/* Create DMA Receive Side Configuration */
DMA_Config dmaConfig3 = {
DMA_DMACSDP_RMK(
DMA_DMACSDP_DSTBEN_NOBURST,
DMA_DMACSDP_DSTPACK_OFF,
DMA_DMACSDP_DST_PERIPH,
DMA_DMACSDP_SRCBEN_NOBURST,
DMA_DMACSDP_SRCPACK_OFF,
DMA_DMACSDP_SRC_DARAM,
DMA_DMACSDP_DATATYPE_32BIT//一个element有4个byte
), /* DMACSDP */
DMA_DMACCR_RMK(
DMA_DMACCR_DSTAMODE_CONST,
DMA_DMACCR_SRCAMODE_POSTINC,
DMA_DMACCR_ENDPROG_ON,
DMA_DMACCR_REPEAT_ON,
DMA_DMACCR_AUTOINIT_ON,
DMA_DMACCR_EN_STOP,
DMA_DMACCR_PRIO_LOW,
DMA_DMACCR_FS_FRAME,
DMA_DMACCR_SYNC_XEVT0
), /* DMACCR */
DMA_DMACICR_RMK(
DMA_DMACICR_BLOCKIE_OFF,
DMA_DMACICR_LASTIE_OFF,
DMA_DMACICR_FRAMEIE_ON,
DMA_DMACICR_FIRSTHALFIE_OFF,
DMA_DMACICR_DROPIE_OFF,
DMA_DMACICR_TIMEOUTIE_OFF
), /* DMACICR */
0, /* DMACSSAL */
0, /* DMACSSAU */
0, /* DMACDSAL */
0, /* DMACDSAU */
Mcbsp1N, /* DMACEN */// 一个fram有N 个32bit的element
1, /* DMACFN *///一个block有1个fram
0, /* DMACFI */
0, /* DMACEI */
};

//中断函数

volatile Uint16 csr;
//---------Function prototypes---------
interrupt void DMA3Isr(void)
{
csr=DMA_RGETH(mhDma3,DMACSR);
}
#endif

void DMAtaskFxn(void);

#pragma DATA_SECTION(XmtPort,"dmaMem")
Uint32 XmtPort[Mcbsp1N];

void CS4351DMAtaskFxn(void)
{

Uint16 srcAddrHi, srcAddrLo;
Uint16 dstAddrHi, dstAddrLo;

Data32Set(XmtPort,0,Mcbsp1N);

/* By default, the TMS320C55xx compiler assigns all data symbols word */
/* addresses. The DMA however, expects all addresses to be byte */
/* addresses. Therefore, we must shift the address by 2 in order to */
/* change the word address to a byte address for the DMA transfer. */
hMcbsp0 = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);

dstAddrHi = (Uint16)(((Uint32)(MCBSP_ADDR_H(hMcbsp0,DXR1))) >> 15) & 0xFFFFu;
dstAddrLo = (Uint16)(((Uint32)(MCBSP_ADDR_H(hMcbsp0,DXR1))) << 1) & 0xFFFFu;
srcAddrHi = (Uint16)(((Uint32)(&XmtPort)) >> 15) & 0xFFFFu;
srcAddrLo = (Uint16)(((Uint32)(&XmtPort)) << 1) & 0xFFFFu;

dmaConfig3.dmacssal = (DMA_AdrPtr)srcAddrLo;
dmaConfig3.dmacssau = srcAddrHi;
dmaConfig3.dmacdsal = (DMA_AdrPtr)dstAddrLo;
dmaConfig3.dmacdsau = dstAddrHi;

mhDma3 = DMA_open(DMA_CHA3,DMA_OPEN_RESET);
DMA3xmtEventId = DMA_getEventId( mhDma3 );
IRQ_clear(DMA3xmtEventId);
IRQ_enable(DMA3xmtEventId);
IRQ_plug(DMA3xmtEventId,&DMA3Isr);
MCBSP_config(hMcbsp0, &Mcbsp_config0);
DMA_config(mhDma3,&dmaConfig3);
delay_ms(1);
MCBSP_start(hMcbsp0, MCBSP_SRGR_START|MCBSP_XMIT_START|MCBSP_SRGR_FRAMESYNC,0X300U);

/* Prime MCBSP DXR */
while (!(MCBSP_xrdy(hMcbsp0))){
;
}
MCBSP_write32(hMcbsp0,XmtPort[0]);

DMA_start(mhDma3);


DMA_getConfig(mhDma3,&dmaTESTConfig3);

}
zhangmangui 发表于 2015-7-13 22:12 | 显示全部楼层
这种情况   你要确认一下    相关外设的时钟配置是否合理    是否使能
 楼主| sunnyhgh 发表于 2015-7-14 15:14 | 显示全部楼层
zhangmangui 发表于 2015-7-13 22:12
这种情况   你要确认一下    相关外设的时钟配置是否合理    是否使能

外设时钟是正常的,在不用DMA发送时,都能发送正确的数据,DAC输出正常。
后来我将DMA的32位数据更改为16位数据,并将帧的大小改为待发送数组的大小之两倍即可。
但是不明白为什么32位写MCBSP确不能正常工作?
zhangmangui 发表于 2015-7-14 22:18 | 显示全部楼层
sunnyhgh 发表于 2015-7-14 15:14
外设时钟是正常的,在不用DMA发送时,都能发送正确的数据,DAC输出正常。
后来我将DMA的32位数据更改为16 ...

不太确定了    你找找    DMA结合McBSP在数据采集系统中的应用设计
5402的    参考一下
shenmu2012 发表于 2015-7-15 19:55 | 显示全部楼层
这个看下你的中断源的吧,,还有相关的中断寄存器的检查下是否配置合理。
firstblood 发表于 2015-7-15 22:00 | 显示全部楼层
这个问题的我暂时还没遇到的。。
 楼主| sunnyhgh 发表于 2015-7-16 08:44 | 显示全部楼层
zhangmangui 发表于 2015-7-14 22:18
不太确定了    你找找    DMA结合McBSP在数据采集系统中的应用设计
5402的    参考一下 ...

好的,谢谢
zhangmangui 发表于 2015-7-16 22:12 | 显示全部楼层

解决了   或者收集到的资料    还望多多分享
angerbird 发表于 2015-7-18 09:56 | 显示全部楼层
这样的问题的也看下你的硬件上的设计的吧。。
angerbird 发表于 2015-7-18 09:57 | 显示全部楼层
一般来说,若你的中断信号的驱动能力没有达到你的响应范围的,肯定是进步了中断的。
 楼主| sunnyhgh 发表于 2015-7-20 10:56 | 显示全部楼层
zhangmangui 发表于 2015-7-16 22:12
解决了   或者收集到的资料    还望多多分享

其实问题很简单,如果使用32bit的DMA发送MCBSP,那么DMA的目的地址不应该是DXR1,而是DXR2,否则将不能进行32位的发送,MDA错误。
可可球 发表于 2015-7-20 10:59 | 显示全部楼层
看看相关的中断寄存器配置对了吗
wangdezhi 发表于 2015-7-27 21:49 | 显示全部楼层
中断触发源还有吗
wangdezhi 发表于 2015-7-27 21:49 | 显示全部楼层
看看其他程序有问题吗
FireRiver9 发表于 2015-7-29 00:17 | 显示全部楼层
是不是中断标志位得清零啊
309030106 发表于 2015-7-29 09:33 | 显示全部楼层
使用32bit的DMA发送MCBSP,那么DMA的目的地址不应该是DXR1,而是DXR2,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部