Ostatnio zapragnąłem męczyć się z tym maleństwem (xmega32E5).. Próbuje skonfigurować timer tak aby udało mi się zmierzyć szerokość impulsu na jednym z portów. Dla Xmega128A3U nie stanowi to problemu i mój kod konfiguracji timera wygląda tak:
W pozostałej części kodu odpalam/wyłączam timer za pomocą: "TCC0.CTRLA=TC_CLKSEL_DIV1_gc/TCD0.CTRLA=TC_CLKSEL_OFF_gc" i odczytuje sobie wartość CCA w odpowiednich przerwaniach i wszystko jest ok.
Problem mam natomiast z Xmega32E5 gdzie starałem się przetłumaczyć to co powyżej na jego język. Wyszło mi tak:
Problem w tym że to co dostaję jako wynik pomiaru w tym przypadku to są jakieś bzdury (wynik niemal zawsze taki sam). Największy problem miałem z przełożeniem maski bitowej Xmega serii A "TC0_CCAEN_bm" na serię E... oznaczyłem to za pomocą "???" w powyższym kodzie.
Uprzedzając pytanie to w procedurze przerwania dla Xmegi "E" ręczne kasuję flagę timera (TCD5.INTFLAGS = TCD5.INTFLAGS) która nie wiedzieć czemu tu dla odmiany nie chce się sama skasować jak to miała w zwyczaju czynić Xmega "A"...
Czy ktoś by mógł powiedzieć co robię źle ?
Kod: C / C++
W pozostałej części kodu odpalam/wyłączam timer za pomocą: "TCC0.CTRLA=TC_CLKSEL_DIV1_gc/TCD0.CTRLA=TC_CLKSEL_OFF_gc" i odczytuje sobie wartość CCA w odpowiednich przerwaniach i wszystko jest ok.
Problem mam natomiast z Xmega32E5 gdzie starałem się przetłumaczyć to co powyżej na jego język. Wyszło mi tak:
Kod: C / C++
Problem w tym że to co dostaję jako wynik pomiaru w tym przypadku to są jakieś bzdury (wynik niemal zawsze taki sam). Największy problem miałem z przełożeniem maski bitowej Xmega serii A "TC0_CCAEN_bm" na serię E... oznaczyłem to za pomocą "???" w powyższym kodzie.
Uprzedzając pytanie to w procedurze przerwania dla Xmegi "E" ręczne kasuję flagę timera (TCD5.INTFLAGS = TCD5.INTFLAGS) która nie wiedzieć czemu tu dla odmiany nie chce się sama skasować jak to miała w zwyczaju czynić Xmega "A"...
Czy ktoś by mógł powiedzieć co robię źle ?