Reginald L. schrieb:
> Vergiss nicht ungelesene Bytes aus dem spi auszulesen
Hab ich...
Hier ist die vollständige routine:
1 | void TIM1_CC_IRQHandler(void)
|
2 | {
|
3 |
|
4 | uint8_t cmd;
|
5 | TIM1->SR = (uint16_t)~TIM_IT_CC1;
|
6 | //cmd = SPI2->DR;
|
7 |
|
8 | //DMA Deaktivieren
|
9 | DMA1_Channel5->CCR &= (uint16_t)(~DMA_CCR1_EN);
|
10 |
|
11 | //Adresse
|
12 | DMA1_Channel5->CMAR = (uint32_t)&dataSendA[0];
|
13 | DMA1_Channel5->CNDTR = 3;
|
14 |
|
15 | SPI2->CR2 |= SPI_I2S_DMAReq_Tx;
|
16 |
|
17 | //delay(2);
|
18 |
|
19 | //DMA Aktivieren
|
20 | DMA1_Channel5->CCR |= DMA_CCR1_EN;
|
21 |
|
22 | GPIOC->ODR = 0xFF;
|
23 | GPIOC->ODR = 0x00;
|
24 | }
|
Im Anhang das Bild.
Es zeigt, dass ich 0x81, 0x75, 0x27 und 0x03 empfange.
Mein Buffer ist jedoch:
1 | uint8_t dataSendA[10] = {0x75, 0x33, 0x81, 0x01, 0x77, 0x14, 0x41, 0x63, 0x20, 0xAA};
|
Eine Merkwürdigkeit ist noch, dass wenn ich das Programm mehrmals
hintereinander flashe, sich der DMA unterschiedlich verhält.
Manchmal sendet der SPI Slave nur 0x00 und dies immer, dann wieder
0x81,0x75,0x27,0x03