Я пытаюсь настроить модуль ввода ввода (IC1) на dsPIC33EP32MC204, чтобы использовать его для измерения коэффициента заполнения.В качестве входа я хотел бы использовать контакт RP35.Чтобы проверить правильность конфигурации, я настроил эксперимент: я подключил генератор импульсов с импульсами ШИМ 1 Гц и настроил захват входа для захвата каждого переднего фронта.Я считал, что эти нарастающие фронты вызовут прерывание захвата входа, и каждый вызов прерывания заставит светодиод мигать.К сожалению, это не работает.Я был бы признателен, если бы кто-то мог сказать мне, где проблема.Код:
void Init_InputCapture(void)
{
IC1CON1bits.ICSIDL = 0;
IC1CON1bits.ICTSEL = 0b111; // Peripheral clock (FP) is the clock source of the ICx
IC1CON1bits.ICI = 0b00; //
IC1CON1bits.ICM = 0b011; //Capture mode every edge rising
IC1CON2bits.ICTRIG = 0; // = Input source used to trigger the input capture timer (Trigger mode)
IC1CON2bits.SYNCSEL = 0b00000; //IC1 module synchronizes or triggers ICx
IC1CON2bits.IC32 = 0; // 16 bit mode only
// Enable Capture Interrupt And Timer2
IPC0bits.IC1IP = 1; // Setup IC1 interrupt priority level
IFS0bits.IC1IF = 0; // Clear IC1 Interrupt Status Flag
IEC0bits.IC1IE = 1; // Enable IC1 interrupt
}
Прерывание:
void __attribute__((__interrupt__, no_auto_psv)) _IC1Interrupt(void)
{
LATBbits.LATB9 = ~LATBbits.LATB9;
IFS0bits.IC1IF = 0;
}
И соответствующий код из main ():
__builtin_write_OSCCONL(OSCCON & ~(1<<6));
RPINR7 = 0x23; ; // IC1 mapped to RP35
__builtin_write_OSCCONL(OSCCON | (1<<6));
Во время установки я следовал инструкциямиз семейного справочника.