]> git.earman.xyz Git - sensor-watch.git/commitdiff
interrupts, clock demo with interrupts
authorJoey Castillo <jose.castillo@gmail.com>
Fri, 30 Apr 2021 13:52:09 +0000 (09:52 -0400)
committerJoey Castillo <jose.castillo@gmail.com>
Fri, 30 Apr 2021 13:52:09 +0000 (09:52 -0400)
Smol Watch Project/My Project/.atmelstart/atmel_start_config.atstart
Smol Watch Project/My Project/Config/hpl_osc32kctrl_config.h
Smol Watch Project/My Project/My Project.cproj
Smol Watch Project/My Project/driver_init.c
Smol Watch Project/My Project/driver_init.h
Smol Watch Project/My Project/main.c
Smol Watch Project/My Project/mars_clock.c [new file with mode: 0644]
Smol Watch Project/My Project/mars_clock.h [new file with mode: 0644]
Smol Watch Project/My Project/watch-library/watch.c
Smol Watch Project/My Project/watch-library/watch.h

index 0e0d365d7d5dbce4d1b3ed4965b99efa3663f1e8..1a511ffe369eb37627139b84b891c372d7855ff9 100644 (file)
@@ -524,10 +524,10 @@ drivers:
     functionality: System
     api: HAL:HPL:GCLK
     configuration:
-      $input: 400000
-      $input_id: External Crystal Oscillator 0.4-32MHz (XOSC)
-      RESERVED_InputFreq: 400000
-      RESERVED_InputFreq_id: External Crystal Oscillator 0.4-32MHz (XOSC)
+      $input: 32768
+      $input_id: 32kHz External Crystal Oscillator (XOSC32K)
+      RESERVED_InputFreq: 32768
+      RESERVED_InputFreq_id: 32kHz External Crystal Oscillator (XOSC32K)
       _$freq_output_Generic clock generator 0: 4000000
       _$freq_output_Generic clock generator 1: 400000
       _$freq_output_Generic clock generator 2: 400000
@@ -639,8 +639,8 @@ drivers:
       xosc32k_arch_en32k: true
       xosc32k_arch_enable: true
       xosc32k_arch_ondemand: true
-      xosc32k_arch_runstdby: false
-      xosc32k_arch_startup: 62592us
+      xosc32k_arch_runstdby: true
+      xosc32k_arch_startup: 2000092us
       xosc32k_arch_swben: false
       xosc32k_arch_xtalen: true
     optional_signals: []
index 55e297ae7cd925b99b271b21a44e1ea08581e0c0..40206331f576c93b579dae08c04a498b10e4ed98 100644 (file)
@@ -81,7 +81,7 @@
 // <0x6=>8000092us
 // <id> xosc32k_arch_startup
 #ifndef CONF_XOSC32K_STARTUP
-#define CONF_XOSC32K_STARTUP 0x0
+#define CONF_XOSC32K_STARTUP 0x4
 #endif
 
 // <q> On Demand Control
@@ -95,7 +95,7 @@
 // <i> Indicates whether Run in Standby is enabled or not
 // <id> xosc32k_arch_runstdby
 #ifndef CONF_XOSC32K_RUNSTDBY
-#define CONF_XOSC32K_RUNSTDBY 0
+#define CONF_XOSC32K_RUNSTDBY 1
 #endif
 
 // <q> 1kHz Output Enable
index bffa9708ed0064d7a4cd30afd7e275605ca03f3a..7149baaa04faf27b54e7aa83e3102404eb07a4e3 100644 (file)
           <AcmeProjectActionInfo Action="File" Source="config/hpl_eic_config.h" IsConfig="true" Hash="U9WSM5Hq8sGLa8ysciEfCg" />\r
           <AcmeProjectActionInfo Action="File" Source="config/hpl_gclk_config.h" IsConfig="true" Hash="VW757Ebgq5TyYTRcpY8M7w" />\r
           <AcmeProjectActionInfo Action="File" Source="config/hpl_mclk_config.h" IsConfig="true" Hash="CLrsNUvv74/qlHdF8aFndg" />\r
-          <AcmeProjectActionInfo Action="File" Source="config/hpl_osc32kctrl_config.h" IsConfig="true" Hash="ylDzEsTDHvv+guzMsTa+sg" />\r
+          <AcmeProjectActionInfo Action="File" Source="config/hpl_osc32kctrl_config.h" IsConfig="true" Hash="b7mSwnFOSDceVn9b3TT9kA" />\r
           <AcmeProjectActionInfo Action="File" Source="config/hpl_oscctrl_config.h" IsConfig="true" Hash="Vc5u27WzT+UPF5aLAxl2lQ" />\r
           <AcmeProjectActionInfo Action="File" Source="config/hpl_port_config.h" IsConfig="true" Hash="rMTNR+5FXtu+wfT1NbfRRA" />\r
           <AcmeProjectActionInfo Action="File" Source="config/hpl_rtc_config.h" IsConfig="true" Hash="oTcobT9ydLDOqfpwUidHvg" />\r
     </ListValues>\r
   </armgcc.linker.libraries.LibrarySearchPaths>\r
   <armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>\r
