Franky |
|
|
|
|
|
|
|
Пункты: 5030 |
Регистрация: 29.06.2010 |
|
|
|
Очень нужно реализовать временную задержку. Что-то вроде void Wait(unsigned long x)
x - задержка в микросекундах;
так в примерах от атмела есть такая функция, но она принимает время в миллисекундах.
эта функция использует переменную timestamp, которая инкрементируется через PIT раз в 1 миллисекунду.
void PIT_Init(unsigned int period, unsigned int pit_frequency)
{
AT91C_BASE_PITC->PITC_PIMR = period? (period * pit_frequency + 8) >> 4 : 0;
AT91C_BASE_PITC->PITC_PIMR |= AT91C_PITC_PITEN;
}
void ConfigurePit(void)
{
// Initialize the PIT to the desired frequency
PIT_Init(PIT_PERIOD, BOARD_MCK / 1000000);
// Configure interrupt on PIT
IRQ_DisableIT(AT91C_ID_SYS);
IRQ_ConfigureIT(AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit);
IRQ_EnableIT(AT91C_ID_SYS);
PIT_EnableIT();
// Enable the pit
PIT_Enable();
}
функция обработчик прерывания от PIT
void ISR_Pit(void)
{
unsigned int status;
// Read the PIT status register
status = PIT_GetStatus() & AT91C_PITC_PITS;
if (status != 0) {
// 1 = The Periodic Interval timer has reached PIV since the last read of PIT_PIVR.
// Read the PIVR to acknowledge interrupt and get number of ticks
//Returns the number of occurrences of periodic intervals since the last read of PIT_PIVR.
timestamp += (PIT_GetPIVR() >> 20);
}
}
Понятно, что период задаётся константой PIT_PERIOD
в примере она равна
#define PIT_PERIOD 1000 //вмикросекундах
когда задаю PIT_PERIOD 1
то ничего не работает(((( в чём может быть дело?
просто хочу в Wait оперировать не миллоисекундами а микросекундами... |
|
|
|
|
|
Valentinus |
|
|
|
|
|
|
|
Пункты: 2138 |
Регистрация: 23.01.2010 |
Пол: Мужчина |
|
|
что значит "ничего не работает" ?
все зависает, или timestamp не увеличивается? |
|
|
|
|
|
Franky |
|
|
|
|
|
|
|
Пункты: 5030 |
Регистрация: 29.06.2010 |
|
|
|
|
|
|
|
Franky |
|
|
|
|
|
|
|
Пункты: 5030 |
Регистрация: 29.06.2010 |
|
|
|
Тем не менне ради интреса есть вопрос.
По когда ставлю PIT_PERIOD 1 // 1 микросекунда
такое ощущение, что он вообще перестаёт работать. Диод не горит. |
|
|
|
|
|
|