SPI STM32 fullduplex - chyba ve funkci read
Fanda Kopriva
info na elektronikavyvoj.cz
Sobota Červenec 5 09:52:12 CEST 2014
Dobry den
nejsem na army odbornik , ale pripada mi vyhodnocovani podminek nejak
slozite.
Ja pouzivam pro cteni Gmetru toto.A ten timeout tam je zbytecny .
Nemate problem s MISO pinem ? (zkrat nebo odpojeni , pripadne chybna
konfigurace portu)
unsigned short SPIout (unsigned int spiznak)
{
unsigned int timout;
SPI2_DR = spiznak;
timout = 0;
while ((!(SPI2_SR & 0x1)) && (timout<1000)) {timout++;}; //
ISO flag RXNE
if (timout>998) Serror |= 4;
return SPI2_DR;
}
v programu potom
GPIOB_BSRR =GMCSB<<16; //chip select
SPIout(0xb);SPIout(0xb); //zapis adresy
GMETRs = SPIout(0); // cteni statusu
GPIOB_BSRR =GMCSB; //chip select
Fanda
Dne 4.7.2014 22:46, Michal Grunt napsal(a):
> Tak mám nějakou chybu ve funkci W5100_Read. Vrací mi to pořád jenom 0. Zkoušel jsem různé variace/úpravy co jsem našel na internetu, ale pořád mi to vrací nulu. Neví někdo kde by mohl být problém? W5100_Write funguje, protože jsem modul nakonfiguroval a ping běží. Děkuji.
>
> unsigned char W5100_Read(unsigned int addr)
> {
> unsigned char data;
> unsigned char dummy;
>
> GPIO_ResetBits(W5100_CS_PORT, W5100_CS_PIN);
> SPI_ReadWrite8(W5100_READ_OPCODE); //0xff
> SPI_ReadWrite8((addr & 0xff00) >> 8);
> SPI_ReadWrite8((addr & 0xff));
> while( SPI1->SR & SPI_I2S_FLAG_BSY );
> temp = (uint8_t)SPI_ReadWrite8(0xff);
> GPIO_SetBits(W5100_CS_PORT, W5100_CS_PIN);
> return temp;
>
> }
>
> uint8_t SPI_ReadWrite8(uint8_t out) {
> while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {
> }
> SPI_SendData8(SPI1, out);
> while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {
> }
> return SPI_ReceiveData8(SPI1);
> }
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list