История изменений
Исправление shkolnick-kun, (текущая версия) :
Потому, что надо было делать как минимум вот так:
void delay(unsigned long p)
{
unsigned long i;
for (i = 0; i < p; i++)
{
__asm__ __volatile__ ("nop":::);
}
}
а лучше - вот так:
#define TMR_CLEAR(a) (a = DWT->CYCCNT)
#define TMR_USEC(a) ((DWT->CYCCNT - a)/(SystemCoreClock/1000000u))
void delay(uint32_t thr)
{
uint32_t t;
TMR_CLEAR(t);
while (TMR_USEC(t) < thr)
{
__asm__ __volatile__ ("nop":::);
}
}
/* И в начале main: */
/* Enable cycle counter */
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= 1;
Исправление shkolnick-kun, :
Потому, что надо было делать как минимум вот так:
void delay(unsigned long p)
{
unsigned long i;
for(i = 0; i < p ; i++)
{
__asm__ __volatile__ ("nop":::);
}
}
а лучше - вот так:
#define TMR_CLEAR(a) (a = DWT->CYCCNT)
#define TMR_USEC(a) ((DWT->CYCCNT - a)/(SystemCoreClock/1000000u))
void delay(uint32_t thr)
{
uint32_t t;
TMR_CLEAR(t);
while(TMR_USEC(t) < thr)
{
__asm__ __volatile__ ("nop":::);
}
}
/* И в начале main: */
/* Enable cycle counter */
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= 1;
Исходная версия shkolnick-kun, :
Потому, что надо было делать как минимум вот так:
void delay(unsigned long p)
{
unsigned long i;
for(i = 0; i < p ; i++)
{
__asm__ __volatile__ ("nop":::);
}
}
а лучше - вот так:
#define TMR_CLEAR(a) (a = DWT->CYCCNT)
#define TMR_USEC(a) ((DWT->CYCCNT - a)/(SystemCoreClock/1000000u))
void delay(uint32_t thr)
{
uint32_t t;
TMR_CLEAR(t);
while(TMR_USEC(t) < thr)
{
__asm__ __volatile__ ("nop":::);
}
}
/*И в начале main:*/
/*Enable cycle counter*/
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= 1;