c problem

i dont do c but need help in understanding what this bit of code does. i am only interested in the sendmmc() function. does it send the command Command(0x51,0,512,0xFF) then send 512 * ff on spi bus or send the comand 512 times ?

David

bit sendmmc() // send 512 bytes from the MMC via the serial port { uns16 i; // 512 byte-read-mode if (Command(0x51,0,512,0xFF) !=0) { SerString("MMC: read error 1 "); return 1; } while(SPI(0xFF) != 0xFE); // wait for 0xFE - start of any transmission for(i=0; i < 512; i++) { while(!TXIF); // wait until TXREG is empty TXREG = SPI(0xFF); // get MMC byte and send via RS232 } serialterminate(); SPI(0xFF); // at the end, send 2 dummy bytes SPI(0xFF); return 0; }

void main(void) { InitUSART(); // initialize serial port initint(); // initialize interrupts

ADCON1=0x6; // PortA Digital // set ports for I/O TRISC = 0b.1101.0011; // sck rc3-0, sdo rc5-0, CS rc2-0. TRISB = 0b.0000.0010; // RB2>TX, RB1>RX

SerString("PIC online "); // start message // SerString(0x00); // start message

// init MMC and send message if ok if (MMC_Init()) SerString("MMC online ");

fillram(); // fill the RAM with ASCII characters writeramtommc(); // write RAM to MMC sendmmc(); // send 512 bytes of the MMC via serial port

while(1) { nop(); nop(); } }

Reply to
david
Loading thread data ...

It sends the command, looks at the return code, and reports the error if it occurred. It appears that the command is sent once, but that is no guarantee that the function Command(..) does not try more than once before returning an error.

for(i=0;

It looks like it then sends 512 bytes from the SPI to the serial port.

It looks like the SPI peripheral needs two dummy bytes to finish the transmission and be set for the next command.

That is my best guess without seeing the rest of the code.

Reply to
James Beck

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.