+  <armgcc.linker.memorysettings.ExternalRAM />\r
   <armgcc.linker.miscellaneous.LinkerFlags>-Tsaml22j18a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>\r
   <armgcc.assembler.general.IncludePaths>\r
     <ListValues>\r
     <Compile Include="hri\hri_wdt_l22.h">\r
       <SubType>compile</SubType>\r
     </Compile>\r
+    <Compile Include="mars_clock.c">\r
+      <SubType>compile</SubType>\r
+    </Compile>\r
+    <Compile Include="mars_clock.h">\r
+      <SubType>compile</SubType>\r
+    </Compile>\r
     <Compile Include="main.c">\r
       <SubType>compile</SubType>\r
     </Compile>\r
index b10ed0e4ea5709869571b38480c83d95d91bd37a..c4223ebc9a64b13b2fcd00f58845f8790b65007c 100644 (file)
@@ -270,7 +270,7 @@ void SEGMENT_LCD_0_init(void)
 void system_init(void)
 {
        init_mcu();
-
+/*
        // GPIO on PA02
 
        // Set pin direction to input
@@ -314,10 +314,6 @@ void system_init(void)
 
        gpio_set_pin_function(D0, GPIO_PIN_FUNCTION_OFF);
 
-       delay_driver_init();
-
-
-/*
        ADC_0_init();
 
        EXTERNAL_IRQ_0_init();
@@ -326,6 +322,8 @@ void system_init(void)
 
        I2C_0_init();
 
+       delay_driver_init();
+
        PWM_0_init();
 
        PWM_1_init();
index 4761a929f35a09d91f7c6255c8c2caf41bf3bd33..8ed98cb61d4ee0933add51e0bd353e3ff42ca1f1 100644 (file)
@@ -69,6 +69,8 @@ void PWM_1_PORT_init(void);
 void PWM_1_CLOCK_init(void);
 void PWM_1_init(void);
 
+void EXTERNAL_IRQ_0_init(void);
+
 void SEGMENT_LCD_0_init(void);
 
 /**
index 8289731b683087b2dddac1433e2cbb0d71aacf2d..f19d7a2947efa40f8d0feaa0ccc2c9f1371bbcc8 100644 (file)
@@ -1,56 +1,66 @@
 #include <atmel_start.h>
+#include <hpl_sleep.h>
 #include "watch-library/watch.h"
+#include "mars_clock.h"
+
+Watch watch;
+bool local = true;
+
+void calendar_callback(struct calendar_descriptor *const calendar) {
+       struct calendar_date_time date_time;
+       calendar_get_date_time(&CALENDAR_0, &date_time);
+
+       update_display(&watch, date_time, true);
+/*
+       if (date_time.time.min % 2 == 0) {
+               watch_set_led_color(50, 0);
+       } else {
+               watch_set_led_color(0, 50);
+       }
+*/
+}
+
+static void mode_callback() {
+//     local = !local;
+       struct calendar_date_time date_time;
+       calendar_get_date_time(&CALENDAR_0, &date_time);
+       update_display(&watch, date_time, local);
+}
 
 int main(void)
 {
        atmel_start_init();
        
-       Watch watch;
-       struct calendar_date_time date_time;
-       date_time.date.year = 2021;
-       date_time.date.month = 4;
-       date_time.date.day = 25;
-       date_time.time.hour = 4;
-       date_time.time.min = 0;
-       date_time.time.sec = 0;
-
        watch_init(&watch);
 
-       watch_enable_led(&watch);
+//     watch_enable_led(&watch);
+
+       watch_enable_display(&watch);
+       watch_display_pixel(&watch, 1, 16);
+
+       watch_enable_interrupts(&watch);
+       watch_register_interrupt_callback(&watch, BTN_MODE, &mode_callback);
 
        watch_enable_date_time(&watch);
+       struct calendar_date_time date_time;
+       date_time.date.year = 2021;
+       date_time.date.month = 4;
+       date_time.date.day = 30;
+       date_time.time.hour = 9;
+       date_time.time.min = 40;
+       date_time.time.sec = 0;
        watch_set_date_time(date_time);
+       struct calendar_alarm alarm;
+       alarm.cal_alarm.mode = REPEAT;
+       alarm.cal_alarm.datetime = date_time;
+       alarm.cal_alarm.datetime.time.sec = 0;
+       alarm.cal_alarm.option = CALENDAR_ALARM_MATCH_SEC;
+       alarm.callback = calendar_callback;
+       update_display(&watch, date_time, local);
+       calendar_set_alarm(&CALENDAR_0, &alarm, &calendar_callback);
 
-       watch_enable_digital_output(A0);
-       gpio_set_pin_level(A0, true);
-
-       watch_enable_display(&watch);
-/*     
-       watch_enable_i2c(&watch);
-       uint8_t chipID = 0;
-       uint8_t ChipIdRegister = 0xD0;
-       watch_i2c_send(0x77, &ChipIdRegister, 1);
-       watch_i2c_receive(0x77, &chipID, 1);
-       if (chipID == 0x60) {
-               watch_set_led_green();
-       }
-*/
-       uint8_t last = date_time.time.sec;
-       
        while (1) {
-               watch_get_date_time(&date_time);
-               if (date_time.time.sec != last) {
-                       last = date_time.time.sec;
-                       if (last % 2 == 0) {
-                               watch_set_led_color(50, 0);
-                               watch_display_string(&watch, "0123456789", 0);
-                       } else {
-                               watch_set_led_color(0, 50);
-                               watch_display_string(&watch, "01", 0);
-                               watch_display_string(&watch, "23", 2);
-                               watch_display_string(&watch, "456789", 4);
-                       }
-               }
+               //sleep(4);
        }
        
        return 0;
diff --git a/Smol Watch Project/My Project/mars_clock.c b/Smol Watch Project/My Project/mars_clock.c
new file mode 100644 (file)
index 0000000..1bafa02
--- /dev/null
@@ -0,0 +1,17 @@
+/*\r
+ * mars_clock.c\r
+ *\r
+ * Created: 4/29/2021 11:36:26 PM\r
+ *  Author: joeycastillo\r
+ */ \r
+#include <stdio.h>\r
+#include <math.h>\r
+#include "mars_clock.h"\r
+\r
+// note: mars time not working, committing just the earth clock.\r
+\r
+void update_display(Watch *watch, struct calendar_date_time date_time, bool local) {
+       char buf[6];
+       sprintf(&buf[0], "TE  %02d%02d", date_time.time.hour, date_time.time.min);
+       watch_display_string(watch, buf, 0);
+}
diff --git a/Smol Watch Project/My Project/mars_clock.h b/Smol Watch Project/My Project/mars_clock.h
new file mode 100644 (file)
index 0000000..71b45f3
--- /dev/null
@@ -0,0 +1,17 @@
+/*\r
+ * mars_clock.h\r
+ *\r
+ * Created: 4/29/2021 11:35:39 PM\r
+ *  Author: joeycastillo\r
+ */ \r
+\r
+\r
+#ifndef MARS_CLOCK_H_\r
+#define MARS_CLOCK_H_\r
+#include "hpl_calendar.h"\r
+#include "watch-library/watch.h"\r
+\r
+void update_display(Watch *watch, struct calendar_date_time date_time, bool local);\r
+\r
+\r
+#endif /* MARS_CLOCK_H_ */
\ No newline at end of file
index ad4e7632ce05cdd6343f987026f1bbd9fd70f929..73d67c356f852dc04a67afd529ec9c882c119298 100644 (file)
@@ -173,6 +173,14 @@ void watch_display_string(Watch *watch, char *string, uint8_t position) {
        }
 }
 \r
+void watch_enable_interrupts(Watch *watch) {
+       EXTERNAL_IRQ_0_init();
+}
+\r
+void watch_register_interrupt_callback(Watch *watch, const uint32_t pin, ext_irq_cb_t callback) {
+       ext_irq_register(pin, callback);
+}
+\r
 void watch_enable_led(Watch *watch) {\r
        if (watch->led_enabled) return;\r
 \r
index cab19bec388f80491733e026366e2070e163bb97..876c240a2054d27f8871c3be814a8f2e56771b20 100644 (file)
@@ -10,6 +10,7 @@
 #define WATCH_H_\r
 #include <stdint.h>\r
 #include "hpl_calendar.h"\r
+#include "hal_ext_irq.h"\r
 \r
 typedef struct Watch {\r
        bool display_enabled;\r
@@ -43,6 +44,9 @@ void watch_get_date_time(struct calendar_date_time *date_time);
 \r
 void watch_enable_analog(Watch *watch, const uint8_t pin);
 
+void watch_enable_interrupts(Watch *watch);
+void watch_register_interrupt_callback(Watch *watch, const uint32_t pin, ext_irq_cb_t callback);
+
 void watch_enable_digital_input(const uint8_t pin);
 void watch_enable_digital_output(const uint8_t pin);