[elektro] Nuvoton Cortex-M0
hg12345
hg12345 at freemail.hu
Fri Oct 28 08:21:24 CEST 2011
Szia!
ha elfogadsz egy tanácsot, amit nem kell azt ne kösd GND-re!!!!!
- késöbb egyszerűbb használatra fogni a lábat, a nem használt lábaknál érdemes egy pad-et elhelyezni
- emi ennél lényegesebb kisebb a fogyasztása,ha a portot kimenetként nullára állítod, mint bemenet földelve. Zavarérzékenységben nem észrevehető a különbség, mert a lehuzó kapcsolók erősebbek (kisebb elenállásúak mint felhúzók...) Programban meg néhány sor.
Nu .pdf ill ARM... és CMSIS-ben (itt bitenként le van írva!) ha nem találsz erről információt akkor célszerű más gyártoknál szétnézni.... NXP és Energy Micro gyártja ezt a magot. A uC+WIC+DAP+belső számláló egységek mindben ugyanazok, mert azt adja az ARM.
Érdemes letölteni a legujabb CMSIS (2.x) és ezzel dolgozni. A NU amit ad ez nagyon korai verzió.
Amikor meg jelent gondolkoztam a NU használatán aztán más gyártó jobban tetszet.
Bali Zoltan <eltexto at freemail.hu> írta:
>Szia Gábor !>
>
Köszönöm a részletes válaszod.>
>
> Hasonló a probléma DEBUG üzemmódban, a DAP egységnek is van saját >
regisztere ezt kell megfelelően beállítani.>
>
Erről semmit nem találtam, az ARM infós oldalán sem. Vagyis keveset.>
>
>Szerencsés vagy, mert a DEBUG interface SLEEP üzemmódban a gyári >
(RSET) utáni állapotban nem müködik :-) ( ...>
>
Közben rájöttem, nálam azért működik, mert debug alatt nem engedi >
SLEEP-be (pontosabban DEEP SLEEP-be).>
>
>A bemenetnek állított port lebegése miatt akármilyen állapotot vehet >
fel és ez fogyasztással járhat,>
>
Igen, ez volt a probléma. Felhúzókkal már jó. Pedig a nem használt >
kapuk bemenetét mindig GND-re szoktam>
kötni, pont ezek miatt.>
>
>A M0-ban állítható a WIC érzékenysége, fel-le futó élre ezt kéne >
megkeresni...>
>
Hát elvileg be van állítva, itt a forrás:>
>
void main (void)>
{>
/* Unlock protected registers */>
UNLOCKREG();>
>
/* Default HCLK source is from 22MHz ... */>
/* can not disable 22MHZ before change HCLK Source */>
DrvSYS_SetOscCtrl(E_SYS_OSC22M, 1);>
DrvSYS_SetOscCtrl(E_SYS_OSC10K, 1);>
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);>
DrvSYS_SetOscCtrl(E_SYS_XTL32K, 1);>
>
/* Waiting for 12M Xtal stalble */>
DrvSYS_Delay(5000);>
>
/* Set target HCLK from 12MHz and it's between 25MHz~50MHz. */>
DrvSYS_Open(50000*1000);>
/* Set HCKL to HCKL/(n+1) */>
DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0);>
DrvSYS_Delay(5000);>
/* Enable debounce on PB15 */>
// DrvGPIO_EnableDebounce(E_GPB,15);>
/* 2^13 DBCLKSRC_10K cycle interrupt window approx 0.8sec */>
// GPIO_DBNCECON->DBNCECON.DBCLKSEL = 13 ;>
/* RC 10kHz osc. source */>
// GPIO_DBNCECON->DBNCECON.DBCLKSRC = 1 ;>
>
/* 1k pullup on PB15 and button+220R puldown */>
>
/* Make PB15 /INT1 input mode */>
DrvGPIO_Open(E_GPB,15,E_IO_INPUT);>
/* Enable interrupt on /INT1 pin */>
DrvGPIO_EnableEINT1(E_IO_FALLING,E_MODE_EDGE,NULL);>
/* Pull down LED */>
DrvGPIO_ClrBit(E_GPB,0);>
>
while(1)>
{>
/* Shut off LED */>
DrvGPIO_Open(E_GPB,0,E_IO_INPUT);>
/* Wait any time */>
DrvSYS_Delay(50000);>
/* Unlock protected registers */>
UNLOCKREG();>
/* SLEEPDEEP enable */>
SCB->SCR = 4;>
/* PD.WeakUp interrupt disbaled */>
SYSCLK->PWRCON.PD_WU_INT_EN = 0;>
/* SleepDeep wait for cpu _WFI() */>
SYSCLK->PWRCON.PD_WAIT_CPU = 1;>
/* Enable PowerDown mode */>
SYSCLK->PWRCON.PWR_DOWN_EN = 1;>
>
/* Lock protected registers */>
LOCKREG();>
/* Wait any time */>
DrvSYS_Delay(5000);>
/* Now deep sleep */>
__WFI();>
/* Make PB0 (LED) output */>
DrvGPIO_Open(E_GPB,0,E_IO_OUTPUT);>
/* Wait any time */>
DrvSYS_Delay(2000000);>
}>
}>
>
Már áttettem az INT1-re, hátha, de ugyanaz. Ha a gombot>
lenyomva tartom, felvillan a led rövid időre és elalszik,>
ekkor megy el deep sleep-be. Ha még ekkor is lenyomva>
volt a gomb, többet nem éled fel. Ha a led kialvás előtt>
elengedem akkor a következő nyomásra feléled.>
Próbáltam a GPIO Debounce-t is, ICE alatt jól működik,>
érthetően, mert akkor nem megy deep sleep-be és a _WFI()>
miatt működik jól. Viszont ICE nélkül újraindítva, a gombra azonnal>
felébred, nem várja ki a debounce "window" végét ~0.8sec.>
Szóval ez sem igazán úgy működik ahogy elvárnám.>
>
Átgondoltam, végül is így is tudom használni.>
>
Köszi>
>
Üdv. Zoli>
>
>
>
2011. 10. 26. 22:07 keltezéssel, hg12345 írta:>
> Szia>
>>
> A M0-ban állítható a WIC érzékenysége, fel-le futó élre ezt kéne megkeresni...>
> Hasonló a probléma DEBUG üzemmódban, a DAP egységnek is van saját regisztere ezt kell megfelelően beállítani.>
> nagyobb probléma erről nem írnak a NU .pdf, ezek a ARM, honlapjáról letölthetőek, ill CMSIS header és .C file-k ezeket a definiciókat és ezt kezelő függvényeket tartalmazzák.>
>>
> Szerencsés vagy, mert a DEBUG interface SLEEP üzemmódban a gyári (RSET) utáni állapotban nem müködik :-) (kondugurálni, kell mert SLEEP állapotban is órajelet kell kapnia a DAP-nak.)>
>>
>>
> Amit irsz a perifériákról az igaz, de nem csak itt hanem minden uC-ben!>
>>
> A bemenetnek állított port lebegése miatt akármilyen állapotot vehet fel és ez fogyasztással járhat, ez tetszöleges értéket vehet fel, attól függően milyen környezeti hatások érik... pl közelisd meg az ujjaddal!>
> Ha fel és lehúzó ellenállásokat bekacspolva hagyod, ez egyértelmű fogyasztás.>
>>
> Ha kimenetnek állítod a portot akkor az fixen kiadja jelet, és ha másik oldalon nincs fogyasztás akkor nem is folyik áram, mert ezek mind CMOS kapcsolókkal épülnek fel.... Ha megoldható még a bemeneteket is kimenet kell állítani mikor alszik a rendszer, ha megoldható, ha nem akkor célszerű áttervezni.>
>>
> A modern uC (mint pl.: ARM CORTEX Mxxx) a perifériák egyenként kikapcsolhatóak és elvehető tülük az órajel. Ezzel további uA lehet megspórolni.>
>>
> Bali Zoltan<eltexto at freemail.hu> írta:>
> >
>> Hali!>>
>>>
>> >
> PowerDown módot még sohasem használtam>>
> procikon. Normális, hogy a GPIO interrupt>>
> csak akkor ébreszti a procit, ha lefekvés>>
> előtti IO szint, (lefutó élre beállításnál) magas.>>
> Ha lefekvés előtt alacsonyat érzékelt, akkor>>
> a lefutó élre nem kel fel.>>
> Ez normális vagy elkeféltem valamit ?>>
> ICE alatt viszont jól működik. Viszont>>
> akkor nem megy el mélyen aludni, mérés>>
> szerint fogyaszt.>>
> >
>> >
> Apropó, fogyasztás. A mélyen alvó módban, csak>>
> ha a portbitek módját, a reset szerint hagyom,>>
> akkor hajlandó ~20uA körül fogyasztani.>>
> Viszont ebben a port módban ( Quasi Bidir)>>
> ~50uA felhúzók vannak, amit szívnak a külső>>
> táplálás nélkül levő perifériák -> már le is merült>>
> az elemem :). Viszont, ha a nagy impedanciás>>
> input módba teszem a bemeneteket, akkor>>
> felmegy a fogyasztás alváskor. Attól függően,>>
> mennyi portbitet konfigolok inputra, úgy nő a>>
> fogyasztás. Már másik módokat is próbáltam,>>
> de mindig nő a fogyasztás. Nem értem. Valamit>>
> biztos nem jól csinálok. Ölteletek ?>>
> >
>> >
> Köszi>>
> >
>> >
>
----------------------------------------->
elektro[-flame|-etc]>
More information about the Elektro
mailing list