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

 
 
 
Reply to this topicStart new topic
> ISR в NIOSII
Kuzmi4
сообщение Apr 10 2008, 12:28
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Здравствуйте.
Копаю в области прерываний для ниоса.
В принципе после прочтения "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
Go to the top of the page
 
+Quote Post
RHnd
сообщение Apr 10 2008, 14:31
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Точно не помню, но разве прерывание от таймера со самосбросом? Разве флаг не надо сбрасывать в ISR?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Apr 10 2008, 14:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



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

bb-offtopic.gif
Тяжело отвыкаеш от простоты мег -> smile3046.gif ....
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:42
Рейтинг@Mail.ru


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