Юрий_СВ (05.03.2013 20:01 - 20:03, просмотров: 721) ответил КТ на Это типа :"Пастернака не читал но осуждаю..." ? Что же мил человек не понравилось Вам в библиотеках от STM? Сделаны добротно, есть мощный хелп, куча примеров. Хочется велосипед поизобретать? Если не разобрались, не учите плохому других.
1) На счёт "Пастернака не читал но осуждаю..." - учите мат.часть и не плодите мифы (ссылка) 2) Вы лучше меня знаете что я читал, а что нет... http://lurkmore.to/%cd%e5_%f7%e8%f2%e0%eb,_%ed%ee_%ee%f1%f3%e6%e4%e0%fe
Если вам нравится когда использование библиотек приводит к двум страницам текста, там где с регистрами 10 строк - это ваше дело.
(н-р, настройка портов и синхронизации)
Но сами библиотеки просто грязно написаны студентами.
Как такой кусок:
====================================================
/* Set CR bits depending on hclk value */
if((hclk >= 20000000)&&(hclk < 35000000))
{
/* CSR Clock Range between 20-35 MHz */
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16;
}
else if((hclk >= 35000000)&&(hclk < 60000000))
{
/* CSR Clock Range between 35-60 MHz */
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26;
}
else if((hclk >= 60000000)&&(hclk < 100000000))
{
/* CSR Clock Range between 60-100 MHz */
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;
}
else if((hclk >= 100000000)&&(hclk < 150000000))
{
/* CSR Clock Range between 100-150 MHz */
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;
}
else /* ((hclk >= 150000000)&&(hclk <= 168000000)) */
{
/* CSR Clock Range between 150-168 MHz */
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;
}
---------------
Я бы написал так:
---------------
// Configure the ETHERNET CSR Clock Range - Set CR bits depending on hclk value
do // sy
{
if(hclk < 20000000) break; // нужно ли ? так в оригинальном файле
if(hclk < 35000000) {tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; break;} // 20- 35 MHz
if(hclk < 60000000) {tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; break;} // 35- 60 MHz
if(hclk < 100000000){tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; break;} // 60-100 MHz
if(hclk < 150000000){tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; break;} // 100-150 MHz
tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; // 150-168 MHz
} while(0);
ETH->MACMIIAR = (uint32_t)tmpreg;
Или такой:
========================================================
/* We wait for linked status... */
do
{
timeout++;
} while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
/* Return ERROR in case of timeout */
if(timeout == PHY_READ_TO)
{
return ETH_ERROR;
}
---------------
Я бы написал так:
---------------
while(1) // wait for linked status
{
if( (++timeout) >= PHY_READ_TO) return ETH_ERROR; // timeout
if(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) break;
}