 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
bostjan007 Neznanec

Pridružen-a: Pet 11 Feb 2011 12:24 Prispevkov: 2 Aktiv.: 0.01
|
Objavljeno: Pet Feb 11, 2011 12:49 pm Naslov sporočila: Programiranje ARM mikrokontrolerjev v C-ju |
|
|
Pozdravljeni
Pred kratkim sem se začel učiti kako uporabljati in programirati ARM mikrokontrolerje v C-ju. V glavnem se učim na ta način, da preverim kako so narejeni "exampli" in nato poskusim enako funkcionalnost narediti še v mojih programih. Sedaj pa imam problem, ker ne znam spremeniti stanja enega samega bita registra. Vsi primeri in vse kar sem našel na internetu je narejeno z masko.
Primer: LPC_GPIO1->DATA |= 0x001 (če hočem LSB stanje postavit na "1") in LPC_GPIO1->DATA &= 0xFFE (če hočem LSB stanje postavit na "0")
Sedaj me zanima ali obstaja še kakšna druga variant za direktno spreminjanje posameznih bitov registrov brez dela z maskami? Je to sploh mogoče narediti?
Za programiranje uporabljam uVision 4 razvojno okolje, delam pa programe za LPC1111 mikrokontroler.
lep pozdrav
Boštjan |
|
Nazaj na vrh |
|
 |
trot Član


Pridružen-a: Čet 18 Jan 2007 20:25 Prispevkov: 1282 Aktiv.: 5.70 Kraj: glej fogl
|
Objavljeno: Pet Feb 11, 2011 1:50 pm Naslov sporočila: |
|
|
Če hočeš spremeniti en bit in pustiti ostale nedotaknjene, potem ne. Kaj pa te moti pri te tem načinu? _________________ lp, Klemen |
|
Nazaj na vrh |
|
 |
bostjan007 Neznanec

Pridružen-a: Pet 11 Feb 2011 12:24 Prispevkov: 2 Aktiv.: 0.01
|
Objavljeno: Pet Feb 11, 2011 2:58 pm Naslov sporočila: |
|
|
Zdravo
V osnovi me moti to da imaš potem dva različna načina glede na to ali želiš bit nastaviti na vrednost "0" ali "1" (&= ali |=). To pomeni, da moram sedaj v programu najprej preveriti kaj želim narediti in nato šele lahko izvedem operacijo.
Pri programiranju PIC kontrolerja se en bit spremeni takole:
PORTBbits.RB0=GetOutputValue() // fukcija vrača "1" ali "0"
Za ARM pa potem ne vidim druge variante kot da napišem naslednje:
if(GetOutputValue()){
LPC_GPIO1->DATA |= 0x001;
}else{
LPC_GPIO1->DATA &= 0xFFE;
}
Bom preveril kako to zgleda v asemblerju in kako je z hitrostjo.
Če pa kdo ve za kakšno boljšo možnost, naj prosim sporoči.
LP
Boštjan |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Sob Feb 12, 2011 10:54 am Naslov sporočila: |
|
|
cortex-m3 cipi imajo "bit banding", mogoce si poglej se to.
Dosti cipov ima tudi posebne registre za GPIO, kjer pisanje v en register nastavi bite, pisanje v drugi, pa pobrise (ni treba brati, pa maskirati).
Drugace pa izgleda, kot da si delas problem, kjer ga ni.  _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 7 dni
Powered by phpBB © 2001, 2005 phpBB Group
|