Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы...

 
Опции темы
Непрочитано 12.11.2010, 17:50  
sergurets
Прохожий
 
Регистрация: 12.11.2010
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergurets на пути к лучшему
По умолчанию Прерывания по таймеру ADSP 21065l

Здравствуйте форумчане!
Есть проблема: нужно, чтобы ADSP 21065l работал только по прерыванию по таймеру - то есть раз например 200 в секунду выполнял один и тот же алгоритм. Идеально бы это все на С, С++. Опыта работы у меня мало. Сам не могу разобраться
Реклама:
sergurets вне форума  
Непрочитано 13.11.2010, 01:27  
ALEX__A
Почётный гражданин KAZUS.RU
 
Регистрация: 30.10.2006
Сообщений: 1,755
Сказал спасибо: 0
Сказали Спасибо 80 раз(а) в 56 сообщении(ях)
ALEX__A на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

Большинство прерываний в ЦСП являются маскируемыми. Таким образом, Вы можете запретить обрабатывать процессору все прерывания, кроме необходимого Вам прерывания по таймеру.

С уважением, Алексей.
ALEX__A вне форума  
Сказали "Спасибо" ALEX__A
sergurets (13.11.2010)
Непрочитано 13.11.2010, 12:34  
sergurets
Прохожий
 
Регистрация: 12.11.2010
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergurets на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

Спасибо Алексей!

Я более-менее понимаю сам процесс. Незнаю просто как реализовать для моего процессора. Работаю я в Visual DSP. Может кто сталкивался и имеет фрагмент кода
sergurets вне форума  
Непрочитано 15.11.2010, 17:42  
hacker7
Вид на жительство
 
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
hacker7 на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

имею печальный опыт работы с этими процессорами. Таймер прерывает некорректно и невовремя.
Вышли из ситуации разделением программы на ветви, время исполнения которых одинаковое. Исходя из времени исполнения команд. Опрос.
Естественно, не на C
hacker7 вне форума  
Непрочитано 22.11.2010, 16:26  
E-Male
Прохожий
 
Регистрация: 27.01.2006
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
E-Male на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

По VisualDSP.
Ищите стандартный пример в папке, соответствующей Вашему процессору. Я для своего нашел:
"c:\Program Files\Analog Devices\VisualDSP 5.0\Blackfin\Examples\ADSP-BF537 EZ-Kit Lite\Services\Timers\TimerWithCallback"
Для вашего процессора работа с таймерами ничем отличаться не будет
Фрагмент кода из примера:
Код:
static void Callback(void *AppHandle,u32  Event,void *pArg)	
{

		switch ( (u32)pArg ) {
		case  ADI_TMR_GP_TIMER_0:
			ezToggleLED(EZ_FIRST_LED);
			break;
			
		case  ADI_TMR_GP_TIMER_1:
			ezToggleLED(EZ_FIRST_LED+1);
			break;
			
		default:
			ezToggleLED(EZ_FIRST_LED+2);
			break;
		
	}
	// return
}

/**************************************************  **************************
  Function:	Init_Timers	
				
  Set up timers for PWM mode and enale them.
**************************************************  ****************************/

