Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:4
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:8
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9260-SIMXXX
Временная задержка
Franky
Добавлено 27.02.2011 11:10
0
Сообщение: 1
Franky
5

Пункты: 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
Добавлено 28.02.2011 09:17 Сообщение: 2
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
что значит "ничего не работает" ?
все зависает, или timestamp не увеличивается?
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 28.02.2011 13:02 Сообщение: 3
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
На ноге ничего нет.
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 28.02.2011 18:01 Редактировалось 28.02.2011 23:03 Сообщение: 4
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
Тем не менне ради интреса есть вопрос.

По когда ставлю PIT_PERIOD 1 // 1 микросекунда

такое ощущение, что он вообще перестаёт работать. Диод не горит.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9260-SIMXXX