forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Tiva C Series TM4C123GH6PZ - SPI čtení problém

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM
 
Slav3k
Profesionál
Profesionál


Založen: 17.4.2013
Příspěvky: 45

PříspěvekZaslal: 17 červenec 2014, 12:44    Předmět: Tiva C Series TM4C123GH6PZ - SPI čtení problém Citovat

Zdravím,
už dlouho se snažím rozchodit korektní čtení na SPI na ARMovém kontroléru TM4C123GH6PZ. Prostředí IAR workbench.
Podle datasheetu bych měl poslat tři bajty obsahující 0x02, 0x00 a následně adresu registru ze kterého chci číst. Podé by mělo následovat poslání něčeho např 0x00 aby měl slave clocky, nyní je možné vyčíst ne vstupním FIFO nějaký balast a následují validní data (poslat 0x00, vyčíst bajt, poslat 0x00, vyčíst vajt, atd). Bohužel mě to čtení trochu nějak blbne, bajty mi to čte ve zvláštním pořadí. Můžete někdo zkusit projít tento kód, jestli je to v pořádku?

Po tomto čtení mám hned v prvním čteném bajtu validní data .. tedy někdy, ne vždy Sad.

kód:

//INIT
void AOutInit(void)   
{
  // SSI0 setup - for DAC module
  SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_3);
  GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_2);
  SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 100000, 8);
  SSIEnable(SSI0_BASE);
 
  // set DAC error inputs
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
  GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, DAC_ERR1);
  GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, DAC_ERR2);

  // set output mode
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
  GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, DAC_UI_CH1);
  GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, DAC_UI_CH2);
}


V této funkci je čtení
kód:

void AOutUpdateStatus(void)
{
  uint32_t buffer1 [3];
  buffer1 [0] = 1;
  buffer1 [1] = 2;
  buffer1 [2] = 3;
  uint16_t reading = 0; 
 
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, DAC_CH1_SS_LOW);     //Latch low
  SSIDataPut(SSI0_BASE, DAC_RD_REG);  //send read command .. 0x02
  SSIDataPut(SSI0_BASE, 0x00);                       //send NOP condition
  SSIDataPut(SSI0_BASE, DAC_RD_DAC);         //desired read address
  while(SSIBusy(SSI0_BASE));                   //wait till transmit is complete
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, AC_CH1_SS_HIGH);    //Latch high
 
  vTaskDelay(1 / portTICK_RATE_MS);
 
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, DAC_CH1_SS_LOW);     //Latch low
SSIDataPut(SSI0_BASE, 0x00);         //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 0); // first byte from FIFO (nondefined byte - trash)                 
  SSIDataPut(SSI0_BASE, 0x00);   //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 1);      // second byte from FIFO (first valid byte)   
  SSIDataPut(SSI0_BASE, 0x00);       //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 2);   / third byte from FIFO (second valid byte)
  while(SSIBusy(SSI0_BASE));     //transmit providing clock for MISO
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, AC_CH1_SS_HIGH);    //Latch high 
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)