(hard)core test na AVR

Miroslav Šinko sinkomiro@gmail.com
Čtvrtek Prosinec 4 22:24:03 CET 2008


Dňa 4.12.2008, Jan Waclawek <konfera@efton.sk> napísal(a):
> Este stale si myslim, ze realne spravanie sa zavisi od konkretnej implementacie; a moj tip je, ze tam bude ulozena neinkrementovana hodnota z r0. To "postinkrement" sa vztahuje na suslednost pouzitia adresy a inkrementu, ale v skutocnosti sa IMHO adresa latchne do interneho adresneho registra v prvej polovici prveho cyklu, inkrementovana hodnota sa ulozi v druhej polovici prveho cyklu (u predekrementu sa najprv dekrementne a potom sucasne s writebackom sa latchne v adresnom registri), register r0 sa vycita v prvej polovici druheho cyklu a zapise v druhej polovici druheho cyklu. Vychadzam z casovacieho diagramu v odstavci "Data Memory Access Times" v snad kazdom AVRkovom datasheete (okrem AT90S1200 ;-) ), aj ked takto explicitne to tam bohuzial nie je. Nevidim vsak pricinu, preco ak ukazuje Z (X, Y) na registre, by ta sekvencia mala byt ina.


Tak si mal pravdu :-) Relatko cvakne pri hodnote 0 v podmienke. Pri 1,
ako som predpokladal ja, si ani nepipne...

Testovane na tiny13, tento kod:

.include "tn13def.inc"

#define IO_PORT	PORTB
#define IO_DDR	DDRB

#define IO_OUT_RELAY	4

                ;init port
	ldi	r16,  (1<<IO_OUT_RELAY)
	out	IO_DDR, r16

	clr	r0
	clr	r31
	ldi	r30, 30
	st	Z+,r0
	cpi	ZL, 0        ;<------ testovana hodnota
	brne	Loop

                ;relay on
	sbi	IO_PORT, IO_OUT_RELAY		

Loop:
	rjmp	Loop


miro


Další informace o konferenci Hw-list