AnsweredAssumed Answered

error in variables handling

Question asked by GMVS on Dec 8, 2012
Latest reply on Dec 18, 2012 by Petr_H

hi

 

processor expert is making fun of me

 

i'm trying to attach an st m41t94 rtc to the mc9s08dz128mll using the spi2, but since i've got other stuff in the same bus, i'm using a 74hc595 sipo register for the slave selects.

 

i'm trying to make an echo access to the clock to try out the spi. this is part of my main

 

 

///

RTCwrite(0x02, 0x15);                      // (1)

  spiError= RTCread(0x02,time);

  a=*time;

  SIPO1Tx(a, TRUE, TRUE);

 

///

 

i'm writting, then reading, then placing what i read on a second sipo driving leds

the following lines are in another file

 

 

///

void RTCwrite(char RTCaddress, char data)                       // (2)

{

  RTCaddress = RTCaddress | 0x80; //turn on first bit to write         // (3)

  SPI2SIPOTx(0xFD, TRUE);

  SPI2M_SendChar(RTCaddress);

  SPI2M_SendChar(data);

  SPI2SIPOTx(0xFF, TRUE);

}

///

 

 

 

 

(1)  you can see how i'm sending a hex 2 and 15 to the rtc, i'm trying to access address register 2 which contains the minutes of the rtc and i'm telling it in bcd that rigth now its been 15 minutes.

(2) but when i run the debugger, RTCaddress has a 0x41 while data has the 0x15 i was sending. ??

(3) to tell the rtc that i'm writting i need to turn on the first bit of the address. so ideally i'll get 0x02 | 0x80 = 0x82. in this case i'd expect to have 0x41 | 0x80 = 0xc1, but i still get RTCaddress = 0x41. ????

given how this is no way working, i havent even tried the rest so i dont know if it works, at this point i dont care. all i care is why this stuff is not working??

 

next i tried this

 

///

RTCwrite(0x0002, 0x15);                      // (1)

  spiError= RTCread(0x02,time);

  a=*time;

  SIPO1Tx(a, TRUE, TRUE);

 

 

/////////////////

 

 

void RTCwrite(int RTCaddress, char data)                  

{

  RTCaddress = RTCaddress | 0x80; //turn on first bit to write            // (2)

  data = data | 0x80;                                                                  // (3)

  SPI2SIPOTx(0xFD, TRUE);

  SPI2M_SendChar(RTCaddress);

  SPI2M_SendChar(data);

  SPI2SIPOTx(0xFF, TRUE);

}

///

 

(1) this way the number pass nicely

(2) the operation works, i got a 0x0082

(3) but here this operation is ignored

 

 

so all i can conclude is processor experts (or code warrior) doesn't knows how to handdle chars

but i need the number as a char, not int, i could make a cast and truncate the int, but i dont think thats correct

 

also, are the following assumption correct?

byte = signed byte = sign + 7 bits

char = unsigned byte = 8 bits

int = signed double byte = sign + 15 bits

word = unsigned int = 16 bits

are short and long also available? and what would be their counterparts?

 

please help me out

 

 

 

 

 

Attachments

Outcomes