Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прерывание pwm dspic30f2023
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
pipka
Здравствуйте, помогите разобраться почему не срабатывает прерывание ШИМ.

код(MPLAB C30):


#include <p30f2023.h>
#include "functions.h"


_FOSCSEL(FRC_PLL); //FRC with PLL
_FOSC(CSW_FSCM_OFF & FRC_HI_RANGE & OSC2_IO & HS_EC_DIS); //Clock switching is disabled,FCKSM is disabled
_FWDT(FWDTEN_OFF); //Watchdog timer off
_FPOR(PWRT_OFF); //Power-on Reset
_FICD(ICS_PGD);

int main(void)
{
init();
while(1)
{

}

}

void __attribute__((interrupt,no_auto_psv)) _PWM1Interrupt(void)
{
IFS1bits.PWM1IF=0;
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
}


void init (void)
{

OSCTUNbits.TUN=0b0000;

//......................//

TRISA=0b0000000000000000;
TRISB=0b0000000000000000;
TRISD=0b0000000000000000;
TRISE=0b0000000000000000;
TRISF=0b0000000000000000;

PORTA=0b0000000000000000;
PORTB=0b0000000000000000;
PORTD=0b0000000000000010;
PORTE=0b0000000000000000;
PORTF=0b0000000000000000;

LATA=0b0000000000000000;
LATB=0b0000000000000000;
LATD=0b0000000000000010;
LATE=0b0000000000000000;
LATF=0b0000000000000000;

// PWM1 //

PTCONbits.PTEN=0b00;
PTCONbits.PTSIDL=0b00;
PTCONbits.SESTAT=0b00;
PTCONbits.SEIEN=0;
PTCONbits.EIPU=0b00;
PTCONbits.SYNCPOL=0b00;
PTCONbits.SYNCOEN=0b00;
PTCONbits.SYNCEN=0;
PTCONbits.SYNCSRC=0b00;
PTCONbits.SEVTPS=0b0000;
PTPER=30960;
PDC1=15480;
PWMCON1bits.FLTSTAT=0b00;
PWMCON1bits.CLSTAT=0b00;
PWMCON1bits.TRGSTAT=0b00;
PWMCON1bits.FLTIEN=0b00;
PWMCON1bits.CLIEN=0b00;
PWMCON1bits.TRGIEN=0;
PWMCON1bits.ITB=0b00;
PWMCON1bits.MDCS=0b00;
PWMCON1bits.DTC=0b10;
PWMCON1bits.XPRES=0b00;
PWMCON1bits.IUE=0b00;

FCLCON1bits.FLTMOD=0b11;
FCLCON1bits.CLMODE=0;

DTR1=0b000000000000;
IOCON1bits.PENH=1;
IOCON1bits.PENL=1;
IOCON1bits.POLH=1;
IOCON1bits.POLL=1;
IOCON1bits.PMOD=0b00;
IOCON1bits.OVRENH=0;
IOCON1bits.OVRENL=0;
PTCONbits.PTEN=1;

//настройка прерываний//

INTCON1bits.NSTDIS=1;

SRbits.IPL=0;
IPC4bits.PWM1IP=6; //interrupt priority for PWM
IFS1bits.PWM1IF=0;
IEC1bits.PWM1IE=1;

}

Спасибо.
Vlad27
По какому событию ждете прерывания?
pipka
Цитата(Vlad27 @ Oct 16 2009, 15:25) *
По какому событию ждете прерывания?


Прерывание жду по обнулению регистра PTMR после достижения значения, записанного в регистр PTPER.
Vlad27
Как я понял из дейтшита, источником внутреннего прерывания может быть Special Event Comparison Register
для primary time base и триггеры для каждого из PWM модулей. Т.е., надо разрешить прерывания по
триггеру (TRIGIEN=1) и прописать значение сравнения в TRIG1 в данном случае.
pipka
Цитата(Vlad27 @ Oct 16 2009, 16:54) *
Как я понял из дейтшита, источником внутреннего прерывания может быть Special Event Comparison Register
для primary time base и триггеры для каждого из PWM модулей. Т.е., надо разрешить прерывания по
триггеру (TRIGIEN=1) и прописать значение сравнения в TRIG1 в данном случае.


Как я понял это триггеры для запуска АЦП.

"The PWM module also features an additional ADC trigger
output for each PWM generator. This feature is very
useful when the PWM generators are operating in
Independent Time Base mode."
pipka
Все, заработало. Vlad27, вы были правы. Спасибо. biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.