Hallo,
ein weiteres Problem mit dem ATxmega384C3 U(S)ART (im Master SPI Mode
betrieben):
Das DATA Register wird immer zur gleichen Zeit beschrieben, aber die
eigentliche Uebertragung findet manchmal frueher, manchmal spaeter
statt.
Ist das normal?
Um eine Synchronisation zu erzwingen, habe ich ihn neu gestartet und die
Konfiguration aktualisiert. Aber obwohl der Programmfluss zu Beginn
absolut linear ist und das DATA Register immer zur selben Zeit
beschrieben wird, schwankt die Zeit bis zum Beginn der Uebertragung.
o delay26.png: 848ns
o delay27.png: 974ns
Gemessen wurde die Laenge des ersten Pulses an MISO (hat sich angeboten,
da der zum /CS passt)
C1: MOSI, C4: SCK, C2: MISO, C3: /CS
Mit welchem Parameter synchronisiert sich der UART/MSPI?
Prescaler/dem counter darunter, Enable/Disable (offensichtlich nicht),
...?
EDIT:
Hier noch der Anfang der Funktion:
1 | void task_read_adxl(void)
|
2 | {
|
3 | ADXL_CS_PORT.OUTCLR = ADXL_CS_bm;
|
4 |
|
5 | AUXBUS_UART_MSPI.CTRLB &= ~(USART_RXEN_bm | USART_TXEN_bm);
|
6 | AUXBUS_PORT.DIRSET = AUXBUS_MOSI_bm;
|
7 | AUXBUS_PORT.AUXBUS_SCK_PINCTRL = AUXBUS_ADXL312_SCK_PINCTRL;
|
8 | AUXBUS_UART_MSPI.CTRLC = USART_CMODE_MSPI_gc | AUXBUS_ADXL312_UCPHA;
|
9 | AUXBUS_UART_MSPI.BAUDCTRLA = AUXBUS_ADXL312_BAUDCTRLA;
|
10 | AUXBUS_UART_MSPI.BAUDCTRLB = AUXBUS_ADXL312_BAUDCTRLB;
|
11 | AUXBUS_UART_MSPI.CTRLB = USART_RXEN_bm | USART_TXEN_bm;
|
12 |
|
13 | AUXBUS_UART_MSPI.DATA = ADXL_READ_bm | ADXL_MULTIBYTE_bm
|
14 | | ADXL_DATAX0_addr;
|
15 | // ...
|
16 | }
|