Vysvětlení kódu - ukazatel na strukturu

Zdravim,

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

#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.

[code]
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;
}[/code]

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_right: administrator: přesunuto z "Ostatní"

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.

mcu.cz/plugins/smf/smf.php?topic=3300.6

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

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.