NXP lpc2148 SD Kart Uygulama Notu (Program??)

Başlatan riggs, 21 Ekim 2008, 00:03:54

riggs

Kodda anlıyamadıgım bazı noktalar va onları sormak istedim...
http://www.nxp.com/acrobat_download/applicationnotes/AN10406_3.pdf

for ( i = 0; i < 8; i++ )
{
Dummy = SSPDR; /* clear the RxFIFO */
}
return;

RxFIFO tam olarak nedir ve okutulmasındaki amaç nedir anlayamadım...
Ayrıca aynı işlem aşagıdaki fonksiyon içerisinde de tekrarlanıyor.
RxFIFO nun flush işleminin amacı nedir acaba


/*
* SPI Send a block of data based on the length
*/
void SPI_Send( BYTE *buf, DWORD Length )
{
BYTE Dummy;
if ( Length == 0 )
return;
while ( Length != 0 )
{
/* as long as TNF bit is set, TxFIFO is not full, I can write */
while ( !(SSPSR & 0x02) );
SSPDR = *buf;
/* Wait until the Busy bit is cleared */
while ( !(SSPSR & 0x04) );
Dummy = SSPDR; /* Flush the RxFIFO */  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Length--;
buf++;
}
return;
}

:?:

Tagli

Normalde konu hakkında hiçbir fikrim yok ama yine de bir kaç yorum yapabilirim sanırım: Koddan az buçuk anlaşıldığı üzere ortada bir buffer var gibi. FIFO "First in first out" (ilk giren ilk çıkar, kuyruk olayı yani) demek. SSPDR de bu bufferın pointer'ı gibi. Baştaki Rx'in de "receive" olduğunu düşünüyorum. Galiba karta giden ve karttan gelen şeyler öncelikle bir buffer'da tutuluyor ve okuma-yazma işlemleri bloklar halinde yapılıyor. Gerçi bu buffer'ların neden temizlenmesi gerekiyor onu ben de anlamadım. Dediğim gibi, konuya yabancıyım ama yine de aklıma gelenleri yazayım dedim, belki bir faydası olur.
Gökçe Tağlıoğlu

riggs

Ben de emin omasam da aklıma gelen şeyi yazayım.....SPI da bir veri gonderilmek istendiginde aynı zamanda da alıcı ile verici arasında veri transferi oluyor. Dolayısıyla herhengi bir veri gonderildiginde alıcının gonderdiği (full dublex olmasından dolayı) veri de vericinin RxFIFO hafızasına yazılmış olabilir. Gereksiz bir okuma yaplarak belki de RxFIFO içerisindeki anlamsız data nın boşaltılması saglanmış olabilir....Aslında başlığa SPI da mı yazsaydım...... :roll: