Avr studio, atmega32 - neodhalitelný problém ?

Lukáš Grepl L.Grepl@sh.cvut.cz
Úterý Duben 14 14:07:27 CEST 2009


> mel jsem jednou na ATMega162 podobny problem se ctenim z klavesnice.
> Nakonec jsem program upravil takto, misto PORTB|=0x70
> 
>     asm ("sbi 0x18,5\n"); // kdyz je tu misto toho PORTB|=0x70 tak to zlobi
>     asm ("sbi 0x18,6\n"); // protoze sem muze tuknout preruseni a zmenit
>     asm ("sbi 0x18,7\n"); // prectenou hodnotu, se zakazem preruseni je to 

A to je vlastnost kompilátoru nebo platformy, že to PORTB |= 0x70 
nepřeloží jako atomickou operaci?

Třeba na PICu s použitím kompilátoru PICC je dle mých zkušeností 
výsledek přibližně takový:

	movlw 0x70	; nahrajeme konstantu
	iorwf PORTB, f	; provedeme OR s konstantou přímo na registru

takže ke změně hodnoty portu v přerušení uprostřed toho OR dojít nemůže.

Lukáš Grepl



Další informace o konferenci Hw-list