Solved! Go to Solution.
Two steps are missing in the original post.
8.3.1 DMA Direct Mode
1. Poll the DSR[CB] bit to make sure the DMA channel is idle.
2. Initialize the SAR, DAR, and BCR.
3. Initialize the CTT bit in the CDAR to indicate the type of transfer.
4. Initialize the CTM bit in the DMR to indicate direct mode. Other control parameters in the DMR
can also be initialized here, if necessary.
5. Clear and set the DMR[CS] bit to start the DMA transfer.
There are also chaining mode register bits that have to be set up properly if you are fixing one of the addresses.
In case you're running a virtual memory system, the DMAC has to be loaded with physical addresses, not virtual ones.
Are you snooping properly?
Polling the registers stalls the DMA (detailed in "8.3.5 DMA Performance"), so don't poll the status register.
Are you performing memory/memory transfers or to and from the PCI?
Tom
Were you able to make the DMA work? (I got the same issue)
Two steps are missing in the original post.
8.3.1 DMA Direct Mode
1. Poll the DSR[CB] bit to make sure the DMA channel is idle.
2. Initialize the SAR, DAR, and BCR.
3. Initialize the CTT bit in the CDAR to indicate the type of transfer.
4. Initialize the CTM bit in the DMR to indicate direct mode. Other control parameters in the DMR
can also be initialized here, if necessary.
5. Clear and set the DMR[CS] bit to start the DMA transfer.
There are also chaining mode register bits that have to be set up properly if you are fixing one of the addresses.
In case you're running a virtual memory system, the DMAC has to be loaded with physical addresses, not virtual ones.
Are you snooping properly?
Polling the registers stalls the DMA (detailed in "8.3.5 DMA Performance"), so don't poll the status register.
Are you performing memory/memory transfers or to and from the PCI?
Tom