Este es mi primer uso de la interrupción RTCC para dspic33F y P24h. He configurado la fecha y la alarma, cuando la alarma se enciende, el LED adjunto en el PIN 15 parpadeará. El código se compila, pero no hay ningún resultado en el LED.
aquí está el código:
#include<p33Fxxxx.h>
volatile unsigned int counter=0;
void __attribute__((interrupt,auto_psv)) _RTCCInterrupt(void)
{
counter=1;
_RTCIF = 0; // clear flag
} // RTCC interrupt service routine
void initRTCC( void)
{
// Enables the OSCON write and set
//_SOSCEN =1;
asm volatile ("mov #OSCCON,W1");
asm volatile ("mov.b #0x46, W2"); // unlock sequence
asm volatile ("mov.b #0x57, W3");
asm volatile ("mov.b #0x02, W0"); // SOSCEN =1
asm volatile ("mov.b W2, [W1]");
asm volatile ("mov.b W3, [W1]");
asm volatile ("mov.b W0, [W1]");
//_RTCWREN = 1; // unlock setting
asm volatile("disi #5");
asm volatile("mov #0x55, w7");
asm volatile("mov w7, _NVMKEY");
asm volatile("mov #0xAA, w8");
asm volatile("mov w8, _NVMKEY");
asm volatile("bset _RCFGCAL, #13"); // RTCWREN =1;
asm volatile("nop");
asm volatile("nop");
_RTCEN = 0; // disable the clock
// set 07/11/2011 MON 23:59:30
_RTCPTR = 3; // start the sequence
RTCVAL = 0x2011; // YEAR
RTCVAL = 0x0711; // MONTH-1/DAY-1
RTCVAL = 0x0159; // WEEKDAY/HOURS
RTCVAL = 0x5930; // MINUTES/SECONDS
// lock and enable
_RTCEN = 1; // start the clock
_RTCWREN = 0; // lock settings
} // initRTCC
void setALARM( void)
{
// disable alarm
_ALRMEN = 0;
// set the ALARM for a specific day of)
_ALRMPTR = 2; // start the sequence
ALRMVAL = 0x0711; // MONTH-1/DAY-1
ALRMVAL = 0x0200; // WEEKDAY/HOUR
ALRMVAL = 0x0100; // MINUTES/SECONDS
// set the repeat counter
_ARPT = 0; // once
_CHIME = 1; // indefinitely
// set the alarm mask
_AMASK = 0;
_ALRMEN = 1; // enable alarm
_RTCIF = 0; // clear flag
_RTCIE = 1; // enable interrupt
} // set ALARM
main( void)
{
TRISB=0;
initRTCC();
setALARM();
_RTCIF = 0;
while( 1){
if (counter==1) {
PORTB = 0xffff;
counter =0;}
}
// repeat the main loop
} // main