Maksim_13 0 13 ноября, 2012 Опубликовано 13 ноября, 2012 · Жалоба Учусь получать прерывания от таймера. Прерывания по заему и по периоду сделаны как приведено в программе. Хочу сделать прерывание по сравнению, подскажите как разрешить и организовать эти прерывания. Дайте ссылку на Manual от TI, где описано как с этим работать. Спасибо) #include "DSP28_Device.h" #include "main.h" interrupt void EvaTimer1(void); int isr_ticker = 0; //счетчик прерываний по заему interrupt void EvaTimer2(void); int isr_ticker_p = 0; //счетчик прерываний по периоду таймера void main(void) { //Инициализация регистров управления микроконтроллером, PLL, WatchDog InitSysCtrl(); // Отключение и очистка всех прерываний CPU: DINT; IER = 0x0000; IFR = 0x0000; // Инициализация регистров управления прерываниями (Pie Control Registers) InitPieCtrl(); // Инициализация таблицы векторов прерывания в известные состояния (PIE Vector Table) InitPieVectTable(); // Разрешение прерывания по событию Underflow EvaRegs.EVAIMRA.bit.T1UFINT = 1; EvaRegs.EVAIFRA.bit.T1UFINT = 1; // Разрешение прерывания по периоду таймера EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.bit.T1PINT = 1; // Переопределение прерываний. EALLOW; // Требуется разрешение на запись EALLOW PieVectTable.T1UFINT = &EvaTimer1; PieVectTable.T1PINT = &EvaTimer2; EDIS; // Запрещаем запись в защищенные регистры // Разрешаем группу 2 (PIE group 2) прерывание 6 для T1UFINT PieCtrlRegs.PIEIER2.all |= M_INT6; // Разрешаем группу 2 (PIE group 2) прерывание 4 для T1PINT PieCtrlRegs.PIEIER2.all |= M_INT4; // Разрешаем CPU INT2 для T1UFINT: IER |= M_INT2; // Разрешаем глобальные прерывания для высокоприоритетных // прерываний реального времени EINT; // Разрешаем глобальное прерывание INTM ERTM; // Разрешаем глобальное прерывание реального времени DBGM // Инициализация 1 таймера менеджера событий А (EVA Timer 1): // Частота прерываний для центрированной ШИМ = 10 kHz // при тактовой 150MГц (0x1d4c = 7500) EvaRegs.T1PR = 0x1d4c; // Записываем значение периода EvaRegs.T1CON.all = 0x0840; //Счет вверх-вниз // Пустой замкнутый цикл фоновой программы for(;;) { l_counter_Curent++; } } interrupt void EvaTimer1(void) { // инкрементируем счетчик прерываний isr_ticker++; // Разрешаем прерывания от этого таймера EvaRegs.EVAIMRA.bit.T1UFINT = 1; EvaRegs.EVAIFRA.all = BIT9; // Запрос на выполнение новых прерываний PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; } interrupt void EvaTimer2(void) { // инкрементируем счетчик прерываний isr_ticker_p++; // Разрешаем прерывания от этого таймера EvaRegs.EVAIMRA.bit.T1UFINT = 1; EvaRegs.EVAIFRA.all = BIT7; // Запрос на выполнение новых прерываний PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beaRTS 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 (изменено) · Жалоба Учусь получать прерывания от таймера. Прерывания по заему и по периоду сделаны как приведено в программе. Хочу сделать прерывание по сравнению, подскажите как разрешить и организовать эти прерывания. Дайте ссылку на Manual от TI, где описано как с этим работать. Спасибо) Привет, бро ! я тоже новичок. Вот кидаю тебе книженцию отличную прям под твой процессор. По ней что-то пытался делать в свое время.. а так если хочешь знать больше о своем проце, то заходи на страницу в интернете на сайте TI используемого процессора и там внизу будет до кучи документации и ищи по названию, да скачивай, да читай. Книга TMS320F2812 Implementation tutorial во вложении ... ЧЕРТ!!!! не загружается файл больше 5 метров =(( вот ссылка на он-лайн хранилище. Пользуйте =)) Изменено 23 ноября, 2012 пользователем beaRTS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maksim_13 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 (изменено) · Жалоба Спасибо) С таймерами разобрался, буду двигаться дальше! Изменено 23 ноября, 2012 пользователем Maksim_13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться