siguran sam da si video
http://focus.ti.com/general/do...t.tsp?literatureNumber=slaa151
elem, ovaj IAR bas izgleda gadno ... (sledeci put stavi source u CODE tag ( [C O DE ] pa sors pa [ / C ODE] (samo bez razmaka) )
elem .. ja nista ne razumem ovaj tvoj kod .. gde ti je main() ? imas ovaj setup i onda imas isr i to je to? gde ti je glavna petlja sta radis u njoj kako se bacas u nesvest, koji nivo koristis LP3 ili neki drugi (mislim da ti samo lp3 radi posao neko bezsvesnije stanje ne moze da se probudi sa i2c interaptom) ... start condition (one shoot command) moras da saljes u petlji iz main-a (i onda se onesvestis u lp3) ...
dalje ako se ja dobro secam i uz IAR dolazi USI i2c biblioteka .. mnoooogo iskusnije nego da se cimas rucno (ovo je copy paste iz manuala)
Code:
void main(void){
WDTCTL = WDTPW+WDTHOLD;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1DIR |= 0x01;
P1OUT = 0x00;
TI_USI_I2C_MasterInit(USIDIV_7+USISSEL_2+USICKPL, StatusCallback);
/*
Acknowledge polling function - LED blinks continuously until slave device provides an ACK
TI_USI_I2CSelect(unsigned char SlaveAddress)
*/
while(TI_USI_I2CSelect(0x50)){
P1OUT ^= 0x01;
// Toggle LED
for (i = 0; i < 0x3000; i++); // Delay
}
P1OUT =0;
// Slave acknowledged, LED off
/*
Transmit data to the EEPROM device, prefixed by page address 0x01
TI_USI_I2CWrite(SlaveAddress, Length, Multi, TxData)
*/
__disable_interrupt();
TI_USI_I2CWrite(0x50,9,0,TxData0);
__bis_SR_register(LPM0_bits + GIE);
/*
Acknowledge polling function - loops continuously until
slave device provides an ACK
*/
while(TI_USI_I2CSelect(0x50));
/*
Transmit data to the EEPROM device, prefixed by
page address 0x08
TI_USI_I2CWrite(SlaveAddress, Length, Multi, TxData)
*/
__disable_interrupt();
TI_USI_I2CWrite(0x50, 3, 0, TxData1);
__bis_SR_register(LPM0_bits + GIE); //*/
/*
Acknowledge polling function - loops continuously until slave device
provides an ACK
*/
while(TI_USI_I2CSelect(0x50));
/*
Reset address counter of the EEPROM device by
transmitting the page address to be read
from (0x00) (Dummy write)
TI_USI_I2CWrite(SlaveAddress, Length, Multi, TxData)
*/
__disable_interrupt();
TI_USI_I2CWrite(0x50,1, 1,TxData0);
__bis_SR_register(LPM0_bits + GIE);
/*
Read data from the EEPROM device, starting at
page address 0x00
TI_USI_I2CRead(SlaveAddress, Length, Multi, RxData)
*/
__disable_interrupt();
TI_USI_I2CRead(0x50, 10, 1,RxData);
__bis_SR_register(LPM0_bits + GIE);
/*
This function can be used to end any open I2C transaction.
Use only if I2C transaction was left open previously by setting stop
condition bit =1
*/
TI_USI_I2CStop();
for (j = 0;j<10;j++){
if (RxData[j]!=j){
while(1);
}
}
P1OUT |= 0x01;
while(1);
}
int StatusCallback(unsigned char c){
return TI_USI_EXIT_LPM;
}
samo ne zaboravi da inkludujes USI_I2CMaster.h