I've been putting together an article on DMA and one of my examples uses DMA to CRC the Flash memory array of a '407 processor.
In comparing the speed of DMA to iterative assignment, I found that DMA will succeed in moving 1MB starting at location 0, whereas dereferencing a pointer that points at location 0 gives me IBUSERR. By using the same code, just going after the code Flash at location 0x0800 0000 gets around the issue.
Is there some sort of default memory protection for programatically reading Flash around location 0? Is it execute only? Does it even exist?