diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx233/debug-imx233.c | 36 | ||||
-rw-r--r-- | firmware/target/arm/imx233/rtc-imx233.h | 74 |
2 files changed, 108 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c index 896c5bf6c3..228d2abcdb 100644 --- a/firmware/target/arm/imx233/debug-imx233.c +++ b/firmware/target/arm/imx233/debug-imx233.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include "power-imx233.h" | 30 | #include "power-imx233.h" |
31 | #include "clkctrl-imx233.h" | 31 | #include "clkctrl-imx233.h" |
32 | #include "powermgmt-imx233.h" | 32 | #include "powermgmt-imx233.h" |
33 | #include "rtc-imx233.h" | ||
33 | #include "string.h" | 34 | #include "string.h" |
34 | 35 | ||
35 | static struct | 36 | static struct |
@@ -313,10 +314,43 @@ bool dbg_hw_info_powermgmt(void) | |||
313 | } | 314 | } |
314 | } | 315 | } |
315 | 316 | ||
317 | bool dbg_hw_info_rtc(void) | ||
318 | { | ||
319 | lcd_setfont(FONT_SYSFIXED); | ||
320 | |||
321 | while(1) | ||
322 | { | ||
323 | int button = get_action(CONTEXT_STD, HZ / 10); | ||
324 | switch(button) | ||
325 | { | ||
326 | case ACTION_STD_NEXT: | ||
327 | case ACTION_STD_PREV: | ||
328 | case ACTION_STD_OK: | ||
329 | case ACTION_STD_MENU: | ||
330 | lcd_setfont(FONT_UI); | ||
331 | return true; | ||
332 | case ACTION_STD_CANCEL: | ||
333 | lcd_setfont(FONT_UI); | ||
334 | return false; | ||
335 | } | ||
336 | |||
337 | lcd_clear_display(); | ||
338 | struct imx233_rtc_info_t info = imx233_rtc_get_info(); | ||
339 | |||
340 | lcd_putsf(0, 0, "seconds: %lu", info.seconds); | ||
341 | for(int i = 0; i < 6; i++) | ||
342 | lcd_putsf(0, i + 1, "persistent%d: 0x%lx", i, info.persistent[i]); | ||
343 | |||
344 | lcd_update(); | ||
345 | yield(); | ||
346 | } | ||
347 | } | ||
348 | |||
316 | bool dbg_hw_info(void) | 349 | bool dbg_hw_info(void) |
317 | { | 350 | { |
318 | return dbg_hw_info_clkctrl() && dbg_hw_info_dma() && dbg_hw_info_adc() && | 351 | return dbg_hw_info_clkctrl() && dbg_hw_info_dma() && dbg_hw_info_adc() && |
319 | dbg_hw_info_power() && dbg_hw_info_powermgmt() && dbg_hw_target_info(); | 352 | dbg_hw_info_power() && dbg_hw_info_powermgmt() && dbg_hw_info_rtc() && |
353 | dbg_hw_target_info(); | ||
320 | } | 354 | } |
321 | 355 | ||
322 | bool dbg_ports(void) | 356 | bool dbg_ports(void) |
diff --git a/firmware/target/arm/imx233/rtc-imx233.h b/firmware/target/arm/imx233/rtc-imx233.h index c26832ab57..054ace40b8 100644 --- a/firmware/target/arm/imx233/rtc-imx233.h +++ b/firmware/target/arm/imx233/rtc-imx233.h | |||
@@ -25,13 +25,85 @@ | |||
25 | #include "system.h" | 25 | #include "system.h" |
26 | #include "cpu.h" | 26 | #include "cpu.h" |
27 | 27 | ||
28 | #define HW_RTC_BASE 0x8005C000 | 28 | #define HW_RTC_BASE 0x8005c000 |
29 | 29 | ||
30 | #define HW_RTC_CTRL (*(volatile uint32_t *)(HW_RTC_BASE + 0x0)) | 30 | #define HW_RTC_CTRL (*(volatile uint32_t *)(HW_RTC_BASE + 0x0)) |
31 | #define HW_RTC_CTRL__ALARM_IRQ_EN (1 << 0) | ||
32 | #define HW_RTC_CTRL__ONEMSEC_IRQ_EN (1 << 1) | ||
33 | #define HW_RTC_CTRL__ALARM_IRQ (1 << 2) | ||
34 | #define HW_RTC_CTRL__ONEMSEC_IRQ (1 << 3) | ||
35 | #define HW_RTC_CTRL__WATCHDOGEN (1 << 4) | ||
36 | #define HW_RTC_CTRL__FORCE_UPDATE (1 << 5) | ||
37 | #define HW_RTC_CTRL__SUPPRESS_COPY2ANALOG (1 << 6) | ||
38 | |||
39 | #define HW_RTC_STAT (*(volatile uint32_t *)(HW_RTC_BASE + 0x10)) | ||
40 | #define HW_RTC_STAT__NEW_REGS_BP 8 | ||
41 | #define HW_RTC_STAT__NEW_REGS_BM 0xff00 | ||
42 | #define HW_RTC_STAT__STALE_REGS_BP 16 | ||
43 | #define HW_RTC_STAT__STALE_REGS_BM 0xff0000 | ||
44 | #define HW_RTC_STAT__XTAL32768_PRESENT (1 << 27) | ||
45 | #define HW_RTC_STAT__XTAL32000_PRESENT (1 << 28) | ||
46 | #define HW_RTC_STAT__WATCHDOG_PRESENT (1 << 29) | ||
47 | #define HW_RTC_STAT__ALARM_PRESENT (1 << 30) | ||
48 | #define HW_RTC_STAT__RTC_PRESENT (1 << 31) | ||
49 | |||
50 | #define HW_RTC_MILLISECONDS (*(volatile uint32_t *)(HW_RTC_BASE + 0x20)) | ||
51 | |||
52 | #define HW_RTC_SECONDS (*(volatile uint32_t *)(HW_RTC_BASE + 0x30)) | ||
53 | |||
54 | #define HW_RTC_ALARM (*(volatile uint32_t *)(HW_RTC_BASE + 0x40)) | ||
55 | |||
56 | #define HW_RTC_WATCHDOG (*(volatile uint32_t *)(HW_RTC_BASE + 0x50)) | ||
57 | |||
58 | #define HW_RTC_PERSISTENTx(x) (*(volatile uint32_t *)(HW_RTC_BASE + 0x60 + (x) * 0x10)) | ||
31 | 59 | ||
32 | #define HW_RTC_PERSISTENT0 (*(volatile uint32_t *)(HW_RTC_BASE + 0x60)) | 60 | #define HW_RTC_PERSISTENT0 (*(volatile uint32_t *)(HW_RTC_BASE + 0x60)) |
61 | #define HW_RTC_PERSISTENT0__CLOCKSOURCE (1 << 0) | ||
62 | #define HW_RTC_PERSISTENT0__ALARM_WAKE_EN (1 << 1) | ||
63 | #define HW_RTC_PERSISTENT0__ALARM_EN (1 << 2) | ||
64 | #define HW_RTC_PERSISTENT0__XTAL24MHZ_PWRUP (1 << 4) | ||
65 | #define HW_RTC_PERSISTENT0__XTAL32KHZ_PWRUP (1 << 5) | ||
66 | #define HW_RTC_PERSISTENT0__XTAL32_FREQ (1 << 6) | ||
67 | #define HW_RTC_PERSISTENT0__ALARM_WAKE (1 << 7) | ||
68 | #define HW_RTC_PERSISTENT0__AUTO_RESTART (1 << 17) | ||
33 | #define HW_RTC_PERSISTENT0__SPARE_BP 18 | 69 | #define HW_RTC_PERSISTENT0__SPARE_BP 18 |
34 | #define HW_RTC_PERSISTENT0__SPARE_BM (0x3fff << 18) | 70 | #define HW_RTC_PERSISTENT0__SPARE_BM (0x3fff << 18) |
35 | #define HW_RTC_PERSISTENT0__SPARE__RELEASE_GND (1 << 19) | 71 | #define HW_RTC_PERSISTENT0__SPARE__RELEASE_GND (1 << 19) |
36 | 72 | ||
73 | #define HW_RTC_PERSISTENT1 (*(volatile uint32_t *)(HW_RTC_BASE + 0x70)) | ||
74 | |||
75 | #define HW_RTC_PERSISTENT2 (*(volatile uint32_t *)(HW_RTC_BASE + 0x80)) | ||
76 | |||
77 | #define HW_RTC_PERSISTENT3 (*(volatile uint32_t *)(HW_RTC_BASE + 0x90)) | ||
78 | |||
79 | #define HW_RTC_PERSISTENT4 (*(volatile uint32_t *)(HW_RTC_BASE + 0xa0)) | ||
80 | |||
81 | #define HW_RTC_PERSISTENT5 (*(volatile uint32_t *)(HW_RTC_BASE + 0xb0)) | ||
82 | |||
83 | struct imx233_rtc_info_t | ||
84 | { | ||
85 | uint32_t seconds; | ||
86 | uint32_t persistent[6]; | ||
87 | }; | ||
88 | |||
89 | static inline void imx233_rtc_init(void) | ||
90 | { | ||
91 | __REG_CLR(HW_RTC_CTRL) = __BLOCK_CLKGATE; | ||
92 | } | ||
93 | |||
94 | static inline uint32_t imx233_rtc_read_seconds(void) | ||
95 | { | ||
96 | return HW_RTC_SECONDS; | ||
97 | } | ||
98 | |||
99 | static inline uint32_t imx233_rtc_read_persistent(int idx) | ||
100 | { | ||
101 | return HW_RTC_PERSISTENTx(idx); | ||
102 | } | ||
103 | |||
104 | void imx233_rtc_write_seconds(uint32_t seconds); | ||
105 | void imx233_rtc_write_persistent(int idx, uint32_t val); | ||
106 | |||
107 | struct imx233_rtc_info_t imx233_rtc_get_info(void); | ||
108 | |||
37 | #endif /* RTC_IMX233_H */ | 109 | #endif /* RTC_IMX233_H */ |