Sign in

username:

password:



Not a member?

Search c6x



Search tips

Subscribe to c6x



c6x by Keywords

AD535 | BIOS | Booting | Bootloader | C621 | C6211 | C6415 | C671 | C6711 | C6711DSK | C6713 | CCS | Chassaing | COFF | DAT | DM64 | DM642 | DMA | DSK671 | DSK6711 | EDM | EDMA | EMIF | Emulator | EVM | EVM620 | FFT | FIR | GPIO | Halting | HPI | HWI | IDK | JTAG | LDB | LDH | LDW | Linker | LMS | LOG_printf | Matlab | McBSP | MEM_alloc | MIPS | PCI | PCM3003 | Pipeline | Profiling | QDM | Reset | ROM | RTDX | Sampling | SDRAM | Stack | TEB | THS1206 | TMS320C621 | TMS320C6416 | TMS320C6711 | TMS320C6713 | UART | Vector Table | XBUS | XDS560

Discussion Groups

Discussion Groups | TMS320C6x | Help:EDMA Interrupt Problem

Technical discussions about the TI C6000 DSPs (including the c62x, c64x and c67x DSPs).

  

Post a new Thread

Help:EDMA Interrupt Problem - hbd7...@yahoo.com.cn - May 7 0:28:26 2008



Hi everyone:

I am using the 6713DSK.
When I am testing the code provided by TI Application Report:TMS320C6000 McBSP UART(SPRA633B),
it runs successfully. Sending ,no problem,receiving,
no problem. But it seems that sending and receiving only perform once.when I am waiting another
datas sending from Pc,interrupt doesn't work! why?
Can it start automatically after I clear the bit in CIPR?
the Interrupt routine is as follow
<pre>
interrupt void c_int08(void)
{
	#if (EDMA_SUPPORT)
		if (EDMA_intTest(14))
		{
			EDMA_intClear(14);
			transmit_done = TRUE;
			printf("Transmit Completed\n");
		}
	
		if (EDMA_intTest(15))
		{
			EDMA_intClear(15);
			receive_done = TRUE;
			printf("Receive Completed\n\n");
		}
	#endif
}
</pre>
According to the data sheet ,
To configure the EDMA for any channel (or QDMA request) to interrupt the
CPU:
Set CIEn to ‘1’ in the CIER 
Set TCINT to ‘1’ in channel options 
Set Transfer Complete Code to n in channel options

I find that my EDMA configration is correct,but what should I do if I want to transmite and
receive arrays continuously? Any help or suggettion would be appriciated! Thanks!
------------------------------------

OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: Help:EDMA Interrupt Problem - Bernhard 'Gustl' Bauer - May 7 1:18:10 2008

Hi,

I'm using this:

	if ((EDMA_RGET(CIPR)&(0x1<<14))!=0)	{
		EDMA_RSET(CIPR,(0x1<<14));
		transmit_done1 = TRUE;
	}
	if ((EDMA_RGET(CIPR)&(0x1<<15))!=0)	{
		EDMA_RSET(CIPR,(0x1<<15));
		handle_receive1();
	}

But I think it is the same as yours.

Check if you EDMA channels are reloaded after you received the 1st byte. 
You do this by linking them with a copy of the original settings.

Have you tried sending more than one byte from DSP to PC?

HTH

Gustl
h...@yahoo.com.cn schrieb:
> Hi everyone:
> 
> I am using the 6713DSK.
> When I am testing the code provided by TI Application Report:TMS320C6000 McBSP
UART(SPRA633B), it runs successfully. Sending ,no problem,receiving,
> no problem. But it seems that sending and receiving only perform once.when I am waiting
another datas sending from Pc,interrupt doesn't work! why?
> Can it start automatically after I clear the bit in CIPR?
> the Interrupt routine is as follow
> interrupt void c_int08(void)
> {
> 	#if (EDMA_SUPPORT)
> 		if (EDMA_intTest(14))
> 		{
> 			EDMA_intClear(14);
> 			transmit_done = TRUE;
> 			printf("Transmit Completed\n");
> 		}
> 	
> 		if (EDMA_intTest(15))
> 		{
> 			EDMA_intClear(15);
> 			receive_done = TRUE;
> 			printf("Receive Completed\n\n");
> 		}
> 	#endif
> }
> According to the data sheet ,
> To configure the EDMA for any channel (or QDMA request) to interrupt the
> CPU:
> Set CIEn to â??1â?? in the CIER 
> Set TCINT to â??1â?? in channel options 
> Set Transfer Complete Code to n in channel options
> 
> I find that my EDMA configration is correct,but what should I do if I want to transmite
and receive arrays continuously? Any help or suggettion would be appriciated! Thanks!
------------------------------------

OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: Help:EDMA Interrupt Problem - hbd7...@yahoo.com.cn - May 7 7:06:37 2008

Thank you for your reply.
yes,I think your code is the same as mine,and my dsp can send more than one bytes to PC,but I
still can't figure out how to check if edma is reloaded. Could you tell me in detail?

------------------------------------

OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: Help:EDMA Interrupt Problem - hbd7...@yahoo.com.cn - May 7 7:06:49 2008


