Demo the function of RTC module AM1805
Dependencies: mbed-dev
Fork of I2C_HelloWorld_Mbed by
Diff: AM1805.cpp
- Revision:
- 2:16b8f527b5c7
- Parent:
- 1:c45df8c46fa8
diff -r c45df8c46fa8 -r 16b8f527b5c7 AM1805.cpp
--- a/AM1805.cpp Thu Dec 24 03:30:20 2015 +0000
+++ b/AM1805.cpp Thu Dec 24 05:15:42 2015 +0000
@@ -24,10 +24,10 @@
/* Register Value */
#define AM1805_VALUE_ID0 0x18
-#define AM1805_DEBUG
+#define AM1805_DEBUG 0
I2C i2c(I2C_SDA, I2C_SCL);
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
Serial pc(p13,p14);
#endif
@@ -70,7 +70,7 @@
{
char who_am_i[1];
am1805_register_read(AM1805_REG_ID0, &who_am_i[0], 1);
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
pc.printf("ID:%x\r\n",who_am_i[0]);
#endif
if (who_am_i[0] != AM1805_VALUE_ID0)
@@ -126,7 +126,7 @@
setreg(AM1805_REG_INTMASK,0x02); // Set EX2E
break;
default:
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
pc.printf("Wrong Input Interrupt Index\r\n");
#endif
break;
@@ -145,7 +145,7 @@
am1805_register_write(AM1805_REG_EXTADDR_REG, xadd); // Load the XADDR register
reg_ram = (address & 0x3F) | 0x40; // Read the data
am1805_register_read(reg_ram, &temp, 1);
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
pc.printf("Read from addr:%x Data:%x\r\n",address,temp);
#endif
return (uint8_t)temp;
@@ -272,7 +272,7 @@
time_regs->year = temp_buff[6];
time_regs->weekday = temp_buff[7];
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
pc.printf("hundredth:%x\r\n",time_regs->hundredth);
pc.printf("second:%x\r\n",time_regs->second);
pc.printf("minute:%x\r\n",time_regs->minute);
@@ -309,35 +309,16 @@
clrreg(AM1805_REG_TIM_CTRL, 0x1C); // Clear the RPT field
clrreg(AM1805_REG_INTMASK, 0x64); // Clear the AIE bit and IM field
clrreg(AM1805_REG_STATUS, 0x04); // Clear the ALM flag
-//////////////////////////////
-clrreg(AM1805_REG_CTRL1, 0x10);
-/////////////////////////////
if (pin == PIN_FOUT_nIRQ)
{
/* Interrupt on FOUT/nIRQ */
- am1805_register_read(AM1805_REG_CTRL2, &temp, 1); // Get the Control2 Register
-/////////////////
-//pc.printf("111111111:AM1805_REG_CTRL2:%x\r\n",temp);
-setreg(AM1805_REG_CTRL2, 0x03); // Set OUT1S to 3
-/////////////////
+ am1805_register_read(AM1805_REG_CTRL2, &temp, 1); // Get the Control2 Register
temp = (temp & 0x03); // Extract the OUT1S field
if (temp != 0) // Not already selecting nIRQ
{
- setreg(AM1805_REG_CTRL2, 0x03); // Set OUT1S to 3
-///////////////////
-//pc.printf("2222222:AM1805_REG_CTRL2:%x\r\n",temp);
-///////////////////
- }
-///////////////
-char bufff = 0;
-am1805_register_read(AM1805_REG_CTRL1, &bufff, 1); // Get the Control2 Register
-//pc.printf("99999:AM1805_REG_CTRL1:%x\r\n",bufff);
-am1805_register_read(AM1805_REG_CTRL2, &bufff, 1); // Get the Control2 Register
-//pc.printf("33333:AM1805_REG_CTRL2:%x\r\n",bufff);
-am1805_register_read(AM1805_REG_STATUS, &bufff, 1); // Get the Control2 Register
-//pc.printf("55555:AM1805_REG_STATUS:%x\r\n",bufff);
-///////////////
+ setreg(AM1805_REG_CTRL2, 0x03); // Set OUT1S to 3
+ }
}
if (pin == PIN_PSW_nIRQ2)
{
@@ -367,25 +348,10 @@
{
temp = (repeat << 2); // Set the RPT field to the value of repeat
setreg(AM1805_REG_TIM_CTRL, temp); // Was previously cleared
- //setreg(AM1805_REG_INTMASK, (intmode << 5)); // Set the alarm interrupt mode
+ setreg(AM1805_REG_INTMASK, (intmode << 5)); // Set the alarm interrupt mode
setreg(AM1805_REG_INTMASK, 0x60); // Set the alarm interrupt mode
am1805_burst_write(temp_buff, 8); // Execute the burst write
- setreg(AM1805_REG_INTMASK, 0x04); // Set the AIE bit
-///////////////////
-char bufff = 0;
-am1805_register_read(AM1805_REG_INTMASK, &bufff, 1); // Get the Control2 Register
-//pc.printf("6666:AM1805_REG_INTMASK:%x\r\n",bufff);
-am1805_register_read(AM1805_REG_TIM_CTRL, &bufff, 1); // Get the Control2 Register
-//pc.printf("7777:AM1805_REG_TIM_CTRL:%x\r\n",bufff);
-am1805_register_read(AM1805_REG_STATUS, &bufff, 1); // Get the Control2 Register
-//pc.printf("8888:AM1805_REG_STATUS:%x\r\n",bufff);
-/* Read the counters. */
-char buff[7];
-am1805_register_read(AM1805_REG_ALM_HUN, buff, 7);
-uint8_t i;
-for(i = 0; i < 7 ;i++){}
-//pc.printf("buff[%d]:%x\r\n",i,buff[i]);
-///////////////
+ setreg(AM1805_REG_INTMASK, 0x04); // Set the AIE bit
}
else
setreg(AM1805_REG_INTMASK, 0x60); // Set IM field to 0x3 (reset value) to minimize current draw
@@ -580,7 +546,7 @@
uint8_t slres = 0;
char temp = 0;
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
am1805_register_read(AM1805_REG_CTRL2, &temp, 1); // Get SLST bit (temp & 0x08)
if ( ( temp & 0x08 ) == 0)
@@ -614,7 +580,7 @@
temp = timeout | (slres << 6) | 0x80; // Assemble SLEEP register value
am1805_register_write(AM1805_REG_SLEEPCTRL, temp); // Write to the register
-#ifdef AM1805_DEBUG
+#if AM1805_DEBUG
/* Determine if SLEEP was accepted */
am1805_register_read(AM1805_REG_CTRL2, &temp, 1); // Get SLP bit (temp & 0x80)

AM1805 Real-Time Clock with Power Management