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