Reply by Jeff Brower March 8, 20102010-03-08
Richard-

> we had a desighn working on the 6711b but have changed to c6711d. we are using a osc at 100 mhz for dsp and 50 mhz
> for emif. clkout therefore is at 50mhz. we have programmed to bypass the pll, both with gel and on the source code,
> have checked the correct pins on scope and correct frequenices are there, have also checked the register values and
> are as expected.

You're using separate clocks for DSP and EMIF? Why? Did you do this on the C6711B design, or is this a change?

-Jeff

> we are using a x560 emulator to debug our hardware. we have tried the many suggestions from the replies. but we find
> that when debugging when we enter values into memory locations through ccs the values are corrupted usually in the
> upper 8 bits. how could a problem with pll cause such a problem? unfortunately we are not hardware guys and have a
> urgent deadline...
>
> cheers
> richard
>
> hi
>>
>>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1.
>> We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor
>> appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code
>> and and asm generated under the view-> mixed asm option we get:
>>
>>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>>800033D4 1AA43D11 .word 0X1aa43d11
>>800033D8 BFEA3656 .word 0Xbfea3656
>>800033Dc BBE911D2 .word 0Xbbe911d2
>>
>>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We
>> are loading our program into external ram at starting at address 0x800...
>>
>>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded
>> correctly into our external SRAM?
>>
>>thanks
>>Richard

_____________________________________
Reply by Jeff Brower March 8, 20102010-03-08
Richard-

> we had a desighn working on the 6711b but have changed to c6711d. we are using a osc at 100 mhz for dsp and 50 mhz
> for emif. clkout therefore is at 50mhz. we have programmed to bypass the pll, both with gel and on the source code,
> have checked the correct pins on scope and correct frequenices are there, have also checked the register values and
> are as expected.

You're using separate clocks for DSP and EMIF? Why? Did you do this on the C6711B design, or is this a change?

-Jeff

> we are using a x560 emulator to debug our hardware. we have tried the many suggestions from the replies. but we find
> that when debugging when we enter values into memory locations through ccs the values are corrupted usually in the
> upper 8 bits. how could a problem with pll cause such a problem? unfortunately we are not hardware guys and have a
> urgent deadline...
>
> cheers
> richard
>
> hi
>>
>>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1.
>> We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor
>> appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code
>> and and asm generated under the view-> mixed asm option we get:
>>
>>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>>800033D4 1AA43D11 .word 0X1aa43d11
>>800033D8 BFEA3656 .word 0Xbfea3656
>>800033Dc BBE911D2 .word 0Xbbe911d2
>>
>>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We
>> are loading our program into external ram at starting at address 0x800...
>>
>>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded
>> correctly into our external SRAM?
>>
>>thanks
>>Richard

_____________________________________
Reply by Richard Williams March 8, 20102010-03-08
Richard,

All sdram memory takes a certain amount of time for the address to settle, the data to be written, etc.
Most of the time, the CPU is running at a far faster speed than the memory can actually handle.
This speed difference is compensated for by inserting wait states in the SDRAM read and write cycles.
Since you have not indicated that your code is modifying the default wait state values, and you are by-passing the PLL (which limits and stabilizes the actual CPU clock rates)
I suspect the SDRAM needs more wait states added, perhaps both in the read and write cycles.

Is there anything in the errata for the 6711a and 6711d that would have any effect on the external memory I/O communications and/or on the communications with the x560 emulator?

