Ich möchte mit HAL_SPI_Transmit_DMA Daten über SPI ausgeben.
Ich habe die beiden Callbacks HAL_SPI_TxCpltCallback und
HAL_SPI_TxHalfCpltCallback registriert.
1 | HAL_SPI_Transmit_DMA(&hspi2, (uint8_t*)txBuffer, BUFFER_SIZE)
|
gebe ich eine Puffer mit.
Im Callback schreibe ich jeweils eine Hälfte des Puffers, aber laut
Logic Analyser ist das Ergebnis nicht richtig. Anhand der GPIOs und mit
dem Debugger kann ich sehen, daß HAL_SPI_TxHalfCpltCallback aufgerufen
wird, aber zwischen zwei Aufrufen werden alle Bytes ausgeben.
Ich habe vermutet, daß nur eine Hälfte des Puffers ausgegeben wird und
ich in dieser Zeit auf die andere Hälfte schreiben kann.
Wie gebe ich den 2. Puffer an?
1 | void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi)
|
2 | {
|
3 | static const uint32_t BUFFER_HALF = BUFFER_SIZE / 2;
|
4 | static value = 0;
|
5 | HAL_GPIO_WritePin(M4_PD8_GPIO_Port, M4_PD8_Pin, GPIO_PIN_SET);
|
6 | if (txBufferHalf == 0) {
|
7 | for (unsigned int i = 0; i < BUFFER_HALF; ++i) {
|
8 | txBuffer[i] = value;
|
9 | }
|
10 | HAL_GPIO_WritePin(M4_PB11_GPIO_Port, M4_PB11_Pin, GPIO_PIN_SET);
|
11 | txBufferHalf = 1;
|
12 | }
|
13 | else
|
14 | {
|
15 | for (unsigned int i = BUFFER_HALF; i < BUFFER; ++i) {
|
16 | txBuffer[i] = value + 100;
|
17 | }
|
18 | HAL_GPIO_WritePin(M4_PB11_GPIO_Port, M4_PB11_Pin, GPIO_PIN_RESET);
|
19 | txBufferHalf = 0;
|
20 | }
|
21 | HAL_GPIO_WritePin(M4_PD8_GPIO_Port, M4_PD8_Pin, GPIO_PIN_RESET);
|