소스 검색

Complete the function of the digital display

monkeylqd 3 주 전
부모
커밋
71406ab83f
2개의 변경된 파일27개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      include/gpioregs.h
  2. 24 0
      ssegment.c

+ 3 - 0
include/gpioregs.h

@@ -9,4 +9,7 @@
 #define BUZZER_CHANNEL 0x43
 #define BUZZER_CHAN_1   0X41
 #define BUZZER_FREQ   0X42
+
+
+#define SSEGMENT_POINT 0xFD6A0960
 #endif

+ 24 - 0
ssegment.c

@@ -44,19 +44,43 @@ struct ssegment_dev
 
 static struct ssegment_dev *dev = NULL;
 
+
+unsigned int readl_cust(unsigned int addr)
+{
+    void __iomem *reg_base;
+    reg_base = ioremap(addr, 0x1000);
+    return readl(reg_base);
+}
+
+int writel_cust(unsigned int addr, unsigned int val)
+{
+    void __iomem *reg_base;
+    reg_base = ioremap(addr, 0x1000);
+    writel(val, reg_base);
+    return 0;
+}
+
 static void delay_work_func(struct work_struct *work)
 {
+    int ret = 0;
+    unsigned int val = 0;
     if(dev->size != 0)
     {
         // 写数据
         outb(dev->buffer[0], PORT_80);
         if((dev->buffer[1] & 0x02))
         {
+            val = readl_cust(SSEGMENT_POINT);
+            val = val | 0x01;
+            ret = writel_cust(SSEGMENT_POINT, val);
             // 显示小数点 待提供接口
             // 待实现
         }
         else
         {
+            val = readl_cust(SSEGMENT_POINT);
+            val = val & 0xFFFFFFFE;
+            ret = writel_cust(SSEGMENT_POINT, val);
             // 不显示小数点
         }