Hallo,
ich habe eine Frage zum TWI Treiber:
Ich setze auf einem Xmega TWI ein um einen Portexpander einzusetzen.
Leider sperrt offenbar der Treiber bei jedem Zugriff auf den I2C-Bus die Interrupts für die Dauer des Timeouts , das hat bei mir leider sehr große Nachteile, da dann der Takt für ein Schrittmotor durcheinander gerät, der Motor blockiert dadurch.
Ich rufe einen ähnlichen Baustein per SPI ab, da wird der Interrupt nicht systemweit gesperrt.
Bei TWI offenbar schon, ich vermute wegen des Timeouts?.
In der Doku steht:
TWInoTimeOut
XMega Normalerweise bestimmt die Variable TWI_TimeOuttn den Timeout bei den TWI Operationen. Bei sehr schnellen Slaves kann auf den TimeOut im x-SysTick Bereich verzichtet werden. Mit diesem optionalen Define (true) wird das TimeOut auf ca. 4msec heruntergesetzt werden.
Wenn ich aber versuche TWInoTimeOut zu nutzen bekomme ich einen Compilerfehler, die Variable ist nicht bekannt. Auch als Define wird es nicht akzeptiert.
Kann ich den TWI irgendwie ohne Interruptsperrung verwenden? So kann ich das leider in manchen Fällen nicht nutzen, da selbst kleine Unterbrechungen da schon schädlich sind.
ich habe eine Frage zum TWI Treiber:
Ich setze auf einem Xmega TWI ein um einen Portexpander einzusetzen.
Leider sperrt offenbar der Treiber bei jedem Zugriff auf den I2C-Bus die Interrupts für die Dauer des Timeouts , das hat bei mir leider sehr große Nachteile, da dann der Takt für ein Schrittmotor durcheinander gerät, der Motor blockiert dadurch.
Ich rufe einen ähnlichen Baustein per SPI ab, da wird der Interrupt nicht systemweit gesperrt.
Bei TWI offenbar schon, ich vermute wegen des Timeouts?.
In der Doku steht:
Quote
TWInoTimeOut
XMega Normalerweise bestimmt die Variable TWI_TimeOuttn den Timeout bei den TWI Operationen. Bei sehr schnellen Slaves kann auf den TimeOut im x-SysTick Bereich verzichtet werden. Mit diesem optionalen Define (true) wird das TimeOut auf ca. 4msec heruntergesetzt werden.
Wenn ich aber versuche TWInoTimeOut zu nutzen bekomme ich einen Compilerfehler, die Variable ist nicht bekannt. Auch als Define wird es nicht akzeptiert.
Kann ich den TWI irgendwie ohne Interruptsperrung verwenden? So kann ich das leider in manchen Fällen nicht nutzen, da selbst kleine Unterbrechungen da schon schädlich sind.