TI中文支持网
TI专业的中文技术问题搜集分享网站

McBSP程序在线调试程序数据正确,BOOT后无法读取到IPRH发送成功标志位

    在我们自己开发的板子上出现标题所述现象,于是换6657开发板尝试,发现出现了同样的现象。

    问题描述:

    0、使用McBSP发送数据(暂时未连接接收数据的DSP),通过控制开发板上的LED灯来指示BOOT后McBSP是否在不停的发送数据。main()函数如下所示:

void main()
{
	int	i, c = 0, d = 3, v;

	(void) platform_led(0, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
	(void) platform_led(1, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
	(void) platform_led(2, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
	(void) platform_led(3, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);

	while(1)
	{
		// Initial the McBSP registers
		EDMAInit_McBSP();
		McBSP_intc_setup();
		mcbsp_init(McBSP_TO_DSP2,199,1);

		RESET_BIT(McBSP_SPCR(McBSP_TO_DSP2), FRST);
		RESET_BIT(McBSP_SPCR(McBSP_TO_DSP2), GRST);
		RESET_BIT(McBSP_SPCR(McBSP_TO_DSP2), XRST);

		for(i = 0; i < BUFFER_SIZE; ++i)
			McBSP_src[i] = i;
		/* add algorithm here */
		for(i = 0; i < 500000; ++i);
		SET_BIT(McBSP_SPCR(McBSP_TO_DSP2), FRST);
		SET_BIT(McBSP_SPCR(McBSP_TO_DSP2), GRST);
		SET_BIT(McBSP_SPCR(McBSP_TO_DSP2), XRST);
		while(!(SendFlag == 1));
		SendFlag = 0;
		RESET_BIT(McBSP_SPCR(McBSP_TO_DSP2), XRST);
		v = c;
		(void) platform_led(v, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
		for(i = 0; i < 500000; ++i);
		(void) platform_led(v, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
		++c;
		--d;
		if(c == 4)
			c = 0;
		if(d == -1)
			d = 3;
	}
}

    1、上电后第一次在线调试LED灯正常,McBSP不停的发送数据,程序正常运行;

    2、CCS中停止程序,重新debug,重复2到3次后程序卡死在循环等待发送成功标志的语句(经测试,可以进入EDMA中断,即无法读取到IPRH发送成功标志位处),代码如下所示:

void EDMA_isr()
{......
	if(GET_BIT(IPRH,McBSPx_EDMA_Ch[McBSP_TO_DSP2]-32))	//发送给DSP2的处理结果
	{
		REG_WRITE(ICRH,1<<5);
		SendFlag = 1;
	}......
}

    3、使用SPI直接BOOT,无法看到LED闪烁,链接板子,可以看到代码停止到循环等待发送成功标志的语句,与2中所述现象相同;

    4、BOOT程序停止在循环等待发送成功标志的语句后,重新对程序进行在线调试,程序仍然停止在循环等待发送成功标志的语句,与上述现象相同;

    5、每次程序停止在循环等待发送成功标志的语句后,再次在线debug工程,McBSP均无法发送数据,与上述程序相同,使用CCS的SYSTEM RESET后,重新Load Program,首次在线调试LED灯正常,McBSP不停的发送数据,程序正常运行,后续现象同2。

    希望论坛的高手和工作人员可以指点迷津。。谢谢了!

    附,McBSP的发送通道EDMA配置:

myParamSetupMcBSP0Trans.option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS, \CSL_EDMA3_TCCH_DIS, \CSL_EDMA3_ITCINT_EN, \CSL_EDMA3_TCINT_EN,\CSL_EDMA3CC2_XEVT0_MCBSP_A,\CSL_EDMA3_TCC_NORMAL,\CSL_EDMA3_FIFOWIDTH_NONE, \CSL_EDMA3_STATIC_DIS, \CSL_EDMA3_SYNC_A, \CSL_EDMA3_ADDRMODE_INCR, \CSL_EDMA3_ADDRMODE_INCR);
Jane Lu:

Xu,

          出问题时候,能在EDMA中断中看一下IPRH和IPR的值吗?看一下是否是其他事件触发了EDMA 中断? 另外,EDMA,MCBSP, Int的初始化代码中有没有先把事件寄存器,错误寄存器等清零?  论坛上K1 STK软件包的KeyStone_common.c文件中有EDMA的初始化例子可以参考。 您可以把串口的初始化代码发上来我们检查一下。

skysteed:

你好 能否分享下你的mcbsp例程?谢了!邮箱43854061@qq.com

赞(0)
未经允许不得转载:TI中文支持网 » McBSP程序在线调试程序数据正确,BOOT后无法读取到IPRH发送成功标志位
分享到: 更多 (0)