struct { unsigned int volts; unsigned int shuntvolts; u16 rpm; u16 windpulse; unsigned int mode; u16 direction; unsigned int recttemp; unsigned int outtemp; unsigned int insidetemp; unsigned int barometer; u08 dummy[0x0C];// 0x0C } bufr, buffer[16]; // test line for buffersize of 16 bufr structures u08 spibuff[0x200]; // spi transfer buffer for (i=0;i<=15;i++) { // fill all 16 array structures (512 bytes) with something different buffer[i].volts = 1 * i; buffer[i].shuntvolts = 2 * i; buffer[i].rpm = 3 * i; buffer[i].windpulse = 4 * i; buffer[i].mode = 5 * i; buffer[i].direction = 6 * i; buffer[i].recttemp = 7 * i; buffer[i].outtemp = 8 * i; buffer[i].insidetemp = 9 * i; buffer[i].barometer = 10 * i; // buffer[i].dummy = 11 * i; } for (i=0;i<=15;i++) { // dump structure to spibuffer (512 bytes) // shift buf left a byte read data into new space shl(spibuff, countbits(buffer[i].volts), (char) 0x200); spibuff[0x200] = (unsigned) &buffer[i].volts; shl(spibuff, countbits(buffer[i].shuntvolts), (uchar) 0x200); spibuff[0x200] = (unsigned) &buffer[i].shuntvolts; shl(spibuff, countbits(buffer[i].rpm), (uchar) 0x200); spibuff[0x200] = (unsigned) &buffer[i].rpm; u08 mmcWriteBlock(u32 sector) { u08 r1; unsigned int i; // assert chip select cbi(MMC_CS_PORT,MMC_CS_PIN); // issue command r1 = mmcCommand(MMC_WRITE_BLOCK, sector<<9); #ifdef MMC_DEBUG rprintf("MMC Write Block R1=0x%x\r\n", r1); #endif // check for valid response if(r1 != 0x00) return r1; // send dummy spiTransferByte(0xFF); // send data start token spiTransferByte(MMC_STARTBLOCK_WRITE); // write data // **************************************** // //// for(i=0; i<0x200; i++) //// { //// spiTransferByte(*buffer++); // spiTransferByte(arg>>24); //// } for (i=0;i<=15;i++) // dump structure to spibuffer (512 bytes) { spiTransferByte(buffer[i].volts >> 8); // Send the hi byte spiTransferByte(buffer[i].volts); // Send the lo byte spiTransferByte(buffer[i].shuntvolts >> 8); spiTransferByte(buffer[i].shuntvolts); spiTransferByte(buffer[i].rpm >> 8); spiTransferByte(buffer[i].rpm); spiTransferByte(buffer[i].windpulse >> 8); spiTransferByte(buffer[i].windpulse); spiTransferByte(buffer[i].mode >> 8); spiTransferByte(buffer[i].mode); spiTransferByte(buffer[i].direction >> 8); spiTransferByte(buffer[i].direction); spiTransferByte(buffer[i].recttemp >> 8); spiTransferByte(buffer[i].recttemp); spiTransferByte(buffer[i].outtemp >> 8); spiTransferByte(buffer[i].outtemp); spiTransferByte(buffer[i].insidetemp >> 8); spiTransferByte(buffer[i].insidetemp); spiTransferByte(buffer[i].barometer >> 8); spiTransferByte(buffer[i].barometer); } // **************************************** // // write 16-bit CRC (dummy values) spiTransferByte(0xFF); spiTransferByte(0xFF); // read data response token r1 = spiTransferByte(0xFF); if( (r1&MMC_DR_MASK) != MMC_DR_ACCEPT) return r1; #ifdef MMC_DEBUG rprintf("Data Response Token=0x%x\r\n", r1); #endif // wait until card not busy while(!spiTransferByte(0xFF)); // release chip select sbi(MMC_CS_PORT,MMC_CS_PIN); // return success return 0; }