Estoy usando msp430g2553
y configurando el reloj a 1Mhz:
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
He cronometrado 5 millones de ciclos e inesperadamente toma alrededor de 6 segundos (esperaba 5). El bucle que he usado es:
int i;
for(i=0;i<5000;i++)
__delay_cycles(1000);
He leído sobre el uso de interrupciones (probablemente basadas en Timer_A, etc.) pero me gustaría evitar eso por ahora.
Entonces mi pregunta es: ¿cómo puedo implementar un argumento constante sleep
basado en __delay_cycles?
Edición posterior
Asamblea para:
void delay1000() {
__delay_cycles(1000);
}
es:
delay1000:
0c3b4: 04 12 PUSH R4
0c3b6: 04 41 MOV SP, R4
0c3b8: 24 53 INCD R4
0c3ba: 3f 40 4c 01 MOV #0x014c, R15 // 332 decimal (1000/3 -> DEC, TST and JNZ)
0c3be: 1f 83 DEC R15
0c3c0: 0f 93 TST R15
0c3c2: fd 23 JNZ delay1000+0xa
0c3c4: 03 43 NOP
0c3c6: 03 43 NOP
0c3c8: 34 41 POP R4
0c3ca: 30 41 RET