Пришелец 0 7 октября, 2006 Опубликовано 7 октября, 2006 · Жалоба arm AT91sam7s256 + FREERTOS Пытаюсь использовать прерывания от таймера 0. - прерывания не возникают :blink: настраиваю таймер и AIC как в IAR овском примере проекта с прерываниями (который без RTOS на плате работает) В чём могут быть грабли :unsure: - подскажите кто знает Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 7 октября, 2006 Опубликовано 7 октября, 2006 · Жалоба arm AT91sam7s256 + FREERTOS Пытаюсь использовать прерывания от таймера 0. - прерывания не возникают :blink: настраиваю таймер и AIC как в IAR овском примере проекта с прерываниями (который без RTOS на плате работает) В чём могут быть грабли :unsure: - подскажите кто знает Заранее спасибо! Таймер 0 используется для генерации тиков планировщика. Смотри функцию static void prvSetupTimerInterrupt( void ) в файле port.c По прерыванию таймера 0 должен вызыватся обработчик прерывания vPreemptiveTick Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 7 октября, 2006 Опубликовано 7 октября, 2006 · Жалоба Для этой цели ведь используется PIT таймер - он и предназначен специально для этого. А я говорю про TC0 - это ведь разные вещи ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 7 октября, 2006 Опубликовано 7 октября, 2006 · Жалоба Для этой цели ведь используется PIT таймер - он и предназначен специально для этого. А я говорю про TC0 - это ведь разные вещи ??? Вы правы я перепутал с портом для LPC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 октября, 2006 Опубликовано 9 октября, 2006 · Жалоба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 октября, 2006 Опубликовано 9 октября, 2006 · Жалоба таймер тикает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 10 октября, 2006 Опубликовано 10 октября, 2006 · Жалоба таймер тикаетНасколько я помню там надо каждый обработчик вызывать из АСМ-обертки. А не видя кода советовать что-либо очень тяжело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 10 октября, 2006 Опубликовано 10 октября, 2006 · Жалоба да асм обёртка есть : vTimerISREntry: portSAVE_CONTEXT ; Save the context of the current task. bl timer0_c_irq_handler ; Call the ISR routine. portRESTORE_CONTEXT ; Restore the context of the current task - ; which may be different to the task that ; was interrupted. вот обработчик на C: void timer0_c_irq_handler(void) { AT91PS_TC TC_pt = AT91C_BASE_TC0; unsigned int dummy; //* Acknowledge interrupt status dummy = TC_pt->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy; // count_timer0_interrupt++; //* Read the output state vParTestToggleLED(3); } Настройка таймера и прерываний: void soft_uart_ini(void) { unsigned int dummy; portENTER_CRITICAL(); { //* First, enable the clock of the TIMER AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_TC0 ); //* Disable the clock and the interrupts AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF; //* Clear status bit dummy = AT91C_BASE_TC0->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy; //* Set the Mode of the Timer Counter AT91C_BASE_TC0->TC_CMR = 4; //* Enable the clock AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN; AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, vTimerISREntry); AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; } portEXIT_CRITICAL(); } Ни светодиодом не моргает ни на точках останова не останавливается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 10 октября, 2006 Опубликовано 10 октября, 2006 · Жалоба Ну вот :( теперь и иаровский пример с прерываниями от таймеров не работает. Вообще ничего не понимаю - ничего кажется там не менял. :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 10 октября, 2006 Опубликовано 10 октября, 2006 (изменено) · Жалоба Ну вот :( теперь и иаровский пример с прерываниями от таймеров не работает. Вообще ничего не понимаю - ничего кажется там не менял. :cranky: А теперь вспоминай: Отладку внутрисхемную делал? Точку останова внутри обработчика прерывания ставил? После остановки в этой точке прекращал отладку? Если да, попробуй сделать так: В начале программы до глобального разрешения прерываний вставь строчку AT91C_BASE_AIC->AIC_EOICR = 0; // Reset AIC logic или в .mac добавь в execUserReset() строчки __writeMemory32(0xffffffff,0xFFFFF130,"Memory"); ..... __writeMemory32(0xffffffff,0xFFFFF130,"Memory"); // всего 8 раз. Изменено 10 октября, 2006 пользователем Сергей Борщ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 27 октября, 2006 Опубликовано 27 октября, 2006 · Жалоба AT91C_BASE_AIC->AIC_EOICR = 0; стоит такая штука уже static void prvSetupHardware( void ) { /* When using the JTAG debugger the hardware is not always initialised to the correct default state. This line just ensures that this does not cause all interrupts to be masked at the start. */ AT91C_BASE_AIC->AIC_EOICR = 0; /* Most setup is performed by the low level init function called from the startup asm file. */ /* Configure the PIO Lines corresponding to LED1 to LED4 to be outputs as well as the UART Tx line. */ AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK | (1<<1) | (1<<27) | (1<<24)); /* Enable the peripheral clock. */ AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Вообще странно - никак не хочет работать тот пример иаровский с прерываниями от таймеров, а раньше работал :cranky: Может ли так погореть ARM ??? :twak: или это проблема кривых рук :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба Проблема оказалась вот в чём: RTOS компилируется в THUMB инструкциях (в арм почему то не работает - не разбирался) но прерывания у неё описываются в АРМ инструциях ф-ция прерывания от таймера была на С соответственно в THUMB поставил _arm перед объявлением обработчика и всё пошло!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kail 0 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба Да уж... Сочуствую :). Наверное всю голову поломал. Такие ошибки искать - полная попа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться