Changeset 538a0a8 in rtems
- Timestamp:
- 02/02/18 06:06:16 (5 years ago)
- Branches:
- 5, master
- Children:
- 6878519
- Parents:
- 03fecae
- git-author:
- Christian Mauderer <christian.mauderer@…> (02/02/18 06:06:16)
- git-committer:
- Christian Mauderer <christian.mauderer@…> (02/12/18 13:25:02)
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
bsps/arm/atsam/include/bsp/atsam-spi.h
r03fecae r538a0a8 22 22 #endif /* __cplusplus */ 23 23 24 typedef struct { 25 uint8_t spi_peripheral_id; 26 const Pin *pins; 27 Spi *spi_regs; 28 size_t pin_count; 29 bool chip_select_decode; 30 } atsam_spi_config; 31 24 32 int spi_bus_register_atsam( 25 33 const char *bus_path, 26 uint8_t spi_peripheral_id, 27 Spi *spi_regs, 28 const Pin *pins, 29 size_t pin_count 34 const atsam_spi_config *config 30 35 ); 31 36 -
c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c
r03fecae r538a0a8 50 50 int transfer_in_progress; 51 51 bool chip_select_active; 52 bool chip_select_decode; 52 53 } atsam_spi_bus; 53 54 … … 92 93 uint8_t delay_cs; 93 94 uint32_t csr = 0; 95 uint32_t mode = 0; 96 uint32_t cs = bus->base.cs; 94 97 95 98 delay_cs = atsam_calculate_dlybcs(bus->base.delay_usecs); 99 100 mode |= SPI_MR_DLYBCS(delay_cs); 101 mode |= SPI_MR_MSTR; 102 mode |= SPI_MR_MODFDIS; 103 if (bus->chip_select_decode) { 104 mode |= SPI_MR_PCS(bus->base.cs); 105 mode |= SPI_MR_PCSDEC; 106 cs /= 4; 107 } else { 108 mode |= SPI_PCS(bus->base.cs); 109 } 96 110 97 111 SPID_Configure( … … 99 113 bus->spi.pSpiHw, 100 114 bus->spi.spiId, 101 (SPI_MR_DLYBCS(delay_cs) | 102 SPI_MR_MSTR | 103 SPI_MR_MODFDIS | 104 SPI_PCS(bus->base.cs)), 115 mode, 105 116 &XDMAD_Instance 106 117 ); … … 114 125 atsam_set_phase_and_polarity(bus->base.mode, &csr); 115 126 116 SPI_ConfigureNPCS(bus->spi.pSpiHw, bus->base.cs, csr);127 SPI_ConfigureNPCS(bus->spi.pSpiHw, cs, csr); 117 128 } 118 129 … … 142 153 bus->chip_select_active = true; 143 154 144 SPI_ChipSelect(pSpiHw, 1 << msg->cs); 155 if (bus->chip_select_decode) { 156 pSpiHw->SPI_MR = (pSpiHw->SPI_MR & ~SPI_MR_PCS_Msk) | SPI_MR_PCS(msg->cs); 157 } else { 158 SPI_ChipSelect(pSpiHw, 1 << msg->cs); 159 } 145 160 SPI_Enable(pSpiHw); 146 161 } … … 390 405 int spi_bus_register_atsam( 391 406 const char *bus_path, 392 uint8_t spi_peripheral_id, 393 Spi *spi_regs, 394 const Pin *pins, 395 size_t pin_count 407 const atsam_spi_config *config 396 408 ) 397 409 { … … 411 423 bus->base.delay_usecs = 1; 412 424 bus->base.cs = 1; 413 bus->spi.spiId = spi_peripheral_id; 414 bus->spi.pSpiHw = spi_regs; 415 416 PIO_Configure(pins, pin_count); 417 PMC_EnablePeripheral(spi_peripheral_id); 425 bus->spi.spiId = config->spi_peripheral_id; 426 bus->spi.pSpiHw = config->spi_regs; 427 bus->chip_select_decode = config->chip_select_decode; 428 429 PIO_Configure(config->pins, config->pin_count); 430 PMC_EnablePeripheral(config->spi_peripheral_id); 418 431 atsam_configure_spi(bus); 419 432 atsam_spi_init_xdma(bus); -
c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c
r03fecae r538a0a8 67 67 }; 68 68 69 static const atsam_spi_config config = { 70 .spi_peripheral_id = ID_SPI0, 71 .spi_regs = SPI0, 72 .pins = pins, 73 .pin_count = RTEMS_ARRAY_SIZE(pins), 74 .chip_select_decode = false 75 }; 76 69 77 return spi_bus_register_atsam( 70 78 ATSAM_SPI_0_BUS_PATH, 71 ID_SPI0, 72 SPI0, 73 pins, 74 RTEMS_ARRAY_SIZE(pins) 79 &config 75 80 ); 76 81 } … … 91 96 }; 92 97 98 static const atsam_spi_config config = { 99 .spi_peripheral_id = ID_SPI1, 100 .spi_regs = SPI1, 101 .pins = pins, 102 .pin_count = RTEMS_ARRAY_SIZE(pins), 103 .chip_select_decode = false 104 }; 105 93 106 return spi_bus_register_atsam( 94 107 ATSAM_SPI_1_BUS_PATH, 95 ID_SPI1, 96 SPI1, 97 pins, 98 RTEMS_ARRAY_SIZE(pins) 108 &config 99 109 ); 100 110 }
Note: See TracChangeset
for help on using the changeset viewer.