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í

 
Vysvětlení kódu - ukazatel na strukturu

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Jiné mikrokontroléry, procesory, hradla
 
Prochy
Anonymní





PříspěvekZaslal: 08 prosinec 2013, 0:00    Předmět: Vysvětlení kódu - ukazatel na strukturu Citovat

Zdravim,

při používání TFT sem vycházel z ukázkové aplikace a je tam jedna část, které nerozumim.

kód:

#define Bank1_LCD_D    ((uint32_t)0x60020000)    //disp Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x60000000)    //disp Reg ADDR
*(__IO uint16_t *) (Bank1_LCD_C)= LCD_Reg;   
*(__IO uint16_t *) (Bank1_LCD_D)= LCD_RegValue;


Tomudle asi rozumim, prostě to na dané adrese nastaví danou hodnotu.

Ale pak tu mám další ukázkový soubor, který se mi ale nedaří zprovoznit. Používájí se tam ukazatel na strukturu.

kód:

typedef struct
{
  __IO uint16_t LCD_REG;
  __IO uint16_t LCD_RAM;
} LCD_TypeDef;

#define LCD_BASE           ((uint32_t)(0x60000000 | 0x60020000))
#define LCD                ((LCD_TypeDef *) LCD_BASE)

void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
{
  /* Write 16-bit Index, then Write Reg */
  LCD->LCD_REG = LCD_Reg;
  /* Write 16-bit Reg */
  LCD->LCD_RAM = LCD_RegValue;
}


Ta funkce opět nastavuje pouze hodnoty na daných adresách. Ale nějak nechápu definice LCD, LCD_BASE, jak se nastaví adresa té struktury. Chtěl jsem to nahradit za tu první variantu, jelikož to je jednodušší na zápis a přehlednější, bohužel mi to nefunguje.

Díky

Arrow administrator: přesunuto z "Ostatní"
Návrat nahoru
 

 
Prochy
Anonymní





PříspěvekZaslal: 13 prosinec 2013, 14:01    Předmět: Citovat

Je možný, že jsem se špatně vyjádřil, kdyby to někoho zajímalo, tak sem se ptal ještě na mcu.cz, tak tady je odkaz na to vlákno, snad tím neporušuji žádný pravidla.

http://mcu.cz/plugins/smf/smf.php?topic=3300.6
Návrat nahoru
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 478

PříspěvekZaslal: 13 prosinec 2013, 15:14    Předmět: Citovat

Jak už ti napsali na mcu.cz , ty dva kody nejsou stejny. V prvnim pripade se vyuziva toho ze kdyz pises na adresy 0x60020000 a 0x60000000 tak na adresove sbernici se meni jen jedna adresa a ta se pouziva jako signal selektor REGISTER/DATA. V druhem pripade se struktura LCD nachazi na adrese 0x60020000. Kdyby si chtel aby to chodilo stejne jako v prvnim pripade, musel bys vlozit mezi cleny struktury LCD_Reg a LCD_RegValue nejaky prostor asi takhle:

typedef struct
{
__IO uint16_t LCD_REG;
__IO uint16_t NU[mezera];
__IO uint16_t LCD_RAM;
} LCD_TypeDef;

S tim ze ji umistis na 0x60000000
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
Prochy
Anonymní





PříspěvekZaslal: 13 prosinec 2013, 17:25    Předmět: Citovat

Díky za odpověď.

Asi si mě nepochopil, já už to chápu, jen tu předkládám odkaz na řešení problému.
Návrat nahoru
 

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 -> Jiné mikrokontroléry, procesory, hradla Č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)