И вот например мне нужно попробовать реализовать пробуждение пика из слипа по внешнему положительному фронту на определенной ноге пика.
Сделал все в конфигураторе, и в протеусе чето не работает. Вот код который сконфигурировал конфигуратор - внешне есть ли в нем что то не так?
Код: Выделить всё
#include <xc.h>
#include "pin_manager.h"
#include "stdbool.h"
void (*IOCAF0_InterruptHandler)(void);
void PIN_MANAGER_Initialize(void)
{
/**
LATx registers
*/
LATA = 0x00;
/**
TRISx registers
*/
TRISA = 0x0B;
/**
ANSELx registers
*/
ANSELA = 0x02;
/**
WPUx registers
*/
WPUA = 0x0A;
OPTION_REGbits.nWPUEN = 0;
/**
APFCONx registers
*/
APFCON = 0x00;
/**
IOCx registers
*/
// interrupt on change for group IOCAF - flag
IOCAFbits.IOCAF0 = 0;
// interrupt on change for group IOCAN - negative
IOCANbits.IOCAN0 = 0;
// interrupt on change for group IOCAP - positive
IOCAPbits.IOCAP0 = 1;
// register default IOC callback functions at runtime; use these methods to register a custom function
IOCAF0_SetInterruptHandler(IOCAF0_DefaultInterruptHandler);
// Enable IOCI interrupt
INTCONbits.IOCIE = 1;
}
void PIN_MANAGER_IOC(void)
{
// interrupt on change for pin IOCAF0
if(IOCAFbits.IOCAF0 == 1)
{
IOCAF0_ISR();
}
}
/**
IOCAF0 Interrupt Service Routine
*/
void IOCAF0_ISR(void) {
// Add custom IOCAF0 code
extern bit flag_pir;
flag_pir = 1;
// Call the interrupt handler for the callback registered at runtime
if(IOCAF0_InterruptHandler)
{
IOCAF0_InterruptHandler();
}
IOCAFbits.IOCAF0 = 0;
}
/**
Allows selecting an interrupt handler for IOCAF0 at application runtime
*/
void IOCAF0_SetInterruptHandler(void* InterruptHandler){
IOCAF0_InterruptHandler = InterruptHandler;
}
/**
Default interrupt handler for IOCAF0
*/
void IOCAF0_DefaultInterruptHandler(void){
// add your IOCAF0 interrupt custom code
// or set custom function using IOCAF0_SetInterruptHandler()
}
/**
End of File
*/Суть то в чем - в том что прерывание не наступает