void InitTimers(void)
{
	
	//Setting up command table for Timer 0
	ADI_TMR_GP_CMD_VALUE_PAIR Timer0ConfigurationTable [] = {
		{ ADI_TMR_GP_CMD_SET_TIMER_MODE,			(void *)0x01			},
		{ ADI_TMR_GP_CMD_SET_COUNT_METHOD,			(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE,		(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE,	(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_PERIOD,				(void *)0x08000000		},
		{ ADI_TMR_GP_CMD_SET_WIDTH, 				(void *)0x00400000		},
		{ ADI_TMR_GP_CMD_END,						NULL					}, 
	};
	
	//Setting up command table for Timer 1
	ADI_TMR_GP_CMD_VALUE_PAIR Timer1ConfigurationTable [] = {
		{ ADI_TMR_GP_CMD_SET_TIMER_MODE,			(void *)0x01			},
		{ ADI_TMR_GP_CMD_SET_COUNT_METHOD,			(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE,		(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE,	(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_PERIOD,				(void *)0x04000000		},
		{ ADI_TMR_GP_CMD_SET_WIDTH, 				(void *)0x00400000		},
		{ ADI_TMR_GP_CMD_END,						NULL					}, 
	};
		
	//Setting up command table for Timer 2
	ADI_TMR_GP_CMD_VALUE_PAIR Timer2ConfigurationTable [] = {
		{ ADI_TMR_GP_CMD_SET_TIMER_MODE,			(void *)0x01			},
		{ ADI_TMR_GP_CMD_SET_COUNT_METHOD,			(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE,		(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE,	(void *)TRUE			},
		{ ADI_TMR_GP_CMD_SET_PERIOD,				(void *)0x02000000		},
		{ ADI_TMR_GP_CMD_SET_WIDTH, 				(void *)0x00400000 		},
		{ ADI_TMR_GP_CMD_END,						NULL					}, 
	};
	
	//Open Timer 0 for access
	adi_tmr_Open(ADI_TMR_GP_TIMER_0);
	
	//Program timer 0 with Timer 0 table
	adi_tmr_GPControl(ADI_TMR_GP_TIMER_0, ADI_TMR_GP_CMD_TABLE, Timer0ConfigurationTable);
	
	//Open Timer 1 for access
	adi_tmr_Open(ADI_TMR_GP_TIMER_1);
	
	//Program timer 1 with Timer 1 table
	adi_tmr_GPControl(ADI_TMR_GP_TIMER_1, ADI_TMR_GP_CMD_TABLE, Timer1ConfigurationTable);
	
	//Open Timer 2 for access
	adi_tmr_Open(ADI_TMR_GP_TIMER_2);
	
	//Program timer 2 with Timer 2 table
	adi_tmr_GPControl(ADI_TMR_GP_TIMER_2, ADI_TMR_GP_CMD_TABLE, Timer2ConfigurationTable);
		
	
	//enable callbacks for timer 0
	adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_0,TRUE,(v  oid *)ADI_TMR_GP_CMD_START,NULL,Callback);
	
	//enable callbacks for timer 1
	adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_1,TRUE,(v  oid *)ADI_TMR_GP_CMD_START,NULL,Callback);
	
	//enable callbacks for timer 2
	adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_2,TRUE,(v  oid *)ADI_TMR_GP_CMD_START,NULL,Callback);
	
	//enable timer 0, timer 1 and timer 2
	adi_tmr_GPGroupEnable(ADI_TMR_GP_TIMER_0 | ADI_TMR_GP_TIMER_1 | ADI_TMR_GP_TIMER_2,TRUE);		
}
 
	
/**************************************************  *******************
*
*	Function:	main
*
**************************************************  *******************/

void main(void) {
	
	u32 ResponseCount;
	u32 i; //loop variable
	
	// initialize the EZ-Kit
	ezInit(1);	
	
	// initialize interrupt manager
	ezErrorCheck(adi_int_Init(IntMgrData, sizeof(IntMgrData), &ResponseCount, NULL));
		
	//Initialize the flag service, memory is not passed because callbacks are not being used
	ezErrorCheck(adi_flag_Init(NULL, 0, &ResponseCount, NULL));
	
	for (i = EZ_FIRST_LED; i ‹ EZ_NUM_LEDS; i++){
        ezInitLED(i);
	}
	
	// initialize the Timer manager
	ezErrorCheck(adi_tmr_Init(NULL));
	//Run forever
	
	//Initialize all of the timers
	InitTimers();
	
	
	while (1) {
		
	}
		
// return
}
Пояснения:
Callback - эта функция вызывается, когда срабатывает прерывание таймера. В ней вы делаете, что необходимо. Внимание: здесь заведены 2 таймера, и для обоих используеться 1 функция, в которой разбирается, какой таймер сработал. В данном случае функция моргает по таймерам светодиодами на демоплате.
InitTimers - здесь устанавливаются параметры таймеров и происходит их запуск.
Main - инициализируются прерывания, внешние порты и затем таймера. После чего она входит в вечный бездельный цикл и дальше прерывается только таймерами с вызовом Callback

Последний раз редактировалось E-Male; 22.11.2010 в 16:34.
E-Male вне форума  
Сказали "Спасибо" E-Male
sergurets (23.11.2010)
Непрочитано 23.11.2010, 11:45  
sergurets
Прохожий
 
Регистрация: 12.11.2010
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergurets на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

Спасибо E-Male, буду пробовать
sergurets вне форума  
Непрочитано 26.11.2010, 11:34  
sergurets
Прохожий
 
Регистрация: 12.11.2010
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sergurets на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

Проблема еще в том, что про у меня большое количество математических операций. Результат я вывожу через параллельный порт - потом ЦАП. Когда процессор максимально загружен - в выходном сигнале появляются провалы. То есть одна точка - результат, вторая ноль, третья - результат, четвертая - ноль и т. д. Частота такого "ШИМа" 1 кГц. При уменьшении количества операций - сигнал нормальный. Кто-нибудь сталкивался?
sergurets вне форума  
Непрочитано 23.03.2011, 00:49  
b_v_e
Прохожий
 
Регистрация: 30.11.2010
Сообщений: 2
Сказал спасибо: 24
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
b_v_e на пути к лучшему
По умолчанию Re: Прерывания по таймеру ADSP 21065l

У этих процессоров - два прерывания от таймера - высокого и низкого приоритета. Задействуйте прерывание высокого приоритета...
А, впрочем, это не поможет. Если других прерываний нет - то и низкого приоритета должно срабатывать железно. Скорее всего Ваш обработчик прерывания чего-то нетак делает.....
b_v_e вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Как изменить адрес подпрограммы обработки прерывания? Godzilla82 Микроконтроллеры, АЦП, память и т.д 21 23.08.2010 09:52
Прерывания в прерываниях ATmega8 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 35 07.07.2010 10:12
Вложенные прерывания HITECH PIC16 picavr Микроконтроллеры, АЦП, память и т.д 17 07.03.2010 17:39
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


Часовой пояс GMT +4, время: 14:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot