All pastes #276215 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-12-12 02:43 UTC
rendered paste body
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;
}