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.