rendered paste bodystruct {
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;
}