Bonjour,
Je réalise un stage dans une entreprise et je rencontre un problème avec les bus SPI. Voici la datasheet du microcontrôleur avec lequel je travail : https://ww1.microchip.com/downloads/..._Datasheet.pdf (page 676 à 707 pour la partie SPI)
J'aimerai réaliser un transfert de 5 bytes par le biais d'un bus SPI mais mon soucis c'est que le Chip Select remonte entre les bytes...
Voici ce que j'obtiens quand j'utilise mon oscilloscope :
J'aimerai que la courbe violette (CS) reste bas pendant le transfert de tous les bytes (courbe jaune).
Voici les mon initialisation de mon bus SPI :
Voici ma fonction qui déclenche les transferts de bytes :Code:/* Configure an SPI peripheral. */ spi_enable_clock(SPI0); spi_disable(SPI0); spi_reset(SPI0); /* Permet de gérer le NPSC mais il est déjà géré par les fonction EVE */ //spi_set_lastxfer(SPI0); spi_set_master_mode(SPI0); spi_disable_mode_fault_detect(SPI0); //spi_set_variable_peripheral_select(SPI0); spi_set_peripheral_chip_select_value(SPI0, SPI_CHIP_SEL); spi_set_clock_polarity(SPI0, SPI_CHIP_SEL, SPI_CLK_POLARITY); spi_set_clock_phase(SPI0, SPI_CHIP_SEL, SPI_CLK_PHASE); spi_set_bits_per_transfer(SPI0, SPI_CHIP_SEL, SPI_CSR_BITS_8_BIT); spi_set_baudrate_div(SPI0, SPI_CHIP_SEL, (sysclk_get_peripheral_hz() / gs_ul_spi_clock)); spi_enable(SPI0);
Et voici enfin ma fonction spi_transmit(data) qui permet les transferts :Code:uint8_t ftData8; EVE_cs_set(); //Cs at 0 spi_transmit_32(...); //Make 4 spi_transmit(data) ftData8 = spi_receive(0x00); /* read data byte by sending another dummy byte thank to spi_transmit(data)*/ EVE_cs_clear(); //Cs at 1 return ftData8; /* return byte read */
Entre les transfert de bytes je ne demande jamais à ce que CS reviennent à l'état haut, je ne sais donc pas comment régler ce soucis...Code:static inline uint8_t spi_transmit(uint8_t data) { uint8_t data_send = SPI_TDR_TD(data); //Transmission while ((SPI0->SPI_SR & SPI_SR_TDRE) == 0); SPI0->SPI_TDR = data_send; //Read while ((SPI0->SPI_SR & SPI_SR_RDRF) == 0); uint8_t data_read = SPI0->SPI_RDR; return data_read & SPI_RDR_RD_Msk; }
-----