Non, les PRG, c'est de la tigccliberie. Et ca n'a pas besoin des autoints:
#define DisablePRG() ({ asm volatile ("bclr #3,0x600015"); })
#define EnablePRG() ({ asm volatile ("bset #3,0x600015"); })
#define IsPRGEnabled() (!!((*((volatile unsigned char*)0x600015))&0x8))
#define PRG_getRate() (((*((unsigned char*)0x600015))&0x30)>>4)
extern unsigned char PRG_getStart(void)__ATTR_LIB_C__;
#define PRG_getValue() (*((volatile unsigned char*)0x600017))
#define PRG_setRate(x) (*((unsigned char*)0x600015)=(*((unsigned char*)0x600015)&0xCF)|(((x)&0x3)<<4))
#define PRG_setStart(x) (*((volatile unsigned char*)0x600017)=(x))
Ton problème est que PRG_getStart prend du temps (pas le choix: on doit attendre une boucle complète pour détecter le bon point de départ).
Mes les init (getrate / getstart) en phase d'initialisation seulement et pas dans la fonction attendre.