Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

DMA issue with PXA270 in WindowsCE

Status
Not open for further replies.

Roger8.sk

Newbie level 1
Newbie level 1
Joined
May 4, 2010
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Location
Slovakia
Activity points
1,297
I am working on a block driver for SD cards used in SPI mode under WindowsCE 5.0. The SD card is connected to SSP3 port of the PXA270 CPU.

The block driver (so all data transfers) in PIO mode works correctly. To speed up the data transfer I have started to use DMA, but now the PDA devices started to freeze. I have tried many approaches how to configure DMA and SPI either. In all configurations the freezing was undeterministic. Sometimes the device freezes after several minutes and sometimes after 1-2 hours.

I can not find out what can be wrong.

Some details briefly
  • The device freezes during the InterruptDone(SYSINTR_XX) call made in the IST.
  • In the OAL layer of the WinCE I have defined a new IRQ and SYSINTR either.
  • In the block driver

  • The IST thread is simple and takes care only about the interrupts. There is NO data processing.
  • The IST waits for interrupt event based on a previous InterruptInitialize(SYSINTR_XX) call.
  • If interrupt event is signaled, the IST checks the status registers for Rx and Tx DMA channels either, stores them in an internal variable (let’s call DMASTAT) and raises an internal event (let’s call IEVT) inside the driver and immediately calls InterruptDone(SYSINTR_XX).
  • A second thread of the driver (where the data request is received) initiates the DMA transfer and waits for the internal IEVT event. If the event is received, checks the DMA transfer results in variable DMASTAT. After that it processed the received data.
  • DMA is used only for data transfers where the byte count is multiply of 32, more or equal than 128 bytes and less or equal 512 bytes.

If you can provide any advices how to fix the freezing, please help.

With best regards,
Roger
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top