Hi everyone:
>
>I am using the 6713DSK.
>When I am testing the code provided by TI Application Report:TMS320C6000 McBSP
UART(SPRA633B), it runs successfully. Sending ,no problem,receiving,
>no problem. But it seems that sending and receiving only perform once.when I am waiting
another datas sending from Pc,interrupt doesn't work! why?
>Can it start automatically after I clear the bit in CIPR?
>the Interrupt routine is as follow
>interrupt void c_int08(void)
>{
>	#if (EDMA_SUPPORT)
>		if (EDMA_intTest(14))
>		{
>			EDMA_intClear(14);
>			transmit_done = TRUE;
>			printf("Transmit Completed\n");
>		}
>	
>		if (EDMA_intTest(15))
>		{
>			EDMA_intClear(15);
>			receive_done = TRUE;
>			printf("Receive Completed\n\n");
>		}
>	#endif
>}
>According to the data sheet ,
>To configure the EDMA for any channel (or QDMA request) to interrupt the
>CPU:
>Set CIEn to ‘1’ in the CIER 
>Set TCINT to ‘1’ in channel options 
>Set Transfer Complete Code to n in channel options
>
>I find that my EDMA configration is correct,but what should I do if I want to transmite and
receive arrays continuously? Any help or suggettion would be appriciated! Thanks!
>------------------------------------
>
>OMAP35x EVM jump-starts low-power apps
>------------------------------------
>The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start
building applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x
my edma configuration is :
	EDMA_OPT_RMK(
	 		EDMA_OPT_PRI_HIGH,		/* 1  */
	 		EDMA_OPT_ESIZE_16BIT,	        /* 01 */
    			EDMA_OPT_2DS_NO,		/* 0  */
    			EDMA_OPT_SUM_INC,		/* 01 */
    			EDMA_OPT_2DD_NO,		/* 0  */
    			EDMA_OPT_DUM_NONE,		/* 00 */
    			EDMA_OPT_TCINT_YES,		/* 1  */
    			EDMA_OPT_TCC_OF(14),	        /* 14 */
    			EDMA_OPT_LINK_NO,		/* 0  */
    			EDMA_OPT_FS_NO			/* 0  */
  			),  		
  		#endif
		
		/* SRC Setup */  		    
		EDMA_SRC_RMK((Uint32) xmitbuf),        /*xmitbuf address*/
		
		/* CNT Setup */
		EDMA_CNT_RMK(
			EDMA_CNT_FRMCNT_DEFAULT,
			EDMA_CNT_ELECNT_OF(BUFFER_SIZE*11)
		),
		
		/* DST Setup */
		EDMA_DST_RMK(MCBSP_getXmtAddr(hMcbsp1)),
		
		/* IDX Setup */
  		EDMA_IDX_RMK(0,0),
  		
  		/* RLD Setup */
  		EDMA_RLD_RMK(0,0)
		);
//////////////////////////////////////////////////////////
I found 
EDMA_RLD_RMK(0,0);
EDMA_CNT_ELECNT_OF(BUFFER_SIZE*11) buffersize=37;
Is there any element count or reload problem?

------------------------------------

OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: Re: Help:EDMA Interrupt Problem - Bernhard 'Gustl' Bauer - May 8 4:40:48 2008

Hi,

you set LINK to NO in the option register. So the EDMA transfer is 
performed just once. Either you reload you configuration manually after 
each byte you received, or you let the EDMA controller do it for you. 
Read 'Linking EDMA Transfers' in the 'EDMA Controller' section of the 
data sheet.

HTH

Gustl
h...@yahoo.com.cn schrieb:
> my edma configuration is :
> 	EDMA_OPT_RMK(
> 	 		EDMA_OPT_PRI_HIGH,		/* 1  */
> 	 		EDMA_OPT_ESIZE_16BIT,	        /* 01 */
>     			EDMA_OPT_2DS_NO,		/* 0  */
>     			EDMA_OPT_SUM_INC,		/* 01 */
>     			EDMA_OPT_2DD_NO,		/* 0  */
>     			EDMA_OPT_DUM_NONE,		/* 00 */
>     			EDMA_OPT_TCINT_YES,		/* 1  */
>     			EDMA_OPT_TCC_OF(14),	        /* 14 */
>     			EDMA_OPT_LINK_NO,		/* 0  */
>     			EDMA_OPT_FS_NO			/* 0  */
>   			),  		
>   		#endif
> 		
> 		/* SRC Setup */  		    
> 		EDMA_SRC_RMK((Uint32) xmitbuf),        /*xmitbuf address*/
> 		
> 		/* CNT Setup */
> 		EDMA_CNT_RMK(
> 			EDMA_CNT_FRMCNT_DEFAULT,
> 			EDMA_CNT_ELECNT_OF(BUFFER_SIZE*11)
> 		),
> 		
> 		/* DST Setup */
> 		EDMA_DST_RMK(MCBSP_getXmtAddr(hMcbsp1)),
> 		
> 		/* IDX Setup */
>   		EDMA_IDX_RMK(0,0),
>   		
>   		/* RLD Setup */
>   		EDMA_RLD_RMK(0,0)
> 		);
> //////////////////////////////////////////////////////////
> I found 
> EDMA_RLD_RMK(0,0);
> EDMA_CNT_ELECNT_OF(BUFFER_SIZE*11) buffersize=37;
> Is there any element count or reload problem?
------------------------------------

OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )