FTDI 2232 H Mini Modul SPI do převodníku USB problém s hodinami

B

bobcat1

Guest
HI

Podívejte se na DS PIC MCU pro SPI vytvořit rejstřík by měl mít hodiny nebo data zrušení bitVšechno nejlepší

Bobi
Mikrokontroléru specialista
 
Ahoj

Ale problém je s FTDI čipem a jeho režimu hodin.I cant Zdá se, že start z vysoko v provozu příliš ..Tímto způsobem je zvyklý jít na nízké a MCU bude to špatně přečetl.

Je nám líto, I dont pochopit, jak bit obrat registru bude pomáhat.

Díky

 
Musím říct, že je (téměř?) Nemožné pochopit, co říkáte.

Navrhoval bych, že jste dal svůj kód nahoru, řekněte nám, co očekáváte říct a co říkáte.

Pomozte nám, takže vám můžeme pomoci.

 
Omlouvám se, pokud nejsem schopen to jasné.

Problém je zdarma, nebo ideální stav hodiny je vysoká (b / w FTDI a MCU). Ale jakmile jsem se intialise můj program hodiny ihned jede do nízké a pak spustí hodiny cycle.Here je kód pro FTDI 2232h čipu.Snažím se intialise MPSSE a získat 6 bytů (jejich podobný tam poznámka AN_135 aplikace).

Všechno, co chci, je nezastaví MCU po celou dobu, když jsem přestal FTDI čipu.

/ *
Chcete-li vybudovat si musí obsahovat ftd2xx.dll, ftd2xx.lib, ftd2xx.h ve zdrojovém adresáři.
* /

# Include "stdafx.h"
# Include <windows.h>
# Include <stdio.h>
# Include "ftd2xx.h"

FT_STATUS init_usb (FT_HANDLE ftHandle);
FT_STATUS init_mpsse (FT_HANDLE ftHandle);

FT_STATUS write_start (FT_HANDLE ftHandle, int LEN);
FT_STATUS write_data (FT_HANDLE ftHandle, unsigned char * buff, len DWORD, DWORD * Wlen);
FT_STATUS write_stop (FT_HANDLE ftHandle);

FT_STATUS read_data (FT_HANDLE ftHandle, unsigned char * buff, DWORD len, DWORD * Wlen);

int main (int argc, char * argv [])
(
FT_STATUS ftStatus;
FT_HANDLE ftHandle;
DWORD len;
DWORD Wlen;
unsigned char buff [20 2];

int i;

ftStatus = FT_Open (0, & ftHandle);
if (ftStatus! = FT_OK)
printf ("FT_Open Port selhalo \ n");

printf ("Init USB a MPSSE \ n");
ftStatus = init_usb (ftHandle);# Pokud 1
ftStatus = init_mpsse (ftHandle);

strcpy ((char *) & buff [0], "Hello World!"); / / řetězce k výstupu na SDO
printf ("Write Data \ n");
len = strlen ("Hello World");

ftStatus = write_start (ftHandle, LEN);
pro (i = 0; i <2, i )
(
ftStatus = write_data (ftHandle, buff, len, & Wlen);
/ / Spánek (1);
)
ftStatus = write_stop (ftHandle);

/ / Spánek (2);
# Endif

# Pokud 1
printf ("Init MPSSE \ n");
ftStatus = init_mpsse (ftHandle);
printf ("Read \ n");
len = 5;
ftStatus = read_data (ftHandle, buff, len, & Wlen);
printf ("No bytů číst% d \ n", (int) Wlen);

pro (i = 0; i <Wlen; i )
printf ("0x% x", buff );
printf ("\ n");
# Endif

ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x00);
ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);
ftStatus = FT_ResetDevice (ftHandle);

FT_Close (ftHandle);

return 0;
)FT_STATUS init_usb (FT_HANDLE ftHandle)
(
FT_STATUS ftStatus;
PFT_EVENT_HANDLER eh;
DWORD InOutTransferSize = 64 * 1024;
unsigned char event_error = 0x00;

/ * Reset zařízení a čistky USB Nárazníky * /
ftStatus = FT_ResetDevice (ftHandle);

/ * Nastavení USB pufru do 64K * /
ftStatus = FT_SetUSBParameters (ftHandle, InOutTransferSize, InOutTransferSize);
if (ftStatus! = FT_OK)
printf ("USB instalaci došlo k chybě \ n");

ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);

ftStatus = FT_SetEventNotification (ftHandle, 0, (PVOID) & eh);
if (ftStatus! = FT_OK)
printf ("Set upozorňování na události ve štychu \ n");

ftStatus = FT_SetChars (ftHandle, event_error, 0, event_error, 0);
if (ftStatus! = FT_OK)
printf ("Set znaky selhalo \ n");

/ * Set Časové limity * /
ftStatus = FT_SetTimeouts (ftHandle, 0, 5000);
if (ftStatus! = FT_OK)
printf ("Set Timeout selhalo \ n");

ftStatus = FT_SetLatencyTimer (ftHandle, 16);
if (ftStatus! = FT_OK)
printf ("Set latence Timeout selhalo \ n");

ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);
if (ftStatus! = FT_OK)
printf ("Vyčistit Buffers selhalo \ n");

/ / Usleep (100000);

