[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