If all that was done was a chip swap between the working system and the failing system, then it has to be because of the differences between the two chips (and the errors in the chips, as outlined in the errata.

R. Williams

---------- Original Message -----------
From: r...@gmail.com
To: c...
Sent: Mon, 08 Mar 2010 07:56:05 -0500
Subject: [c6x] Re: 6711D memory load

>
>
> hi
>
> we had a desighn working on the 6711b but have changed to c6711d. we are using a osc at 100 mhz for dsp and 50 mhz for emif. clkout therefore is at 50mhz. we have programmed to bypass the pll, both with gel and on the source code, have checked the correct pins on scope and correct frequenices are there, have also checked the register values and are as expected.
>
> we are using a x560 emulator to debug our hardware. we have tried the many suggestions from the replies. but we find that when debugging when we enter values into memory locations through ccs the values are corrupted usually in the upper 8 bits. how could a problem with pll cause such a problem? unfortunately we are not hardware guys and have a urgent deadline...
>
> cheers
> richard
>
> hi
> >
> >we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
> >
> >*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
> >800033D4 1AA43D11 .word 0X1aa43d11
> >800033D8 BFEA3656 .word 0Xbfea3656
> >800033Dc BBE911D2 .word 0Xbbe911d2
> >
> >we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
> >
> >why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
> >
> >thanks
> >Richard
> >
> >_____________________________________
> >
> >
------- End of Original Message -------
Reply by rjed...@gmail.com March 8, 20102010-03-08
hi

we had a desighn working on the 6711b but have changed to c6711d. we are using a osc at 100 mhz for dsp and 50 mhz for emif. clkout therefore is at 50mhz. we have programmed to bypass the pll, both with gel and on the source code, have checked the correct pins on scope and correct frequenices are there, have also checked the register values and are as expected.

we are using a x560 emulator to debug our hardware. we have tried the many suggestions from the replies. but we find that when debugging when we enter values into memory locations through ccs the values are corrupted usually in the upper 8 bits. how could a problem with pll cause such a problem? unfortunately we are not hardware guys and have a urgent deadline...

cheers
richard

hi
>
>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
>
>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>800033D4 1AA43D11 .word 0X1aa43d11
>800033D8 BFEA3656 .word 0Xbfea3656
>800033Dc BBE911D2 .word 0Xbbe911d2
>
>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
>
>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
>
>thanks
>Richard
>
>_____________________________________

_____________________________________
Reply by Jeff Brower March 7, 20102010-03-07
Richard-

> the map file seems fine. we originally developed the device
> using the c6711b but switched to c6711d. the main
> difference is the PLL in the 6711d.
>
> when try to write to memory through ccs, for example, selecting
> a variable in our code, eg NUM = 1 (set in code), when
> displayed in watch window value is something like 0xff000067.
> if we write a different value to NUM such as 2 it does
> not change to that value.
>
> basically it appears that random values appear where code and
> data should be placed. any suggestions?

Sounds like you *had* a nice, working board based on C6711B from 2002 or so time-frame. Is that correct?

What is your CLKOUT value? Most C6711 designs run the SDRAM clock from one of the CLKOUT pins so this would be a
really key thing to measure. Seems to me you didn't check it yet...

As a general note, from a hardware perspective PLL is one of a few major, significant changes from C6711B to C6711D.
It looks to me like you guys need to zoom in on your hardware differences, not software.

-Jeff

>>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1.
>> We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor
>> appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code
>> and and asm generated under the view-> mixed asm option we get:
>>
>>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>>800033D4 1AA43D11 .word 0X1aa43d11
>>800033D8 BFEA3656 .word 0Xbfea3656
>>800033Dc BBE911D2 .word 0Xbbe911d2
>>
>>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We
>> are loading our program into external ram at starting at address 0x800...
>>
>>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded
>> correctly into our external SRAM?
>>
>>thanks
>>Richard

_____________________________________
Reply by Richard Williams March 7, 20102010-03-07
Michael,

Given RJs post, I was under the impression that he did try using the CCS to ascertain the problem and found that a write to an address did not return the same value written.

(the 'crawl' step)

My initial thinking was that RJ is using a commercial board, probably from TI or Spectrum Digital.
If they are using a 'homemade' board, then the probability of a hardware problem is greatly increased.

My later thinking is the project is being run on an emulator rather than actual target hardware.

To me, the original message indicated a problem with linking. (load the program, then the contents of RAM not being as expected.) I have seen this problem over and over where a person, new to CCS, has an error in the .cmd file or is using the wrong CCS startup GEL or has the incorrect processor selected in CCS.

I'm looking forward to more detailed info from RJ to clarify certain aspects of the problem, such as who made the target hardware, how experienced RJ is with CCS and more detail info, such as: boot mode of the target and was the target re-booted after the memory load.

I also think that something has drastically changed between the original RJ post and the latest post.
Because the original post did not show 'ff' in the high order 8 bits of the data.

Given that the original post displayed raw RAM data rather than any 'dis-assembly'; this says to me that RJ is not experienced with the CCS tool. This may indicate a need for a bit of 'hand holding' when assisting RJ in his debug activities.

Also of interest is the method being used for the startup sequence. For instance, which startup file is linked and which method of startup sequence is selected in the build options and (if the 6711 has the capability) does the Endianess match the boot mode of the target hardware.

Hopefully, RJ will either find the solution on his own (and give us feedback) or will be providing the details needed so we can be of significant assistance via email.

BTW:
My background is mostly software, so when a hardware problem looms, I usually call in the hardware guys and we debug it together.

R. Williams

---------- Original Message -----------
From: Michael Dunn
To: Richard Williams
Cc: r...@gmail.com, c...
Sent: Sat, 6 Mar 2010 22:22:15 -0600
Subject: Re: [c6x] Re: 6711D memory load

>
>
> rjedwards,
>
> Please forgive me while I digress and then rant a bit.
> 1. There is a common thread in solving multiple equations with multiple unknowns and troubleshooting [or assisting someone]. You can guess at answers or you can systematically solve [or troubleshoot] for some of the variable values.
> 2. I provided some info and questions to you 2 days ago. You apparently ignored them or tried them and kept the results secret. Either case is not very smart.
>
> Some of us have designed dozens of products and solved 1000s of problems [literally] during our careers. I will again share some advice [you should still refer to my original comments].
>
> For new or revised products you should [1] crawl, then [2] walk, and then [3] run.
>
> I infer from your comments that the hardware has not been completely checked out. Your own post seems to question the robustness of SDRAM.
> STOP trying to troubleshoot an application on hardware that 'may or may not' have working SDRAM.
> 1. crawl - verify memory manually with CCS
> 2. walk - write a simple program. Generate asm listings. Load the program into SDRAM. Verify the contents of SDRAM. Single step the program and verify correct functionality. Run the program and verify correct functionality.
> NOTE: 'Hello World' is NOT a simple program due to stdio. A simple program that stores a few constants in memory and reads them back is a good start.
> 3. run - Create and load a simple subset of your app. Verify functionality and and repeat the process of adding functionality and verifying.
>
> Let us know what you have done and the results. If your problem is not solved, we will have more 'knowns' and it will be easier to home in on the unknowns.
>
> mikedunn
>
> On Sat, Mar 6, 2010 at 1:21 PM, Richard Williams wrote:
>
>
>
> richard,
>
> Here are my suggestions..
> (guesses actually, based on your description of the problem)
> the external RAM is faulty
> the external RAM does not have all the data bits connected.
> the bus receiver/transmitter driver chip for the upper 8 bits is faulty.
> the communication bus is set for less than 32 bits.
> the number of wait states for either the read or the write operation is set too low.
> the data addressing is set for 'near' rather than 'far'.
>
> R. Williams
>
> ---------- Original Message -----------
> From: r...@gmail.com
> To: c...
>
> Sent: Sat, 06 Mar 2010 11:39:17 -0500
> Subject: [c6x] Re: 6711D memory load
>
> >
> >
> > hello again,
> >
> > when loading in data, it is all preceded by 0xff, for example 0x11111111 becomes 0xff111111, so seems highest 8 bits are always saturated. any suggestions?
> >
> > thanks
> > richard
> >
> > hi
> > >
> > >we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
> > >
> > >*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
> > >800033D4 1AA43D11 .word 0X1aa43d11
> > >800033D8 BFEA3656 .word 0Xbfea3656
> > >800033Dc BBE911D2 .word 0Xbbe911d2
> > >
> > >we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
> > >
> > >why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
> > >
> > >thanks
> > >Richard
> --
> www.dsprelated.com/blogs-1/nf/Mike_Dunn.php
------- End of Original Message -------
Reply by Michael Dunn March 7, 20102010-03-07
rjedwards,

Please forgive me while I digress and then rant a bit.
1. There is a common thread in solving multiple equations with multiple
unknowns and troubleshooting [or assisting someone]. You can guess at
answers or you can systematically solve [or troubleshoot] for some of the
variable values.
2. I provided some info and questions to you 2 days ago. You apparently
ignored them or tried them and kept the results secret. Either case is not
very smart.

Some of us have designed dozens of products and solved 1000s of problems
[literally] during our careers. I will again share some advice [you should
still refer to my original comments].

For new or revised products you should [1] crawl, then [2] walk, and then
[3] run.

I infer from your comments that the hardware has not been completely checked
out. Your own post seems to question the robustness of SDRAM.
STOP trying to troubleshoot an application on hardware that 'may or may not'
have working SDRAM.
1. crawl - verify memory manually with CCS
2. walk - write a simple program. Generate asm listings. Load the program
into SDRAM. Verify the contents of SDRAM. Single step the program and
verify correct functionality. Run the program and verify correct
functionality.
NOTE: 'Hello World' is NOT a simple program due to stdio. A simple program
that stores a few constants in memory and reads them back is a good start.
3. run - Create and load a simple subset of your app. Verify functionality
and and repeat the process of adding functionality and verifying.

Let us know what you have done and the results. If your problem is not
solved, we will have more 'knowns' and it will be easier to home in on the
unknowns.

mikedunn

On Sat, Mar 6, 2010 at 1:21 PM, Richard Williams wrote:

> richard,
>
> Here are my suggestions..
> (guesses actually, based on your description of the problem)
> the external RAM is faulty
> the external RAM does not have all the data bits connected.
> the bus receiver/transmitter driver chip for the upper 8 bits is faulty.
> the communication bus is set for less than 32 bits.
> the number of wait states for either the read or the write operation is set
> too low.
> the data addressing is set for 'near' rather than 'far'.
>
> R. Williams
>
> *---------- Original Message -----------*
> From: r...@gmail.com
> To: c...
> Sent: Sat, 06 Mar 2010 11:39:17 -0500
> Subject: [c6x] Re: 6711D memory load
>
> >
> >
> > hello again,
> >
> > when loading in data, it is all preceded by 0xff, for example 0x11111111
> becomes 0xff111111, so seems highest 8 bits are always saturated. any
> suggestions?
> >
> > thanks
> > richard
> >
> > hi
> > >
> > >we have developed an audio application based around the c6711 D dsp. We
> are using the XDS560 emulator and ccs 2.1. We can successfully load the
> program onto the audio device through load program on ccs. and when loaded
> the cursor appears at c_int00. But when the program is run it just goes to a
> series of nops. When we look at the our c code and and asm generated under
> the view-> mixed asm option we get:
> > >
> > >*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this
> instruction by ccs below*/
> > >800033D4 1AA43D11 .word 0X1aa43d11
> > >800033D8 BFEA3656 .word 0Xbfea3656
> > >800033Dc BBE911D2 .word 0Xbbe911d2
> > >
> > >we can see from above that the TI generated assembler commands are
> missing and just words at the memory locations We are loading our program
> into external ram at starting at address 0x800...
> > >
> > >why cannot we see the underlying assembler? is there something wrong in
> our EMIF so the program is not loaded correctly into our external SRAM?
> > >
> > >thanks
> > >Richard
>
>
>

--
www.dsprelated.com/blogs-1/nf/Mike_Dunn.php
Reply by Richard Williams March 6, 20102010-03-06
richard,

Here are my suggestions..
(guesses actually, based on your description of the problem)
the external RAM is faulty
the external RAM does not have all the data bits connected.
the bus receiver/transmitter driver chip for the upper 8 bits is faulty.
the communication bus is set for less than 32 bits.
the number of wait states for either the read or the write operation is set too low.
the data addressing is set for 'near' rather than 'far'.

R. Williams

---------- Original Message -----------
From: r...@gmail.com
To: c...
Sent: Sat, 06 Mar 2010 11:39:17 -0500
Subject: [c6x] Re: 6711D memory load

>
>
> hello again,
>
> when loading in data, it is all preceded by 0xff, for example 0x11111111 becomes 0xff111111, so seems highest 8 bits are always saturated. any suggestions?
>
> thanks
> richard
>
> hi
> >
> >we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
> >
> >*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
> >800033D4 1AA43D11 .word 0X1aa43d11
> >800033D8 BFEA3656 .word 0Xbfea3656
> >800033Dc BBE911D2 .word 0Xbbe911d2
> >
> >we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
> >
> >why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
> >
> >thanks
> >Richard
Reply by rjed...@gmail.com March 6, 20102010-03-06
hello again,

when loading in data, it is all preceded by 0xff, for example 0x11111111 becomes 0xff111111, so seems highest 8 bits are always saturated. any suggestions?

thanks
richard

hi
>
>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
>
>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>800033D4 1AA43D11 .word 0X1aa43d11
>800033D8 BFEA3656 .word 0Xbfea3656
>800033Dc BBE911D2 .word 0Xbbe911d2
>
>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
>
>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
>
>thanks
>Richard
>
>_____________________________________

_____________________________________
Reply by rjed...@gmail.com March 6, 20102010-03-06
hi guys

the map file seems fine. we originally developed the device using the c6711b but switched to c6711d. the main difference is the PLL in the 6711d.

when try to write to memory through ccs, for example, selecting a variable in our code, eg NUM = 1 (set in code), when displayed in watch window value is something like 0xff000067. if we write a different value to NUM such as 2 it does not change to that value.

basically it appears that random values appear where code and data should be placed. any suggestions?

Richard

hi
>
>we have developed an audio application based around the c6711 D dsp. We are using the XDS560 emulator and ccs 2.1. We can successfully load the program onto the audio device through load program on ccs. and when loaded the cursor appears at c_int00. But when the program is run it just goes to a series of nops. When we look at the our c code and and asm generated under the view-> mixed asm option we get:
>
>*(int*) PLL_CSR &=~CSR_PLLEN; /*my c code, assembler generated for this instruction by ccs below*/
>800033D4 1AA43D11 .word 0X1aa43d11
>800033D8 BFEA3656 .word 0Xbfea3656
>800033Dc BBE911D2 .word 0Xbbe911d2
>
>we can see from above that the TI generated assembler commands are missing and just words at the memory locations We are loading our program into external ram at starting at address 0x800...
>
>why cannot we see the underlying assembler? is there something wrong in our EMIF so the program is not loaded correctly into our external SRAM?
>
>thanks
>Richard
>
>_____________________________________

_____________________________________