void sys_time_init(void) { struct rtc_time tm_rtc; struct tm tmbuf; sys_time_init_startup_micros = bcm2835_st_read(); if (mcp7941x_start(0x00) == MCP7941X_ERROR) { tmbuf.tm_hour = 0; tmbuf.tm_min = 0; tmbuf.tm_sec = 0; tmbuf.tm_mday = 1; tmbuf.tm_wday = 1; tmbuf.tm_mon = 0; tmbuf.tm_year = 18; tmbuf.tm_isdst = 0; // 0 (DST not in effect, just take RTC time) //tmbuf.tm_yday = 0; rtc_startup_seconds = mktime(&tmbuf); return; } mcp7941x_get_date_time(&tm_rtc); tmbuf.tm_hour = tm_rtc.tm_hour; tmbuf.tm_min = tm_rtc.tm_min; tmbuf.tm_sec = tm_rtc.tm_sec; tmbuf.tm_mday = tm_rtc.tm_mday; tmbuf.tm_wday = tm_rtc.tm_mday; tmbuf.tm_mon = tm_rtc.tm_mon; tmbuf.tm_year = tm_rtc.tm_year; tmbuf.tm_isdst = 0; // 0 (DST not in effect, just take RTC time) rtc_startup_seconds = mktime(&tmbuf); }
int main(int argc, char **argv) { // RTC time struct rtc_time tm_rtc, tm_rtc_set; // Linux current time time_t ltime; struct tm *tm_linux; printf("rtc_start\n"); if (mcp7941x_start(0) != MCP7941X_OK) { printf("Cannot start I2C_RTC\n"); exit(EXIT_FAILURE); } // Get current localtime from Linux ltime = time(NULL); tm_linux = localtime(<ime); printf("Linux time:\n\tsecs=%d, mins=%d, hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", tm_linux->tm_sec, tm_linux->tm_min, tm_linux->tm_hour, tm_linux->tm_mday, tm_linux->tm_mon, tm_linux->tm_year, tm_linux->tm_wday); tm_rtc_set.tm_sec = tm_linux->tm_sec; tm_rtc_set.tm_min = tm_linux->tm_min; tm_rtc_set.tm_hour = tm_linux->tm_hour; tm_rtc_set.tm_mday = tm_linux->tm_mday; tm_rtc_set.tm_mon = tm_linux->tm_mon; tm_rtc_set.tm_year = tm_linux->tm_year - 100; tm_rtc_set.tm_wday = tm_linux->tm_wday; mcp7941x_set_date_time(&tm_rtc_set); mcp7941x_get_date_time(&tm_rtc); printf("RTC time:\n\tsecs=%d, mins=%d, hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", tm_rtc.tm_sec, tm_rtc.tm_min, tm_rtc.tm_hour, tm_rtc.tm_mday, tm_rtc.tm_mon, tm_rtc.tm_year, tm_rtc.tm_wday); printf("rtc_end\n"); mcp7941x_end(); return EXIT_SUCCESS; }
int main(void) { device_info_t device_info; UART_BEGIN(); device_info.slave_address = BW_LCD_DEFAULT_SLAVE_ADDRESS; /** SPI **/ printf("bw_spi_lcd_start\n"); bw_spi_lcd_start(&device_info); printf("bw_spi_read_id\n"); bw_spi_read_id(&device_info); printf("bw_spi_lcd_reinit\n"); bw_spi_lcd_reinit(&device_info); uint8_t backlight; printf("bw_spi_lcd_get_backlight := "); bw_spi_lcd_get_backlight(&device_info, &backlight); printf("%d\n", backlight); uint8_t contrast; printf("bw_spi_lcd_get_contrast := "); bw_spi_lcd_get_contrast(&device_info,&contrast); printf("%d\n", contrast); printf("bw_spi_lcd_cls\n"); bw_spi_lcd_cls(&device_info); printf("bw_spi_lcd_text_line_1\n"); bw_spi_lcd_text_line_1(&device_info, "AVR Atmel", 9); printf("bw_spi_lcd_text_line_2\n"); bw_spi_lcd_text_line_2(&device_info, "Arduino Uno", 11); /** I2C **/ printf("bw_i2c_lcd_start\n"); bw_i2c_lcd_start(BW_LCD_DEFAULT_SLAVE_ADDRESS); printf("bw_i2c_read_id\n"); bw_i2c_read_id(&device_info); printf("bw_i2c_lcd_reinit\n"); bw_i2c_lcd_reinit(); printf("bw_i2c_lcd_cls\n"); bw_i2c_lcd_cls(); printf("bw_i2c_lcd_text_line_1\n"); bw_i2c_lcd_text_line_1("AVR Atmel", 9); /** RTC **/ struct rtc_time tm_rtc; printf("mcp7941x_start\n"); mcp7941x_start(0x00); printf("mcp7941x_get_date_time\n"); mcp7941x_get_date_time(&tm_rtc); printf("%.2d:%.2d:%.2d %.2d-%.2d-%.2d\n", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec, tm_rtc.tm_mday, tm_rtc.tm_mon, tm_rtc.tm_year); device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS; printf("bw_i2c_dio_start\n"); bw_i2c_dio_start(&device_info); printf("bw_i2c_read_id\n"); bw_i2c_read_id(&device_info); printf("bw_i2c_dio_fsel_mask\n"); bw_i2c_dio_fsel_mask(&device_info, 0x7F); char buf[9]; while (1) { mcp7941x_get_date_time(&tm_rtc); sprintf(buf, "%.2d:%.2d:%.2d", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec); bw_i2c_lcd_text_line_2(buf, 8); device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS; bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO0 | BW_DIO_PIN_IO2 | BW_DIO_PIN_IO4 | BW_DIO_PIN_IO6); _delay_ms(500); bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO1 | BW_DIO_PIN_IO3 | BW_DIO_PIN_IO5); _delay_ms(500); } }