InetrfaceProducts NXP / Mbed 2 deprecated PCF2127_Hello

Dependencies:   PCF2127 mbed

Committer:
nxp_ip
Date:
Wed Dec 10 01:45:09 2014 +0000
Revision:
1:86dc8dfe6a20
Parent:
0:658f351580f0
Child:
2:47151300f95a
RAM access test has been added.; fix for program compile error.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:658f351580f0 1 /*
nxp_ip 0:658f351580f0 2 * A sample code for PCF2127 library
nxp_ip 0:658f351580f0 3 *
nxp_ip 0:658f351580f0 4 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 1:86dc8dfe6a20 5 * @version 1.7
nxp_ip 1:86dc8dfe6a20 6 * @date 10-Dec-2014
nxp_ip 0:658f351580f0 7 *
nxp_ip 0:658f351580f0 8 * PCF2127 is a "real time clock (RTC)" module which is including a Xtal and TCXO
nxp_ip 0:658f351580f0 9 * http://www.nxp.com/products/interface_and_connectivity/real_time_clocks/rtcs_with_temp_compensation/series/PCF2127.html
nxp_ip 0:658f351580f0 10 *
nxp_ip 0:658f351580f0 11 * RTC initializing part is ported from..
nxp_ip 0:658f351580f0 12 * http://mbed.org/users/roen/notebook/real-time/
nxp_ip 0:658f351580f0 13 *
nxp_ip 0:658f351580f0 14 * This code is refined version of..
nxp_ip 0:658f351580f0 15 * http://developer.mbed.org/users/okano/code/NXP_PCF2127A/
nxp_ip 0:658f351580f0 16 */
nxp_ip 0:658f351580f0 17
nxp_ip 0:658f351580f0 18 #include "mbed.h"
nxp_ip 0:658f351580f0 19 #include "PCF2127.h"
nxp_ip 0:658f351580f0 20
nxp_ip 0:658f351580f0 21 PCF2127 rtc( p28, p27 );
nxp_ip 0:658f351580f0 22
nxp_ip 0:658f351580f0 23 void show_time( void );
nxp_ip 0:658f351580f0 24 void set_time( void );
nxp_ip 0:658f351580f0 25
nxp_ip 1:86dc8dfe6a20 26 void RAM_dump( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 27 void RAM_read_test( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 28 void RAM_write_test( void ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 29 void RAM_test( int last_RAM_content_invalid ); // for PCF2127 only
nxp_ip 1:86dc8dfe6a20 30
nxp_ip 0:658f351580f0 31 int main()
nxp_ip 0:658f351580f0 32 {
nxp_ip 0:658f351580f0 33 printf( "PCF2127 demo started.\r\n" );
nxp_ip 0:658f351580f0 34
nxp_ip 1:86dc8dfe6a20 35 int clock_integrity_fail = rtc.is_init_required();
nxp_ip 1:86dc8dfe6a20 36
nxp_ip 1:86dc8dfe6a20 37 if ( clock_integrity_fail ) {
nxp_ip 0:658f351580f0 38 set_time();
nxp_ip 0:658f351580f0 39 }
nxp_ip 0:658f351580f0 40
nxp_ip 1:86dc8dfe6a20 41 /*
nxp_ip 1:86dc8dfe6a20 42 * Next line can be enabled when using PCF2127 only
nxp_ip 1:86dc8dfe6a20 43 */
nxp_ip 1:86dc8dfe6a20 44 //RAM_test( clock_integrity_fail );
nxp_ip 1:86dc8dfe6a20 45
nxp_ip 0:658f351580f0 46 while ( 1 ) {
nxp_ip 0:658f351580f0 47 show_time();
nxp_ip 0:658f351580f0 48 wait( 0.25 );
nxp_ip 0:658f351580f0 49 }
nxp_ip 0:658f351580f0 50 }
nxp_ip 0:658f351580f0 51
nxp_ip 0:658f351580f0 52 void show_time( void )
nxp_ip 0:658f351580f0 53 {
nxp_ip 0:658f351580f0 54 struct tm dt, *dtp;
nxp_ip 0:658f351580f0 55 time_t t;
nxp_ip 0:658f351580f0 56 char s[ 30 ];
nxp_ip 1:86dc8dfe6a20 57
nxp_ip 0:658f351580f0 58 dtp = &dt;
nxp_ip 0:658f351580f0 59
nxp_ip 0:658f351580f0 60 rtc.clear_intr();
nxp_ip 0:658f351580f0 61
nxp_ip 0:658f351580f0 62 // get time information from PCF2127
nxp_ip 1:86dc8dfe6a20 63 if ( PCF2127::TIME_FUNC_ERROR == (t = rtc.time( NULL )) ) {
nxp_ip 0:658f351580f0 64 printf( "error at reading time\r\n" );
nxp_ip 0:658f351580f0 65 return;
nxp_ip 0:658f351580f0 66 }
nxp_ip 1:86dc8dfe6a20 67
nxp_ip 0:658f351580f0 68 dtp = localtime( &t );
nxp_ip 0:658f351580f0 69
nxp_ip 0:658f351580f0 70 // print time and date on terminal
nxp_ip 0:658f351580f0 71 strftime( s, 30, "%H:%M:%S, %Y/%b/%d %a", dtp );
nxp_ip 0:658f351580f0 72 printf( "%s\r\n", s );
nxp_ip 0:658f351580f0 73 }
nxp_ip 0:658f351580f0 74
nxp_ip 0:658f351580f0 75 void set_time( void )
nxp_ip 0:658f351580f0 76 {
nxp_ip 0:658f351580f0 77 #define MAX_CHAR_LENGTH 21
nxp_ip 0:658f351580f0 78 char s[ MAX_CHAR_LENGTH ];
nxp_ip 0:658f351580f0 79
nxp_ip 0:658f351580f0 80 printf( "Enter current date and time:\r\n" );
nxp_ip 0:658f351580f0 81 printf( "YYYY MM DD HH MM SS[enter]\r\n" );
nxp_ip 0:658f351580f0 82
nxp_ip 0:658f351580f0 83 fgets( s, MAX_CHAR_LENGTH, stdin );
nxp_ip 0:658f351580f0 84 printf( "user input: \"%s\"\r\n", s );
nxp_ip 0:658f351580f0 85
nxp_ip 0:658f351580f0 86 rtc.set_time( s );
nxp_ip 0:658f351580f0 87 }
nxp_ip 1:86dc8dfe6a20 88
nxp_ip 1:86dc8dfe6a20 89 void RAM_function_test( void )
nxp_ip 1:86dc8dfe6a20 90 {
nxp_ip 1:86dc8dfe6a20 91 }
nxp_ip 1:86dc8dfe6a20 92
nxp_ip 1:86dc8dfe6a20 93 void RAM_dump( void )
nxp_ip 1:86dc8dfe6a20 94 {
nxp_ip 1:86dc8dfe6a20 95 char b[ 512 ];
nxp_ip 1:86dc8dfe6a20 96
nxp_ip 1:86dc8dfe6a20 97 if ( rtc.RAM_read( 0, b, 512 ) ) {
nxp_ip 1:86dc8dfe6a20 98 printf( "error at reading RAM\r\n" );
nxp_ip 1:86dc8dfe6a20 99 }
nxp_ip 1:86dc8dfe6a20 100
nxp_ip 1:86dc8dfe6a20 101 for ( int i = 0; i < 512; i++ ) {
nxp_ip 1:86dc8dfe6a20 102 if ( !(i % 16) ) {
nxp_ip 1:86dc8dfe6a20 103 printf( "\r\n 0x%03X(%03d): 0x", i, i );
nxp_ip 1:86dc8dfe6a20 104 }
nxp_ip 1:86dc8dfe6a20 105 printf( " %02X", b[ i ] );
nxp_ip 1:86dc8dfe6a20 106 }
nxp_ip 1:86dc8dfe6a20 107 }
nxp_ip 1:86dc8dfe6a20 108
nxp_ip 1:86dc8dfe6a20 109 const char *texts[] = {
nxp_ip 1:86dc8dfe6a20 110 "Love the life you live. Live the life you love.",
nxp_ip 1:86dc8dfe6a20 111 "It always seems impossible until it's done.",
nxp_ip 1:86dc8dfe6a20 112 "You'll never find a rainbow if you're looking down.",
nxp_ip 1:86dc8dfe6a20 113 "There is always light behind the clouds."
nxp_ip 1:86dc8dfe6a20 114 };
nxp_ip 1:86dc8dfe6a20 115
nxp_ip 1:86dc8dfe6a20 116 void RAM_test( int last_RAM_content_invalid )
nxp_ip 1:86dc8dfe6a20 117 {
nxp_ip 1:86dc8dfe6a20 118 char txt[ 64 ];
nxp_ip 1:86dc8dfe6a20 119 time_t t;
nxp_ip 1:86dc8dfe6a20 120
nxp_ip 1:86dc8dfe6a20 121 if ( !last_RAM_content_invalid ) {
nxp_ip 1:86dc8dfe6a20 122 rtc.RAM_read( 0, (char *)&t, sizeof( t ) );
nxp_ip 1:86dc8dfe6a20 123 rtc.RAM_read( 16, txt, sizeof( txt ) );
nxp_ip 1:86dc8dfe6a20 124 printf( "RAM test read\r\n" );
nxp_ip 1:86dc8dfe6a20 125 printf( " last program start was on %s\r", ctime( &t ) );
nxp_ip 1:86dc8dfe6a20 126 printf( " last saved text was \"%s\"\r\n", txt );
nxp_ip 1:86dc8dfe6a20 127 }
nxp_ip 1:86dc8dfe6a20 128
nxp_ip 1:86dc8dfe6a20 129 t = rtc.time( NULL );
nxp_ip 1:86dc8dfe6a20 130 rtc.RAM_write( 0, (char *)&t, sizeof( t ) );
nxp_ip 1:86dc8dfe6a20 131 rtc.RAM_write( 16, (char *)texts[ t % 4 ], strlen( texts[ t % 4 ] ) + 1 );
nxp_ip 1:86dc8dfe6a20 132 }
nxp_ip 1:86dc8dfe6a20 133
nxp_ip 1:86dc8dfe6a20 134
nxp_ip 1:86dc8dfe6a20 135
nxp_ip 1:86dc8dfe6a20 136
nxp_ip 1:86dc8dfe6a20 137
nxp_ip 1:86dc8dfe6a20 138
nxp_ip 1:86dc8dfe6a20 139
nxp_ip 1:86dc8dfe6a20 140
nxp_ip 1:86dc8dfe6a20 141
nxp_ip 1:86dc8dfe6a20 142
nxp_ip 1:86dc8dfe6a20 143
nxp_ip 1:86dc8dfe6a20 144
nxp_ip 1:86dc8dfe6a20 145
nxp_ip 1:86dc8dfe6a20 146
nxp_ip 1:86dc8dfe6a20 147
nxp_ip 1:86dc8dfe6a20 148
nxp_ip 1:86dc8dfe6a20 149