návratnost (ftStatus);
)FT_STATUS init_mpsse (FT_HANDLE ftHandle)
(
FT_STATUS ftStatus;
DWORD wBytes;
DWORD nBytes;
unsigned char mpsee_cmd [16];

/ * Reset MPSEE režim * /
ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x00);

/ * Set MPSEE režim * /
ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x02);
if (ftStatus! = FT_OK) (
printf ("Nemohu nastavit MPSEE mód \ n");
)

/ * Set 8 Low Pins Trasy a výstup * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0x00, / / výchozí hodnota je 0x00
mpsee_cmd [2] = 0xEB;
nBytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, nBytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set Low Pins selhalo \ n");

/ * Set 4 vysoké Pins Trasy a výstup * /
mpsee_cmd [0] = 0x82;
mpsee_cmd [1] = 0x00;
mpsee_cmd [2] = 0x0F;
nBytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, nBytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set vysoké Pins selhalo \ n");

/ * Nastavení hodin na 1,5 Mhz * /
mpsee_cmd [0] = 0x86;
mpsee_cmd [1] = 0x03, / / výchozí hodnota je 0x03
mpsee_cmd [2] = 0x02;
nBytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, nBytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set hodin selhalo \ n");

/ * Disconnnect Loopback * /
mpsee_cmd [0] = 0x85;
nBytes = 1;
ftStatus = FT_Write (ftHandle, mpsee_cmd, nBytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set Loopback selhalo \ n");
/ / Usleep (100000);

návratnost (ftStatus);
)FT_STATUS write_start (FT_HANDLE ftHandle, int len)
(
FT_STATUS ftStatus;
DWORD wBytes;
unsigned char mpsee_cmd [8];

/ * Set 8 Low Pins Trasy a výstup * /
mpsee_cmd [0] = 0x80, / / Set Data nevešlo Low Byte, výchozí hodnota je 0x80
mpsee_cmd [1] = 0x00, / / Počáteční hodnota přiřazená k špendlíky, výchozí hodnota je 0x00
mpsee_cmd [2] = 0xFB, / / Urcuje, které piny jsou vstupní nebo výstupní.
/ / 0xFB mapy na 1111 1011 (AD7-AD0)

mpsee_cmd [3] = 0x11, / / 0x11 hodiny bytů v kódu (-ve) okraji (implicitní)
mpsee_cmd [4] = (unsigned char) (((len - 1) & 0xff00)>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

;
mpsee_cmd [5] = (unsigned char) ((len - 1) & 0x00ff);

ftStatus = FT_Write (ftHandle, mpsee_cmd, 6, & wBytes);

návratnost (ftStatus);
)

FT_STATUS write_stop (FT_HANDLE ftHandle)
(
FT_STATUS ftStatus;
DWORD wBytes;
unsigned char mpsee_cmd [8];

/ * Set 8 Low Pins Trasy a výstup * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0xFF; / / default je 0xFF
mpsee_cmd [2] = 0xFB;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);

návratnost (ftStatus);
)

FT_STATUS write_data (FT_HANDLE ftHandle, unsigned char * buff, DWORD len, DWORD * Wlen)
(
FT_STATUS ftStatus;

ftStatus = FT_Write (ftHandle, buff, len, Wlen);

návratnost (ftStatus);
)FT_STATUS read_data (FT_HANDLE ftHandle, unsigned char * buff, DWORD len, DWORD * Wlen)
(
FT_STATUS ftStatus;
unsigned char mpsee_cmd [16];
DWORD wBytes;
int i;

/ * Set 8 Low Pins Trasy a výstup * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0x00, / / výchozí hodnota je 0x00
mpsee_cmd [2] = 0xFB;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set Low Pins selhalo \ n");

* Wlen = 0;

# Pokud 1
pro (i = 0; i <len; i )
(
/ * Čtení z přístroje, aniž by napsat * /
mpsee_cmd [0] = 0x20;
mpsee_cmd [1] = 0;
mpsee_cmd [2] = 0;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Přečtěte si od zařízení selhalo \ n"),

/ / Usleep (20000);
/ * Přesun dat do bufferu * /
mpsee_cmd [0] = 0x87;
ftStatus = FT_Write (ftHandle, mpsee_cmd, 1, & wBytes);
if (ftStatus! = FT_OK)
printf ("Data Přesunout selhalo \ n");
)
# Jinak

/ * Čtení z přístroje, aniž by napsat * /
mpsee_cmd [0] = 0x20;
mpsee_cmd [1] = (unsigned char) ((len - 1) & 0x00ff);
mpsee_cmd [2] = (unsigned char) (((len - 1) & 0xff00)>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Přečtěte si od zařízení selhalo \ n");

/ * Přesun dat do bufferu * /
mpsee_cmd [0] = 0x87;
ftStatus = FT_Write (ftHandle, mpsee_cmd, 1, & wBytes);
if (ftStatus! = FT_OK)
printf ("Data Přesunout selhalo \ n");
# Endif

/ * Čtení dat z USB * vyrovnávací paměť /
ftStatus = FT_GetQueueStatus (ftHandle, Wlen);
printf ("Wlen =% d \ n", (int) * Wlen);

if (* Wlen> 0)
ftStatus = FT_Read (ftHandle, buff, * Wlen, & wBytes);

if (ftStatus! = FT_OK)
printf ("Přečtěte si selhalo \ n");

návratnost (ftStatus);
)Díky

 

Welcome to EDABoard.com

Sponsor

Back
Top