Hallo,
ich möchte 3 Bytes über die SPI-Schnittstelle schicken.
Wenn ich das über SPI_TDR mache:
1 | p_spi->SPI_TDR= SPI_TDR_PCS(chip_id) | 0x01;
|
2 | while((p_spi->SPI_SR & SPI_SR_TDRE) != SPI_SR_TDRE);
|
3 | p_spi->SPI_TDR= SPI_TDR_PCS(chip_id) | (test >> 8);
|
4 | while((p_spi->SPI_SR & SPI_SR_TDRE) != SPI_SR_TDRE);
|
5 | p_spi->SPI_TDR= SPI_TDR_PCS(chip_id) | (test & 0xFF) | SPI_TDR_LASTXFER;
|
6 | while((p_spi->SPI_SR & SPI_SR_TDRE) != SPI_SR_TDRE);
|
werden die richtigen Daten gesendet.
Wenn ich aber mit PDC den Puffer senden will, wird das erste Byte (0x01)
richtig gesendet, dann aber 0-Byte und ein 0x01-Byte, egal was im
Sendepuffer steht:
1 | uint32_t gs_uc_spi_m_tbuffer[3];
|
2 | gs_uc_spi_m_tbuffer[0] = SPI_TDR_PCS(chip_id) | SPI_TDR_TD((uint16_t)0x01);
|
3 | gs_uc_spi_m_tbuffer[1] = SPI_TDR_PCS(chip_id) | SPI_TDR_TD((uint16_t)0xCC);
|
4 | gs_uc_spi_m_tbuffer[2] = SPI_TDR_LASTXFER | SPI_TDR_PCS(chip_id) | SPI_TDR_TD((uint16_t)0x55);
|
5 | DEV_SPI->SPI_MR &= (~(SPI_MR_PCS_Msk | SPI_MR_PS));// Clear Peripheral chip select value
|
6 | DEV_SPI->SPI_MR |= SPI_MR_PCS(chip_id);
|
7 | p_spi->SPI_TPR= (uint32_t)gs_uc_spi_m_tbuffer;
|
8 | p_spi->SPI_PTCR= SPI_PTCR_TXTEN; // PDC-TX einschalten
|
9 | p_spi->SPI_TCR= SPI_TCR_TXCTR(3);
|
10 | while((p_spi->SPI_SR & SPI_SR_TXEMPTY) == SPI_SR_TXEMPTY);
|
Die SPI ist zwar auf Fixed Peripheral Select eingestellt, das sollte
doch aber nichts ausmachen? (Später stelle ich das um)
Der SPI_CSRx (=chip_id) ist richtig konfiguriert (8Bits, etc.)
Auch das SPI_MR habe ich kontrolliert.
Sieht jemand, was ich falsch mache oder wo könnte ich noch nachschauen?
Bitte um Hilfe, ich weiß einfach nichtmehr weiter.