Читаю в цикле с SPI:
Код
for (j=0; j<(BLen/2);j++){
U0IFG &= ~URXIFG0; // reset flag
U0TXBUF = 0; // data request
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
BEven = U0RXBUF; // read 1st
U0IFG &= ~URXIFG0; // reset flag
U0TXBUF = 0; // data request
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
BOdd = U0RXBUF; // read 1st
if(BOdd!=~BEven) done=false;
Компилируется это в:
Код
for (i=0; i<(BUF_LENGTH/2);i++){
00592A 0F43 clr.w R15
for (i=0; i<(BUF_LENGTH/2);i++){
00592C 3F900040 cmp.w #0x4000,R15
005930 2B2C jc 0x5988
U0IFG &= ~URXIFG0; // reset flag
005932 F2C040000200 bic.b #0x40,&IFG1
U0TXBUF = 0; // data request
005938 C2437700 clr.b &U0TXBUF
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
00593C F2B040000200 bit.b #0x40,&IFG1
005942 FC2B jnc 0x593C
BEven = U0RXBUF; // read 1st
005944 D24276005012 mov.b &U0RXBUF,&BEven
U0IFG &= ~URXIFG0; // reset flag
00594A F2C040000200 bic.b #0x40,&IFG1
U0TXBUF = 0; // data request
005950 C2437700 clr.b &U0TXBUF
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
005954 F2B040000200 bit.b #0x40,&IFG1
00595A FC2B jnc 0x5954
BOdd = U0RXBUF; // read 1st
00595C D24276005112 mov.b &U0RXBUF,&BOdd
Теперь включаю оптимизацию (max speed):
Код
for (i=0; i<(BUF_LENGTH/2);i++){
005612 0F43 clr.w R15
U0IFG &= ~URXIFG0; // reset flag
005614 F2C040000200 bic.b #0x40,&IFG1
U0TXBUF = 0; // data request
00561A C2437700 clr.b &U0TXBUF
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
00561E F2B040000200 bit.b #0x40,&IFG1
005624 FC2B jnc 0x561E
BEven = U0RXBUF; // read 1st
005626 5E427600 mov.b &U0RXBUF,R14
00562A C24E5012 mov.b R14,&BEven
U0IFG &= ~URXIFG0; // reset flag
00562E F2C040000200 bic.b #0x40,&IFG1
U0TXBUF = 0; // data request
005634 C2437700 clr.b &U0TXBUF
while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
005638 F2B040000200 bit.b #0x40,&IFG1
00563E FC2B jnc 0x5638
BOdd = U0RXBUF; // read 1st
005640 C24E5112 mov.b R14,&BOdd
И разумеется, все перестает работать, ибо перед последней строчкой должно быть:
mov.b &U0RXBUF,R14
Переменные обьявлены как глобальные:
char dh,dl;
Вопрос - я что-то неправильно делаю, или это глюки IAR'а ?