PIC32 rychlost atd...

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Únor 5 19:34:19 CET 2013


Nevim jestli si rozumime, nebo co resime...
Ale konkretni priklad (prevzaty), treba kousek inicializace STM32F4 - 
Inicializace GPIO je ponekud dost kosata, ale zase naprosto prehledna a 
univerzalni, hned jsem si to oblibil, knihovny samozrejme pouzivam jen, 
pokud jsou ve zdrojovem tvaru. Pripadne se z nich to podstatne da 
vykuchat ale jeste nebyl duvod - leda, ze by se setrilo kazdym kilem 
pameti. Proc zkoumat kazdy registr a jejich zavislosti, kdyz je to z 
komentaru ke konstantam a funkcim zrejme, jak je pouzit...

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
     GPIO_InitTypeDef  GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin   = LED_GREEN | LED_ORANGE | LED_RED | 
LED_BLUE;
     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
     GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
     GPIO_Init(GPIOD, &GPIO_InitStructure);

pricemz:

void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState 
NewState)
{
   /* Check the parameters */
   assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));

   assert_param(IS_FUNCTIONAL_STATE(NewState));
   if (NewState != DISABLE)
   {
     RCC->AHB1ENR |= RCC_AHB1Periph;
   }
   else
   {
     RCC->AHB1ENR &= ~RCC_AHB1Periph;
   }
}

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
   uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;

   /* Check the parameters */
   assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
   assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
   assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
   assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));

   /* -------------------------Configure the port pins---------------- */
   /*-- GPIO Mode Configuration --*/
   for (pinpos = 0x00; pinpos < 0x10; pinpos++)
   {
     pos = ((uint32_t)0x01) << pinpos;
     /* Get the port pins position */
     currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;

     if (currentpin == pos)
     {
       GPIOx->MODER  &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
       GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << 
(pinpos * 2));

       if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || 
(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
       {
         /* Check Speed mode parameters */
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));

         /* Speed mode configuration */
         GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
         GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << 
(pinpos * 2));

         /* Check Output mode parameters */
assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));

         /* Output mode configuration*/
         GPIOx->OTYPER  &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;
         GPIOx->OTYPER |= 
(uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
       }

       /* Pull-up Pull down resistor configuration*/
       GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
       GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << 
(pinpos * 2));
     }
   }
}




Dne 5.2.2013 19:19, Petr Labaj napsal(a):
> Ano, jde to. Ale je treba si to v hlave srovnat tak, ze to nevadi.
> Mne se to zatim nepovedlo.
>
> Mel jsem kdysi spolupracovnika (mel zlate ruce), ktery rikaval,
> ze vyrobek musi byt krasny hlavne vevnitr. Ze udelat neco pekne
> navenek umi kazdy, ale teprve podle toho, jak je to udelane
> vevnitr se pozna, jestli to delal frajer.
>
> Tak az takhle silne to u me nefunguje, ale presto je pro me
> obtizne zkousnutelne kdyz vim, ze je neco udelane spatne.
> A to i kdyz to na prvni pohled neni videt a funguje to. Vetsinou
> to casem nevydrzim a predelam.
>
> Uznavam, ze je to pracne a nepohodlne. Ale stareho psa ...
>
> PL
>
> *********************************************
>
> From: "Jan Waclawek" <konfera na efton.sk>
> To: "HW-news" <hw-list na list.hw.cz>
> Sent: Tuesday, February 05, 2013 6:29 PM
> Subject: Re: PIC32 rychlost atd...
>
>
>> Ale pokud bych to mel povazovat za vyrobek (a nikoli za docasny pomocny
>> nastroj), tak to urcite v Basicu nenapisu.
> A preco vlastne nie? Ved je to len jeden z moznych rieseni. Pre mnoho situacii
> neoptimalnych, ale urcite sa najdu situacie, ked to optimalne riesenie aj
> pre "vyrobok" je.
>
> Ja by som to tiez tak nepisal, ale len preto, lebo som sa este s ulohou, ktora by
> sa takto riesila optimalne, nestretol. Ale neodsudzoval by som to len tak ciste
> z principu.
>
> Inak pan kolega Buchta podla vsetkeho riesi dominantne prave take ulohy, kde
> ten BASIC, pardon, kniznice, vhodne su. Tak co.
>
> wek
>
>
> On Tue, 5 Feb 2013 17:41:57 +0100
> "Petr Labaj" <labaj na volny.cz> wrote:
>
>> Hlasim se do Vaseho tabora.
>> Knihovny pouzivam jen jako studijni material, kdyz z mi datasheetu neni
>> jasne, jak neco funguje.
>> Pouziti knihoven (nebo nedejboze jeste predchystanych examples) dusevne
>> zvladam jen v pripade nejakeho provizorniho reseni, ktere pak bud zahodim,
>> nebo prodelam. Neco podobneho, jako kdyz clovek napise program v Basicu.
>> Pokud potrebuju jednorazove neco spocitat, tak i Basic muze vyhovet.
>> Ale pokud bych to mel povazovat za vyrobek (a nikoli za docasny pomocny
>> nastroj), tak to urcite v Basicu nenapisu.
>>
>> PL
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list