summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx233/debug-imx233.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c
index 6fe59cad20..d5d4d08b9a 100644
--- a/firmware/target/arm/imx233/debug-imx233.c
+++ b/firmware/target/arm/imx233/debug-imx233.c
@@ -37,6 +37,7 @@
37#include "emi-imx233.h" 37#include "emi-imx233.h"
38#include "audioin-imx233.h" 38#include "audioin-imx233.h"
39#include "audioout-imx233.h" 39#include "audioout-imx233.h"
40#include "timrot-imx233.h"
40#include "string.h" 41#include "string.h"
41#include "stdio.h" 42#include "stdio.h"
42#include "button.h" 43#include "button.h"
@@ -872,6 +873,87 @@ bool dbg_hw_info_audio(void)
872 } 873 }
873} 874}
874 875
876bool dbg_hw_info_timrot(void)
877{
878 lcd_setfont(FONT_SYSFIXED);
879
880 while(1)
881 {
882 int button = my_get_action(HZ / 10);
883 switch(button)
884 {
885 case ACT_NEXT:
886 case ACT_PREV:
887 case ACT_OK:
888 lcd_setfont(FONT_UI);
889 return true;
890 case ACT_CANCEL:
891 lcd_setfont(FONT_UI);
892 return false;
893 }
894
895 lcd_clear_display();
896 int line = 0;
897 for(int i = 0; i < 4; i++)
898 {
899 struct imx233_timrot_info_t info = imx233_timrot_get_info(i);
900 const char *unit = NULL;
901 const char *unit_prefix = "";
902 int src_freq = 1;
903 switch(info.src)
904 {
905 case BV_TIMROT_TIMCTRLn_SELECT__NEVER_TICK: src_freq = 0; break;
906 case BV_TIMROT_TIMCTRLn_SELECT__PWM0: unit = "PWM0"; break;
907 case BV_TIMROT_TIMCTRLn_SELECT__PWM1: unit = "PWM1"; break;
908 case BV_TIMROT_TIMCTRLn_SELECT__PWM2: unit = "PWM2"; break;
909 case BV_TIMROT_TIMCTRLn_SELECT__PWM3: unit = "PWM3"; break;
910 case BV_TIMROT_TIMCTRLn_SELECT__PWM4: unit = "PWM4"; break;
911 case BV_TIMROT_TIMCTRLn_SELECT__ROTARYA: unit = "ROTA"; break;
912 case BV_TIMROT_TIMCTRLn_SELECT__ROTARYB: unit = "ROTB"; break;
913 case BV_TIMROT_TIMCTRLn_SELECT__32KHZ_XTAL: src_freq = 32000; break;
914 case BV_TIMROT_TIMCTRLn_SELECT__8KHZ_XTAL: src_freq = 8000; break;
915 case BV_TIMROT_TIMCTRLn_SELECT__4KHZ_XTAL: src_freq = 4000; break;
916 case BV_TIMROT_TIMCTRLn_SELECT__1KHZ_XTAL: src_freq = 1000; break;
917 case BV_TIMROT_TIMCTRLn_SELECT__TICK_ALWAYS:
918 default: src_freq = 24000000 / (1 << info.prescale); break;
919 }
920 int count = info.reload ? info.fixed_count + 1 : info.run_count;
921 if(src_freq == 0 || count == 0)
922 continue;
923 unsigned long long freq;
924 if(info.reload)
925 freq = (unsigned long long)src_freq * 1000 / count;
926 else
927 freq = count * 1000 / src_freq;
928
929 if(freq >= 1000000000)
930 {
931 unit_prefix = "M";
932 freq /= 1000000;
933 }
934 else if(freq >= 1000000)
935 {
936 unit_prefix = "k";
937 freq /= 1000;
938 }
939 char str[32];
940 if(freq % 1000)
941 snprintf(str, sizeof(str), "%lu.%lu", (unsigned long)freq / 1000, (unsigned long)freq % 1000);
942 else
943 snprintf(str, sizeof(str), "%lu", (unsigned long)freq / 1000);
944 char str2[32];
945 if(unit)
946 snprintf(str2, sizeof(str2), "%s%s(%s)", unit_prefix, info.reload ? "H" : "", unit);
947 else
948 snprintf(str2, sizeof(str2), "%s%s", unit_prefix, info.reload ? "Hz" : "s");
949 lcd_putsf(0, line++, "%ctimer %d: %s %s", info.polarity ? '+' : '-', i, str, str2);
950 }
951
952 lcd_update();
953 yield();
954 }
955}
956
875static struct 957static struct
876{ 958{
877 const char *name; 959 const char *name;
@@ -892,6 +974,7 @@ static struct
892 {"usb", dbg_hw_info_usb}, 974 {"usb", dbg_hw_info_usb},
893 {"emi", dbg_hw_info_emi}, 975 {"emi", dbg_hw_info_emi},
894 {"audio", dbg_hw_info_audio}, 976 {"audio", dbg_hw_info_audio},
977 {"timrot", dbg_hw_info_timrot},
895 {"target", dbg_hw_target_info}, 978 {"target", dbg_hw_target_info},
896}; 979};
897 980