реклама на сайте
подробности

 
 
> S3C44B0x, проблема с SIO RX в DMA режиме
igorus
сообщение May 15 2006, 11:03
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 12-11-05
Пользователь №: 10 763



Реализовывал ли кто SPI обмен, используя DMA режим в S3C44B0x ?

Хожу по граблям. В режиме полинга прием и передача работает нормально. В режиме ДМА - передача ОК, но при приеме происходит прием дополнительных 8-ми бит. Т.е. запросили 10 байт, осциллографом вижу 88 (а не 80) клоков. В буфер попало 10-мь байт. Естественно весь обмен сыпется.

Заранее спасибо. Кусок исходника ниже.


// Init IO pins as SPI pins
C44B_rPCONF &=~ ((7 << 10) | (7 << 16) | (7 << 19)) ;
C44B_rPCONF |= ((3 << 10) | (3 << 16) | (3 << 19)) ;

// Enable clock for SIO module
C44B_rCLKCON |= 1 << 5;

// Setup SIO parameters
C44B_rBDCON0 = (0x0<<2);
C44B_rSIOCON = 0;
C44B_rSBRDR = 15;
C44B_rIVTCNT = 255;
C44B_rSIOCON = C44B_bSIOCON_INT + C44B_bSIOCON_TXRX + C44B_bSIOCON_MSB +
C44B_bSIOCON_INTCLK + C44B_bSIOCON_REDGE;


// Perform infinite DMA READ cycle
while (1)
{
// prepare SIO for BDMA receive
C44B_rSIOCON &=~ (3 | C44B_bSIOCON_START | (1 << 5));
C44B_rI_ISPC |= C44B_bISR_BDMA0;
C44B_rDCNTZ = 0x3;
C44B_rDCNTZ = 0;

// setup BDMA0
C44B_rBDISRC0 = (0<<30)|(3<<28)|(uint32_t)C44B_aSIODAT;
C44B_rBDIDES0 = (2<<30)|(1<<28)|(uint32_t)&buff[0];
C44B_rBDICNT0 = (3<<30)|(1<<26)|(3<<22)|2;
C44B_rBDICNT0 |= (1<<20);
C44B_rSIOCON |= C44B_bSIOCON_BDMA0;
C44B_rSIOCON |= C44B_bSIOCON_START;

// wait until ready
while ((C44B_rINTPND & C44B_bISR_BDMA0) == 0)
;
C44B_rDCNTZ = 0x3;


// wait
delayUS(100);
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.02274 секунд с 7
ELECTRONIX ©2004-2016