CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

reading from & writing to cc1000 registers

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
bocek06



Joined: 21 Jul 2006
Posts: 1

View user's profile Send private message

reading from & writing to cc1000 registers
PostPosted: Wed Aug 02, 2006 4:12 am     Reply with quote

Hi all!
i m currently trying writing to & reading from cc1000
> registers by using the 3-wire configuration.I ve used the
> implementation interface written for the IAR PIC16 compiler that i ve
> downloaded from microchip's website n tried to adapt it to use with the
> msp430x149 mcu. i ve rewritten the code which was already written for IAR PIC16 .What i don t understand at this point about this 3-wire configuration is that for the write function
" WriteToCC1000RegisterWord(short addranddata)" by using this 3-wire configuration we only change the value of the pdata pin either to 0 or to 1 but doesn't load any addr or data value to anywhere or maybe i didn't understand.So then as no addr and data value is kept in anywhere,when we try to read a register's value "ReadFromCC1000Register(char addr) " what the code does is only to look at pdata's current pin value which is either a 1 or a 0 n then
setting the return value's pins "called Read_Data in my code" correspondingly.So in the code portion ;


for (BitCounter=0;BitCounter<8;BitCounter++)
{

P4OUT &= ~1 ;
//PCLK=0;
Read_Data= Read_Data<<1;

if(P4IN & 0x02==0x02) //if pdata high sa
{
print("pin high\n");
Read_Data |= 0x01;
}

else
{
print("pin low\n");
Read_Data &= 0xfe;
}

P4OUT |= 1 ;
//PCLK=1;

}

what it does is to set all 8 bits of Readdata( the variable i m gonna return from the ReadFromCC1000Register(char addr) function ) to 1 as the last value of PDATA was just a 1.So i feel like i really don t understand how this 3-wire configuration works as i can t figure out where all addr n data information is kept when we make a write.At the
data_sheet for CC1000 so called CC1000_Data_sheet_2.3 -reached by the following url "www.chipcon.com/files/CC1000_Data_Sheet_2_3.pdf" - it says all these addr and data bits are sent over PDATA pin but sent where? from where i can reach them when i wanna read that register's value.Again in the datasheet it says data is loaded in the internal register but i couldn t figure out and find anywhere what that internal register is.it means PDATA??


below is the complete code i ve used for writing to or reading from cc1000 registers;


/****************************************************************************/
/* This routine sends new configuration data to the CC1000 */
/****************************************************************************/

void ConfigureCC1000(short Count, short Configuration[])
{
short val;
short i;

for (i=0;i<Count;i++) {
val=Configuration[i];
WriteToCC1000RegisterWord(val);
}

}

/****************************************************************************/
/* This routine writes to a single CC1000 register, with address and data */
/* given in the same variable */
/****************************************************************************/


void WriteToCC1000RegisterWord(short addranddata)
{

char BitCounter;
unsigned short MSB;

//PALE=1;
P4OUT |=4 ;

print("16 bitlik val sole : %hd\n",addranddata);

unsigned short Data = addranddata ; //16 bit

print("union imdaki data sole : %hd\n",Data);

P4OUT &= ~4 ;
//PALE=0;

//set PDATA as output- not: output 0 diye assume ettim

P4DIR &= ~2 ;


// Send address bits
for (BitCounter=0;BitCounter<7;BitCounter++) // 7 kere shift
{

P4OUT |= 1;

//PCLK=1;




MSB= Data & 0x8000 ;
if(MSB) //MSB 1 ken
{
print("check...msb high?\n");
IF_HIGH ;
}
else
IF_LOW;

print("data write da shift edilmeden once : %hd\n",Data);
Data=Data<<1;
print("data write da shift edildikten sonra : %hd\n",Data);


P4OUT &= ~1 ;
//PCLK=0;



}
// Send read/write bit
// Ignore bit in data, always use 1

P4OUT |= 1;
//PCLK=1;

P4OUT |= 2;
//PDATA=1;

P4OUT &= ~1;
//PCLK=0;


Data=Data<<1;
print("data write da bi daha shift edildikten sonra : %hd\n",Data);
P4OUT |= 1;
//PCLK= 1
P4OUT |= 4;
//PALE=1





// Send data bits

for (BitCounter=0;BitCounter<8;BitCounter++)
{

P4OUT |= 1;
//PCLK=1;

MSB=Data & 0x8000 ;

if(MSB) //if high
{
print("high iim benn!!Smile\n");
IF_HIGH ;
}
else
IF_LOW;




Data=Data<<1;
print("data write da loopda son shift edilikten sonra : %hd\n",Data);

P4OUT &= ~1 ;
//PCLK=0;
}




P4OUT |= 1 ;
//PCLK=1;
}

