<html>
<head>
<meta content="text/html; charset=ISO-8859-2"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font face="Helvetica, Arial, sans-serif">Mam registr: </font>GPIOF->ODR<br>
Ted ziskam jeho adresu: &GPIOF->ODR<br>
Adresa = ukazatel je podle typu promenne, tedy zde na uint32_t.<br>
Pro prekladac zmenim typ - ukazatel na byte - aby vedel, jake
instrukce pouzit: (uint8_t*)&GPIOF->ODR<br>
Dale napisu obecnejsi - snad i pochopitelnejsi - zapis pro pristup k
jednotlivym bytum: ((uint8_t*)&GPIOF->ODR)[0] = 0x12;<br>
<br>
Aby se s tim pracovalo jednoduseji, tak z toho muzeme udelat makro:<br>
#define PORT_BYTE(port) ((volatile uint8_t*)&(port))<br>
Pak muzu psat jednodussi zapis:<br>
PORT_BYTE(GPIOF->ODR)[0] = 0x12;<br>
A muzu to vyuzit take pro dalsi porty bez nutnosti definovat si nove
a nove definice...<br>
Makro se da upravit tak, aby cislo bytu bylo take jako parametr:<br>
#define PORT_BYTE(port,byte) ((volatile uint8_t*)&(port))[byte]<br>
PORT_BYTE(GPIOF->ODR,0) = 0x12;<br>
<br>
Hynek Sladky<br>
<font face="Helvetica, Arial, sans-serif"><br>
<br>
</font>
<div class="moz-cite-prefix">Dne 14.2.2017 10:23, Fanda Kopriva
napsal(a):<br>
</div>
<blockquote
cite="mid:83143f24-32c9-6cb2-9b9d-28c91bf7c730@elektronikavyvoj.cz"
type="cite">
<br>
*(volatile uint8_t *)&GPIOF->ODR = 0x12;
<br>
diky za nakopnuti
<br>
Ale tyto konstrukce jsou pro mne bohuzel neprehledne a zavani mi
temnou magii.:-)
<br>
Stareho psa novym ...atd.
<br>
nakonec jsem si dodefinoval registry s bytovym pristupem a funguje
to.
<br>
<br>
sfr unsigned char volatile GPIOF_ODRL absolute 0x40021414;
<br>
sfr unsigned char volatile GPIOF_ODRH absolute 0x40021415;
<br>
GPIOF_ODRH = 0x12
<br>
<br>
fanda
<br>
</blockquote>
<br>
</body>
</html>