打印

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

[复制链接]
1159|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的    参考一下

使用特权

评论回复
5
shenmu2012| | 2015-7-15 19:55 | 只看该作者
这个看下你的中断源的吧,,还有相关的中断寄存器的检查下是否配置合理。

使用特权

评论回复
6
firstblood| | 2015-7-15 22:00 | 只看该作者
这个问题的我暂时还没遇到的。。

使用特权

评论回复
7
sunnyhgh|  楼主 | 2015-7-16 08:44 | 只看该作者
zhangmangui 发表于 2015-7-14 22:18
不太确定了    你找找    DMA结合McBSP在数据采集系统中的应用设计
5402的    参考一下 ...

好的,谢谢

使用特权

评论回复
8
zhangmangui| | 2015-7-16 22:12 | 只看该作者

解决了   或者收集到的资料    还望多多分享

使用特权

评论回复
9
angerbird| | 2015-7-18 09:56 | 只看该作者
这样的问题的也看下你的硬件上的设计的吧。。

使用特权

评论回复
10
angerbird| | 2015-7-18 09:57 | 只看该作者
一般来说,若你的中断信号的驱动能力没有达到你的响应范围的,肯定是进步了中断的。

使用特权

评论回复
11
sunnyhgh|  楼主 | 2015-7-20 10:56 | 只看该作者
zhangmangui 发表于 2015-7-16 22:12
解决了   或者收集到的资料    还望多多分享

其实问题很简单,如果使用32bit的DMA发送MCBSP,那么DMA的目的地址不应该是DXR1,而是DXR2,否则将不能进行32位的发送,MDA错误。

使用特权

评论回复
12
可可球| | 2015-7-20 10:59 | 只看该作者
看看相关的中断寄存器配置对了吗

使用特权

评论回复
13
wangdezhi| | 2015-7-27 21:49 | 只看该作者
中断触发源还有吗

使用特权

评论回复
14
wangdezhi| | 2015-7-27 21:49 | 只看该作者
看看其他程序有问题吗

使用特权

评论回复
15
FireRiver9| | 2015-7-29 00:17 | 只看该作者
是不是中断标志位得清零啊

使用特权

评论回复
16
309030106| | 2015-7-29 09:33 | 只看该作者
使用32bit的DMA发送MCBSP,那么DMA的目的地址不应该是DXR1,而是DXR2,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

11

帖子

0

粉丝