 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Pon Okt 03, 2011 12:47 am Naslov sporočila: IOCONFIG registri (MODE1, MODE1_set, MODE1_reset,...) |
|
|
Lep pozdrav!
Že dolgo nisem nič pisal ampak sem ravno pred tem, da napišem prvi blinker na ARM9 in me zanima sledeče. V LPC3141 user manualu sem na str. 312 v tabeli 322 našel več registrov in namreč:
MODE1,
MODE1_set,
MODE1_reset,
MODE2,
MODE2_set,
MODE2_reset,
Vem, da z nastavljanjem N-tega bita v MODE0 in MODE1 registrih lahko N-temu pinu določim eno izmed štirih vlog: input (high impedance), output s katerim razpolaga določena periferija, gpio output driven low in gpio output driven high. Zanima me, kaj pomeni "driven low" oz. "driven high". Ali to pomeni, da je ob resetu v logični 0 oz logični 1?
Bega me namreč dejstvo, da imam poleg MODE1 in MODE2 registrov še registre MODE0_set, MODE0_reset, MODE1_set in MODE_reset. Kaj vbistvu počnejo ti 4 registri?
Hvala! LP |
|
Nazaj na vrh |
|
 |
Benjamin Član

Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.53 Kraj: Trebnje, Ljubljana
|
Objavljeno: Pon Okt 03, 2011 9:51 am Naslov sporočila: |
|
|
Živjo,
Iz registra MODEx lahko prebereš trenutno stanje registra,
ko hočeš katerikoli bit postaviti na '1' to storiš z vpisom '1' v MODEx_set,
ko hočeš postaviti bit na '0' to storiš z vpisom '1' v MODEx_reset.
Ob resetu so vsi GPIO pini definirani kot vhodi.
Ko nastaviš MODEx registre kot "driven low", to pomeni da je tisti pin definiran kot izhod in postavljen na '0'.
Ko nastaviš MODEx registre kot "driven high", to pomeni da je tisti pin definiran kot izhod in postavljen na '1'.
Vsak bit v registru MODEx predstavlja en GPIO pin.
Primer kako Linux postavi GPIO pin na '0' ali '1' (value) na LPC3152:
Koda: |
GPIO_M1_SET(port) = pin;
if(value) {
GPIO_M0_SET(port) = pin;
} else {
GPIO_M0_RESET(port) = pin;
} |
_________________ Cessna 152: "Flight Level Three Thousand, Seven Hundred"
Controller: "Roger, contact Houston Space Center" |
|
Nazaj na vrh |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Pon Okt 03, 2011 3:47 pm Naslov sporočila: |
|
|
Benjamin je napisal/a: |
Ko nastaviš MODEx registre kot "driven low", to pomeni da je tisti pin definiran kot izhod in postavljen na '0'.
Ko nastaviš MODEx registre kot "driven high", to pomeni da je tisti pin definiran kot izhod in postavljen na '1'.
|
Ali to pomeni, da je default vrednost pri "driven low" izhodih 0, pri "driven high" izhodih pa 1?
Predvidevam, da si ti opisoval "driven low" izhode, ko si rekel:
Benjamin je napisal/a: |
ko hočeš katerikoli bit postaviti na '1' to storiš z vpisom '1' v MODEx_set,
ko hočeš postaviti bit na '0' to storiš z vpisom '1' v MODEx_reset.
|
Predvidevam tudi, da bi za "driven high" izhode registra MODEx_set in MODEx_reset delovala takole:
ko hočem katerikoli bit postaviti na '1' to storim z vpisom '1' v MODEx_reset,
ko hočeš postaviti bit na '0' to storiš z vpisom '1' v MODEx_set.
Mi lahko prosim poveš, če pravilno razmišljam, ali se motim? |
|
Nazaj na vrh |
|
 |
Benjamin Član

Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.53 Kraj: Trebnje, Ljubljana
|
Objavljeno: Tor Okt 04, 2011 9:05 am Naslov sporočila: |
|
|
71GA je napisal/a: |
Ali to pomeni, da je default vrednost pri "driven low" izhodih 0, pri "driven high" izhodih pa 1?
|
Tako je. Default vrednost in edina možna.
Citiram: |
Predvidevam, da si ti opisoval "driven low" izhode, ko si rekel:
Benjamin je napisal/a: |
ko hočeš katerikoli bit v registru MODEx postaviti na '1' to storiš z vpisom '1' v MODEx_set,
ko hočeš katerikoli bit v registru MODEx postaviti na '0' to storiš z vpisom '1' v MODEx_reset.
|
|
To sem govoril na splošno.
Citiram: |
Predvidevam tudi, da bi za "driven high" izhode registra MODEx_set in MODEx_reset delovala takole:
ko hočem katerikoli bit postaviti na '1' to storim z vpisom '1' v MODEx_reset,
ko hočeš postaviti bit na '0' to storiš z vpisom '1' v MODEx_set.
|
Ravno obratno, zamenjal si registra _set in _reset, ter kot sem rekel, je to na splošno in ne samo za "driven high".
Ko hočeš nek GPIO pin imeti kot izhod in ga postaviti na '0',
to narediš npr. takole (v User Manualu si poglej če je pravilno):
reg_GPIO_MODE1_set = pin;
reg_GPIO_MODE0_set = pin;
Ko hočeš nek GPIO pin imeti kot izhod, in ga postaviti na '1':
reg_GPIO_MODE1_set = pin;
reg_GPIO_MODE0_reset = pin;
Ko hočeš nek GPIO pin imeti kot vhod:
reg_GPIO_MODE1_reset = pin;
reg_GPIO_MODE0_reset = pin;
LP _________________ Cessna 152: "Flight Level Three Thousand, Seven Hundred"
Controller: "Roger, contact Houston Space Center" |
|
Nazaj na vrh |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Tor Okt 04, 2011 1:11 pm Naslov sporočila: |
|
|
Hvala.
LP Žiga |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|