Forum: Mikrocontroller und Digitale Elektronik ESP32 im ULP einen pin isolieren


von test (Gast)


Lesenswert?

hallo

möchte einen ext_wakeup machen. den wakeup pin im ulp "an/und 
ausschalten", ist das möglich? ein beispiel wäre schön, bitte keine 
erklärungen

denke das "wakeup interrupt bit" löschen und setzen ist das einfachste 
bloß wo ist das, finde da nix, das müßte ja auch im "RTC" sein damit ich 
es im ULP ändern kann

danke

von test (Gast)


Lesenswert?

das ist mir klar :), aber ein königreich für ein beispiel

rtc_cntl_reg.h

#define RTC_CNTL_EXT_XTL_CONF_REG          (DR_REG_RTCCNTL_BASE + 0x5c)
/* RTC_CNTL_XTL_EXT_CTR_EN : R/W ;bitpos:[31] ;default: 1'b0 ; */
/*description: enable control XTAL by external pads*/
#define RTC_CNTL_XTL_EXT_CTR_EN  (BIT(31))
#define RTC_CNTL_XTL_EXT_CTR_EN_M  (BIT(31))
#define RTC_CNTL_XTL_EXT_CTR_EN_V  0x1
#define RTC_CNTL_XTL_EXT_CTR_EN_S  31
/* RTC_CNTL_XTL_EXT_CTR_LV : R/W ;bitpos:[30] ;default: 1'b0 ; */
/*description: 0: power down XTAL at high level  1: power down XTAL at 
low level*/
#define RTC_CNTL_XTL_EXT_CTR_LV  (BIT(30))
#define RTC_CNTL_XTL_EXT_CTR_LV_M  (BIT(30))
#define RTC_CNTL_XTL_EXT_CTR_LV_V  0x1
#define RTC_CNTL_XTL_EXT_CTR_LV_S  30

#define RTC_CNTL_EXT_WAKEUP_CONF_REG          (DR_REG_RTCCNTL_BASE + 
0x60)
/* RTC_CNTL_EXT_WAKEUP1_LV : R/W ;bitpos:[31] ;default: 1'b0 ; */
/*description: 0: external wakeup at low level  1: external wakeup at 
high level*/
#define RTC_CNTL_EXT_WAKEUP1_LV  (BIT(31))
#define RTC_CNTL_EXT_WAKEUP1_LV_M  (BIT(31))
#define RTC_CNTL_EXT_WAKEUP1_LV_V  0x1
#define RTC_CNTL_EXT_WAKEUP1_LV_S  31
/* RTC_CNTL_EXT_WAKEUP0_LV : R/W ;bitpos:[30] ;default: 1'b0 ; */
/*description: 0: external wakeup at low level  1: external wakeup at 
high level*/
#define RTC_CNTL_EXT_WAKEUP0_LV  (BIT(30))
#define RTC_CNTL_EXT_WAKEUP0_LV_M  (BIT(30))
#define RTC_CNTL_EXT_WAKEUP0_LV_V  0x1
#define RTC_CNTL_EXT_WAKEUP0_LV_S  30

von test (Gast)


Lesenswert?

ich hab eine idee, ich setz es und lese die register aus, manchmal sieht 
man den wald nicht

danke

von test (Gast)


Lesenswert?

RTC_CNTL_WAKEUP_STATE_REG habs, danke lesen bildet

von test (Gast)


Lesenswert?

RTC_CNTL_INT_ST_REG das muß es sein, beispiel würde mich trotzdem 
intressieren

von Forist (Gast)


Lesenswert?

Schön, dass wir dir helfen konnten :-)

Manchmal reicht es, einfach nur zuzuhören.

von test (Gast)


Lesenswert?

ich packs nicht...

 I_WR_REG_BIT(RTC_CNTL_STATE0_REG, RTC_CNTL_ULP_CP_SLP_TIMER_EN_S, 0),

den geben die manchmal vor dem wakeup um den ulp zu blockieren, also das 
der nicht weiter läuft, wäre ja logisch wenn da auch das 
esp_sleep_enable_ext1_wakeup zu blockieren ist, also in dem register ... 
aber scheint nicht der fall zu sein

also ich such genau das selbe nur für den esp_sleep_enable_ext1_wakeup,

tip bitte ein tip

von test (Gast)


Lesenswert?

es wird noch bisl abstrusser

so kann man seine eigene wakeup funktion definieren
// Set the wake stub function
  esp_set_deep_sleep_wake_stub(&wake_stub);

wer hat dich wachgerüttelt
rtc_get_reset_reason(0)

das komische ist der wechselt im laufenden betrieb den wachrüttler, kann 
mir da keinen reim drauf machen, alle wakeup laufen über den 
"esp_set_deep_sleep_wake_stub(&wake_stub);" der wechselt von 5 auf 12 
für mich macht das ja sinn woher soll er den wissen was unter ihm war, 
aber da könnt er ja eine nummer beibehalten, kann auch sein das ich noch 
ein fehler drin hab

für erhellende hinweise stehe ich ihnen gern zur verfügung :)
danke

von test (Gast)


Lesenswert?

ist eine komische sache, ich hab es gefunden erklären kann ich mir es 
nur halb

der rtc mem ist beim einschalten nicht 0, und ich hab ein ulp wakeup der 
einen rtc_mem variable als wakeup grund nimmt, wenn ich den einschalte 
ist dort wahrscheinlich ein undefinierter wert drin, der löst dann 
sofort den ulp wakeup aus schneller als der hochfahren kann und startet 
so nicht mit 1 vbat sonder mit 12 software, aber das wakeup aus dem ulp 
müßte 5 sein

!!immer laufendes ulp!! wenn ich das ulp anhalte startet der normal, 
wird wahrscheinlich auch vom board abhängen

ist aber schon komisch, da müßte er ja wissen wo das ulp liegt, ganz hab 
ich es nicht verstanden

von test (Gast)


Lesenswert?

#define RTC_CNTL_SLEEP_EN  (BIT(31))
#define RTC_CNTL_SLEEP_EN_S  31

I_WR_REG_BIT(RTC_CNTL_STATE0_REG, RTC_CNTL_ULP_CP_SLP_TIMER_EN,0)
I_WR_REG_BIT(RTC_CNTL_STATE0_REG, RTC_CNTL_ULP_CP_SLP_TIMER_EN_S, 0),

ich weiß wie es reagiert, aber eine erklärung wäre schön, wann hört die 
kacke auf, gibts denn nicht jemanden der sich erbarmt

!! I_WR_REG_BIT(RTC_CNTL_STATE0_REG, RTC_CNTL_ULP_CP_SLP_TIMER_EN,0) !!
funktioniert besser

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.