Is CCM used by default with launchpad gcc?
I had assumed stack and unknowns are in there..
If we define it in linker can we go nuts in there?
That would make an excellent compositing buffer .. Do a lot of work in there
during dma then blit during vblank ..
Jeffphone
--
Have you played Atari today?
> On Jan 31, 2014, at 11:59 AM, Chuck McManis <[email protected]> wrote:
>
> You start running into contention for the AHB bus. This is exactly where I'm
> stuck between an FPGA and a hard place :-)
>
> Basically as you start running code, the fetches from RAM can interfere with
> the DMA. There are a few things you can do, One there is a memory space (CCM
> 64K) which isn't on any of the RAM busses. I found putting my stack there for
> processes helped. But you can't DMA to/from that memory. Really just the CPU
> can talk to it. There are chunks of memory that have special access to the
> DMA which facilite higher performance on the '407 there is some 22K or so
> reserved for the Ethernet peripheral which mitigates this same sort of
> problem.
>
> --Chuck
>
>
>> On Fri, Jan 31, 2014 at 8:42 AM, skeezix <[email protected]> wrote:
>>
>> I wonder if anyone has some ideas here, or can clear up some of my
>> observations.
>>
>> Project here is a VGA display driven from STM32F4, currently on
>> the F429 disco board to make life a little easier. Its running great,
>> image is crisp and sharp, no blurr or jiggle going on (thanks to using DMA
>> and a timer to regulate the output timing.)
>>
>> Essentially the code is all interupt driven:
>>
>> - timer (TIM2) to drive hsync/vsync/line
>> - during a line, it may opt to turn up DMA to spit out pixel data
>> - DMA has another timer (TIM8) to drive pixelclock
>>
>> Running at 168MHz (or 120Mhz, doesn't matter, just changes
>> reoslution/refresh with same timing setup, luckily!), using libopencm3 rcc
>> function.
>>
>> The main loop is basicly:
>> while(1){ nop }
>>
>> Everything is fine.
>>
>> The problem is.. chanigng the main loop to _do something_ can futz
>> up the image on the display.
>>
>> - using memcpy to 'blit' a chunk of image from one buffer to
>> another totally blows up the display; if I brute force a for-loop instead,
>> its okay. Using the Launchpad gcc toolchain, not sure if thats newlib or
>> what, but whatever memcpy is doing is ugly :) (maybe it uses DMA or
>> something..)
>>
>> - if I just brute force stuff, such as a for-loop to copy a
>> picture onto display .. if I do 'too much', it'll blow up the image.
>>
>> I only do update during 'vblank' area anyway, but if I do 'too
>> much' and exceed vblank, its the problem.
>>
>> The question is .. shouldn't you be nearly to do anythign you want
>> 'brute force' in the main loop, without impacting the timers/ISR's?
>>
>> - there is one volatile, the vblank flag; main loop can have:
>>
>> if ( vblank) {
>> vblank = 0;
>> ...
>> So that shouldn't really limit anything.
>>
>> I would think having "nop" looping forever is nearly the same as a
>> for-loop doing a brute force image copy in offscreen buffers. The timers
>> driving the sync/line rendering should always take precedence.
>>
>> Anyone have any ideas?
>>
>> FWIW, here is a picture of the display, pretty nice and sharp:
>> https://www.dropbox.com/s/y8b5htd0r3ed1kg/Photo%20Jan%2030%2C%2012%2006%2031%20AM.jpg
>>
>> The main loop code is this in its entirety:
>>
>> while ( 1 ) {
>>
>> if ( vblank ) { // volatile
>> vblank = 0;
>>
>> fb_lame_demo_animate ( offscreen ); // move square
>> fb_clone ( offscreen, framebuffer ); // blit offscreen to onscreen
>>
>> }
>>
>> __asm__("nop");
>>
>> } // while forever
>>
>> The entire rest of application is in the VGA ISR.
>>
>> Is it just fact of life, with single core mcu, that busy work can
>> take awhile for the context to switch during to ISR, and thats killing me?
>>
>> It shouldn't take half the cpu's cycles up doing the display, so I
>> woudl think I'd have some ability to do non-VGA stuff in there without
>> blowing up the image :/
>>
>> jeff
>>
>> --
>> If everyone would put barbecue sauce on their food, there would be no war.
>>
>> ------------------------------------------------------------------------------
>> WatchGuard Dimension instantly turns raw network data into actionable
>> security intelligence. It gives you real-time visual feedback on key
>> security issues and trends. Skip the complicated setup - simply import
>> a virtual appliance and go from zero to informed in seconds.
>> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
>> _______________________________________________
>> libopencm3-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/libopencm3-devel
>
------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable
security intelligence. It gives you real-time visual feedback on key
security issues and trends. Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
libopencm3-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libopencm3-devel