慢热症 发表于 2022-6-7 14:24:10

3024SINK工程PIO逻辑控制

想问一下,在SINK工程实现一个GPIO的逻辑应该怎么改代码,一个输入口1对应两个输出口2和3,1检测到高电平,2输出高3输出低,1检测到低电平,2输出低3输出高,这个应该怎么实现

jjr 发表于 2022-6-7 17:01:55

先把1改为输入,2 3输出,直接轮询判断1的状态,然后驱动2 3即可。

慢热症 发表于 2022-6-14 15:00:23

jjr 发表于 2022-6-7 17:01
先把1改为输入,2 3输出,直接轮询判断1的状态,然后驱动2 3即可。

轮询判断应该在哪里写,sink工程跑系统的,不是一个while(1)循环

ganxiniuhe 发表于 2022-6-14 15:50:42

慢热症 发表于 2022-6-14 15:00
轮询判断应该在哪里写,sink工程跑系统的,不是一个while(1)循环

sink_event.h加一个event,比如说EventSysLoop,放到handleUEMessage

case EventSysLoop:
    Function();
    MessageSendLater(&theSink.task, EventSysLoop, 0, D_SEC(1));
    break;

这样就每1秒一个循环

慢热症 发表于 2022-6-16 14:30:21

ganxiniuhe 发表于 2022-6-14 15:50
sink_event.h加一个event,比如说EventSysLoop,放到handleUEMessage

case EventSysLoop:


caseUserEventHeadsetInsert_pull_35:
      {
            if (PioGetPio(21)==1) //如果插入3.5mm耳机
                {
                MAIN_DEBUG_L1("headset insert!");
                PioOutHigh(1);//使能LM4809
                PioOutHigh(53);//关闭NS4871
                }
            else if (PioGetPio(21)==0) //如果未插入3.5mm耳机
               {
                MAIN_DEBUG_L1("headset pull!");
                PioOutLow(1);//关闭LM4809
                PioOutLow(53);//打开NS4871
               }
            //每一秒循环检测一次IO口
             MessageSendLater(&theSink.task, UserEventHeadsetInsert_pull_35, 0, D_SEC(1));
      }
      break;
你好,我这样添加的,为什么没有生效呢

ganxiniuhe 发表于 2022-6-16 17:56:31

初始化的时候有没发送这个事件,可以在sinkAppInit里面发送
还有PIO有没做初始化

慢热症 发表于 2022-6-20 20:12:54

ganxiniuhe 发表于 2022-6-16 17:56
初始化的时候有没发送这个事件,可以在sinkAppInit里面发送
还有PIO有没做初始化
...

实现了,给大佬磕头了

慢热症 发表于 2022-7-18 17:59:01

ganxiniuhe 发表于 2022-6-16 17:56
初始化的时候有没发送这个事件,可以在sinkAppInit里面发送
还有PIO有没做初始化
...

大佬,这个循环检测生效之后好像导致原来的一些时间不发生了,比如EventSysAutoSwitchOff,屏蔽了这个循环检测之后自动关机才能生效,这是什么原因啊
页: [1]
查看完整版本: 3024SINK工程PIO逻辑控制