реклама на сайте
подробности

 
 
> PIT на AT91SAM9G45
savt
сообщение Nov 11 2011, 03:41
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 11-11-11
Пользователь №: 68 249



Понадобилось организовать в программе функцию таймерной паузы. Решил попробовать сделать это на PITе (Periodic Interval Timer). Для этих целей взял с сайта atmel следующий пример кода:

CODE
//------------------------------------------------------------------------------
/// Handler for PIT interrupt. Increments the timestamp counter.
//------------------------------------------------------------------------------
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);
}
}

//------------------------------------------------------------------------------
/// Configure the periodic interval timer (PIT) to generate an interrupt every
/// millisecond.
//------------------------------------------------------------------------------
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();
}

//------------------------------------------------------------------------------
/// Waits for the given number of milliseconds (using the timestamp generated
/// by the SAM7 & SAM9 microcontrollers's PIT, or SAM3's microcontrollers's system tick).
/// \param delay Delay to wait for, in milliseconds.
//------------------------------------------------------------------------------
void Wait(unsigned long delay)
{
volatile unsigned int start = timestamp;
unsigned int elapsed;
do {
elapsed = timestamp;
elapsed -= start;
}
while (elapsed < delay);
}


Собственно здесь: ISR_Pit - обработчик прерывания, ConfigurePit - конфигурирование PIT и System Controller, Wait - процедура таймерной задержки.

При выполнении данного кода, а точнее при выполнении процедуры IRQ_EnableIT(AT91C_ID_SYS), контроллер "виснет", т.е. постоянно уходит в прерывание (прерывания обрабатываются) и не выполняется дальнейший код. Пробовал запускать программу в режиме отладки через jtag emulator в sram, так же пробовал грузить и запускать через SAM-BA по jtag-у в sram.
Где в данном случае подвох? Подскажите пожалуйста знающие люди.

Сообщение отредактировал IgorKossak - Nov 14 2011, 10:26
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- savt   PIT на AT91SAM9G45   Nov 11 2011, 03:41
- - DmitryM   Цитата(savt @ Nov 11 2011, 06:41) [i]//--...   Nov 11 2011, 03:52
|- - savt   Цитата(DmitryM @ Nov 11 2011, 07:52) AIC-...   Nov 11 2011, 08:15
|- - DmitryM   Цитата(savt @ Nov 11 2011, 11:15) Добавил...   Nov 11 2011, 10:30
|- - savt   Цитата(DmitryM @ Nov 11 2011, 14:30) Зави...   Nov 14 2011, 08:47
|- - DmitryM   Цитата(savt @ Nov 14 2011, 11:47) Я испол...   Nov 14 2011, 12:10
|- - savt   Если процедуру обработки прерывания описать следую...   Nov 15 2011, 10:56
|- - DmitryM   Цитата(savt @ Nov 15 2011, 13:56) irqHand...   Nov 15 2011, 11:21
|- - savt   У меня в программе больше ни кем не используется. ...   Nov 16 2011, 02:34
|- - DmitryM   Цитата(savt @ Nov 16 2011, 05:34) У меня ...   Nov 16 2011, 05:42
|- - savt   Отладчиком пользуюсь. Protection Mode не активиро...   Nov 16 2011, 08:58
|- - DmitryM   Цитата(savt @ Nov 16 2011, 11:58) Если в ...   Nov 16 2011, 10:32
|- - savt   Попробовал выключить оптимизацию и убрать автомат ...   Nov 17 2011, 02:42
|- - DmitryM   Запрещать прерывания от периферии нужно записью в ...   Nov 17 2011, 05:32
|- - savt   Пробовал размещать инструкцию (ldr pc, [pc, #-0xF2...   Nov 17 2011, 10:03
|- - DmitryM   Цитата(savt @ Nov 17 2011, 13:03) Пробова...   Nov 18 2011, 03:42
- - DpInRock   ЦитатаЕсли убрать aicregs->AIC_EOICR = 0; либо ...   Nov 18 2011, 08:31
|- - savt   Цитата(DpInRock @ Nov 18 2011, 12:31) Они...   Nov 22 2011, 08:51
- - savt   Мне вот интересно. Я взял пример кода с официально...   Nov 23 2011, 06:47
|- - DmitryM   Цитата(savt @ Nov 23 2011, 09:47) Мне вот...   Nov 23 2011, 08:56
- - savt   GCC 4.6.0. Пробовал строить их оригинальный проект...   Nov 24 2011, 02:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016