Ник:
Пароль:

Контакты

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

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » ARM
PIT на AT91SAM9G45
Krom
Добавлено 24.11.2011 12:41
0
Сообщение: 1
Krom
3

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

Код
//------------------------------------------------------------------------------
/// 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), контроллер "виснет", т.е. постоянно уходит в прерывание (прерывания обрабатываются) и не выходит в исходный код программы. PIT считает как положено, но дальнейшая программа не выполняется.
Пробовал собирать проект в GNU, Keil, IAR - результат везде одинаковый. Гружу через jtag.
Кто-нибудь пробовал организовывать PIT на данной плате? В чем может быть проблема? Подскажите пожалуйста.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 24.11.2011 15:47 Редактировалось 24.11.2011 15:49 Сообщение: 2
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Цитата

Кто-нибудь пробовал организовывать PIT на данной плате? В чем может быть проблема? Подскажите пожалуйста.


Использовал PIT для системного таймера при портировании разных микроядер на g45 и на 9260, частично смотрел примеры - никаких проблем не замечал. Напишите точнное название архива с примером (лучше тот что для gcc )- там вроде все элментарно.
Спуститься к концу Подняться к началу
Персональная информация
Krom
Добавлено 25.11.2011 05:12 Сообщение: 3
Krom
3

Пункты: 366
Регистрация: 11.10.2011
Брал из архива at91sam9m10-ek-softpack-1.9, пример getting-started-project по этому адресу: softpack. В этом софтпаке примеры для 3-х вышеупомянутых сред разработки.

Вот именно, что все вроде элементарно и понятно, а работать как положено не хочет. Я подозреваю, что дело в AIC. Видимо он не в тот режим входит. Либо в инициализации что-то не так в board_cstartup и LowLevelInit.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 25.11.2011 09:01 Редактировалось 25.11.2011 10:56 Сообщение: 4
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Запустил пример на местной плате стартеркит (бинарник который там идет) в sram, загружал с SD (сделать первичный раздел fat32 и разомкнуть перемычку NAND_CS) - просто переименовал getting-started-project-at91sam9m10-ek-at91sam9m10-sram.bin в BOOT.BIN
Цитата

Welcome to minicom 2.4

OPTIONS: I18n
Compiled on Jan 25 2010, 06:49:09.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

-- Getting Started Project 1.9-rc1 --
-- AT91SAM9M10-EK
-- Compiled: Apr 27 2010 15:51:38 --
-I- configure pit.
1 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2



по циферкам валящим в терминал очевидно что ничего не виснет.
Не забывайте про то что на плате стоит DDR не такая как на -EK, поэтому если хотите использовать ее - нужно править инициализацию - попросту заменить кодом инита DDR из bootstrap идущем в bsp c платой
Спуститься к концу Подняться к началу
Персональная информация
Krom
Добавлено 25.11.2011 11:22 Сообщение: 5
Krom
3

Пункты: 366
Регистрация: 11.10.2011
Я пробовал грузить и запускать в sram через jtag из отладчика, также пробовал грузить через samba с помощью jtag и запускать go 0x300000. Может ли это влиять на ситуацию?

Попробовал запустить идущий в примере бинарник для sram, загружал с SD как в вашем примере, выводит в терминал следующее:

Код
-- Getting Started Project 1.9-rc1 --
-- AT91SAM9M10-EK
-- Compiled: Apr 27 2010 15:51:38 --
-I- configure pit.


С платой какие-то проблемы?
Спуститься к концу Подняться к началу
Персональная информация
Krom
Добавлено 25.11.2011 11:38 Сообщение: 6
Krom
3

Пункты: 366
Регистрация: 11.10.2011
Попробовал поставить другую плату. Все заработало. Видимо все-таки с платой проблемы были. Есть на ней какой-нибудь hardreset чтобы вернуть к заводским настройкам? Или перешить ее как-то можно в рабочее состояние? Linux который стоял на ней тоже не грузится.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 25.11.2011 11:52 Сообщение: 7
sasamy
4.71

Пункты: 83534
Регистрация: 14.08.2009
Цитата

Или перешить ее как-то можно в рабочее состояние?


Если на ней не работает 100% рабочий код с встроенной sram - о какой перепрошивке может идти речь ? С другой стороны если код загружается с SD и работает DBGU - о повреждении контроллера тоже вроде речи нет :) В общем случай запутаный, как восстановить начальную прошивку - должно быть написано где-то в BSP от платы, смотрите там.
Спуститься к концу Подняться к началу
Персональная информация
Krom
Добавлено 25.11.2011 13:01 Сообщение: 8
Krom
3

Пункты: 366
Регистрация: 11.10.2011
Ок, спасибо.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » ARM