Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ISR в NIOSII
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Kuzmi4
Здравствуйте.
Копаю в области прерываний для ниоса.
В принципе после прочтения "n2sw_nii52006.pdf " всё стало более менее понятно, однако есть некоторая что ли неточность в том что вижу и в том что должно бытьв реальности.

Значит имеем DK-CYCII-2C20N. Простой пример - проверяем на нём работу таймера(выставил тикалку на 1 секунду).
код в IDE такой
//
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "altera_avalon_timer.h"
#include "altera_avalon_timer_regs.h"

volatile unsigned char val=1;
//===ISR part===
static void timer_isr (void * context, alt_u32 irqnum )
{
if (val==8)
{
val=1;
}
else
{
val<<=1;
}
IOWR_ALTERA_AVALON_PIO_DATA(LED_PORT_BASE,val);
}
//===END ISR part===

int main (void)
{
//LED - ON
IOWR_ALTERA_AVALON_PIO_DATA(LED_PORT_BASE,val);
//stop timer
IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_BASE,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK);
// Register ISR
alt_irq_register(TIMER_IRQ,(void*)TIMER_BASE,timer_isr);
// Start timer
IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_BASE,
ALTERA_AVALON_TIMER_CONTROL_ITO_MSK |
ALTERA_AVALON_TIMER_CONTROL_CONT_MSK |
ALTERA_AVALON_TIMER_CONTROL_START_MSK);

while (1)
{
}
return 0;
}

Собсно ничего сложного нету - лампочки поочереди должны сменять друг друга 1-2-3-4-1-2-3.....
Вот сдесь что то похожее делают - http://electronix.ru/forum/index.php?s=&am...st&p=362786 - и в принципе пишут что нормально работает.
У меня же немного другая картина - когда заливаю в DK-CYCII-2C20N - то 1-й светодиодиод загорается и нормально горит 1 секунду - а потом начинается чехарда - лампочки начинают одна за одной так быстро мигать что кажется что они все одновременно горят, на дебаге - они загораются одна за одной как положено(но это ж не есть точная проверка..), а вот ести залить через рун - тогда вышеописанная чехарда. wacko.gif
Если убрать старты и стопы таймеров - то же самое.. crying.gif
В принципе грешил на 2-й параметр, но прочитал в "n2sw_nii52006.pdf " - ..can point to any ISR-specific information.. Тут мыли закончились..

Есть у кого какие идеи в какую сторону копать ?
help.gif
RHnd
Точно не помню, но разве прерывание от таймера со самосбросом? Разве флаг не надо сбрасывать в ISR?
Kuzmi4
2 RHnd - спасибо! Помогло smile.gif
Действительно нужно было почистить флаг , который выставляеться в регистре статуса , когда счётчик досчитал до 0
Регистр status , бит - TO.
В итоге всё решила строчка -
//clear flag
IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_BASE, 0x02);

bb-offtopic.gif
Тяжело отвыкаеш от простоты мег -> smile3046.gif ....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.