/****************************************************************************/
/* This routine reads from a single CC1000 register */
/****************************************************************************/

char ReadFromCC1000Register(char addr)
{



char BitCounter;
unsigned char Read_Data;
unsigned char Read_MSB;
//8 bit values
print("read fonkundayim su an\n");

P4OUT |= 4 ;
// PALE=1;


Read_Data=addr<<1;
print("read data su addr bi kere kaydi : %d\n",Read_Data);


P4OUT &= ~4;
//PALE=0;

//set PDATA a output
P4DIR &= ~2;


// Send address bits
// pinar: burda 8 bitlik bir degeri 8 kere kaydirirsak o deger her zaman 0 olmaz

mi??

for (BitCounter=0;BitCounter<7;BitCounter++)
{

P4OUT |= 1;
//PCLK=1;


Read_MSB= Read_Data & 0x80 ;


if(Read_MSB) //if high
{
print("read yapiorm ve high im ben:)\n");
IF_HIGH ;
}
else
IF_LOW;


print("read data shift edilmeden once okunurken su : %d\n" ,Read_Data );
Read_Data= Read_Data<<1;
print("read data shift edildikten sonra okunurken su : %d\n" ,Read_Data );
P4OUT &= ~1 ;

//pinler 1 den baslio unutma!! PCLK=0;
}
// Send read/write bit
// Ignore bit in data, always use 0

//PCLK=1;
P4OUT |= 1;

P4OUT &= ~2 ;
P4OUT &= ~1 ;
//PDATA=0;
//PCLK=0;

P4OUT |= 1 ;
P4OUT |= 4 ;

//PCLK=1;
//PALE=1;

// Receive data bits

//bunu neden yapio bilmiorm gercekten ama pdata 1 oluo

P4OUT |= 2;


P4DIR |= 2;

// set up PDATA as an input 0

print("bu noktada Read_data nin 0 olmasi lazim bence ama su : %d\n" ,Read_Data );

//pinar: bu loop neden donuo anlamis diilim zaten Read_Data dedigimiz deger 8 bit diil

mi??

for (BitCounter=0;BitCounter<8;BitCounter++)
{

P4OUT &= ~1 ;
//PCLK=0;
Read_Data= Read_Data<<1;


if(P4IN & 0x02==0x02) //if pdata high sa
{
print("pin high\n");
Read_Data |= 0x01;
}

else
{
print("pin low\n");
Read_Data &= 0xfe;
}




P4OUT |= 1 ;
//PCLK=1;

}


P4DIR &= ~2;
//TRISC&=~0x20; Set up PDATA as an output 1 again

return Read_Data;
}



///////////////////////MAIN

int main()
{
initPorts();
// initializes the ports of the MSP430F149
initClock();
System_setDCO(); // setup DCO (digital controlled oscillator)
initUART(BPS_115200); // initialize UART for serial communication
char value;

//check to see if writing n reading from cc1000 regs works

ConfigureCC1000(1,DefaultConfig433);
value=ReadFromCC1000Register(0x01);
print("the value at pdata equals : %d",value);


print("return from main\n");

return 0;

}

That s all i wanna ask to you.Hope that anyone can take the time to look at it as i really got stuck on this point n need help

thanks for your consideration
regards
Pinar
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group