我正在使用PIC32MX795f512L,并使用MCP79410 RTC集成了基于时间的功能。由于某些应用目的,我正在使用外部RTC(MCP79410)。

我只想使用两个警报中断,但是我只能访问一个警报中断。如果启用了ALM0和ALM1,则只有我使用的最后一个警报有效。另一个警报中断不起作用。

我尝试过的代码:

void RTCInit(void){
    I2CConfigure(I2C2, I2C_ENABLE_SLAVE_CLOCK_STRETCHING);
    I2CSetFrequency(I2C2,SYSTEM_CLK,RTC_CLK);
    I2CSetSlaveAddress(I2C2,RTC_WRITE_ADDR,0,I2C_USE_7BIT_ADDRESS);
    I2CEnable(I2C2,TRUE);
}


void ConfigI2C(void){
    PORTSetPinsDigitalIn(IOPORT_E, BIT_9);
    INTCONSET = 0x00000002;
    INTSetVectorPriority(INT_EXTERNAL_2_VECTOR, INT_PRIORITY_LEVEL_3);
    INTSetVectorSubPriority(INT_EXTERNAL_2_VECTOR, INT_SUB_PRIORITY_LEVEL_1);
    INTEnable(INT_INT2, INT_ENABLED);
}


我试过的警报:

void SetALMTime(void)
{
    int temp;
    WriteAddress[0] = RTC_WRITE_ADDR;
    DelayMs(2);
    WriteOnI2C(ADDR_ALM0MIN,0x01); //min to be alarmed ALM0
    DelayMs(2);
    WriteOnI2C(ADDR_ALM0CTL,0x10); // alarm0 compare min
    DelayMs(2);
    WriteOnI2C(ADDR_ALM1MIN,0x00); //min to be alarmed ALM1
    DelayMs(2);
    WriteOnI2C(ADDR_ALM1CTL,0x10);  // alarm1 compare min
    DelayMs(2);
    WriteOnI2C(ADDR_CTRL,0x30);
    DelayMs(2);
}

最佳答案

在RTCInit功能中,请确保启用控制寄存器(0x07)的位5和4。这两个位是启用两个警报所必需的。该函数中列出的宏似乎都没有说明启用两个警报的内容。作为参考,请使用MCP79410数据手册的第4.1.1节“ RTCC寄存器地址”。

这是数据表的链接:
MCP7941X datasheet

问候。

09-27 23:16