Linux_DI_ADC

#include <stdio.h>
#include <pthread.h>
#include “HW_INPUT.h”
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h> //define O_WRONLY and O_RDONLY
//#include “…/DRIVER/GPIO/driver_gpio.h”

#include “/home/zlgmcu/vscode/EMS_SNV/source/DRIVER/GPIO/GPIO.h”
/*
*************************** Product Code Begin ************************************
*/
#define GPIO_134_LDI1 134
#define GPIO_135_LDI2 135
#define GPIO_136_LDI3 136
#define GPIO_137_LDI4 137

#define GPIO_488_HDI1 488
#define GPIO_489_HDI2 489
#define GPIO_490_HDI3 490
#define GPIO_491_HDI4 491

#define ADC1 1
#define ADC2 2
#define ADC3 3
#define ADC4 4

static int ret;
char direction[4];

int Ldi[4];
int Hdi[4];

double AdcValue[4];

int HW_INPUT_GetLdiValue(int channel)
{
if((channel>0)&&(channel<=4))
{
return Ldi[channel-1];
}
else
{
return -1;
/* code */
}
}

void SetLdiValue(int channel,int value)
{
if((channel>0)&&(channel<=4))
{
Ldi[channel-1]=value;
}
}

//
int HW_INPUT_GetHdiValue(int channel)
{
if((channel>0)&&(channel<=4))
{
return Hdi[channel-1];
}
else
{
return -1;
/* code */
}
}

void SetHdiValue(int channel,int value)
{
if((channel>0)&&(channel<=4))
{
Hdi[channel-1]=value;
}
}

//
void SetAdcValue(int channel,double value)
{
if((channel>0)&&(channel<=4))
{
AdcValue[channel-1]=value;
}
}

//
double HW_INPUT_GetAdcValue(int channel)
{
if((channel>0)&&(channel<=4))
{
return AdcValue[channel-1];
}
else
{
return -1;
/* code */
}
}

void HW_INPUT_Init()
{
//LDI
sysfs_gpio_export(GPIO_134_LDI1);//export gpio key1
sysfs_gpio_export(GPIO_135_LDI2);//export gpio key2
sysfs_gpio_export(GPIO_136_LDI3);//export gpio key2
sysfs_gpio_export(GPIO_137_LDI4);//export gpio key2

 sysfs_gpio_set_dir(GPIO_134_LDI1, 0);//set as input
 sysfs_gpio_set_dir(GPIO_135_LDI2, 0);//set as input
 sysfs_gpio_set_dir(GPIO_136_LDI3, 0);//set as input
 sysfs_gpio_set_dir(GPIO_137_LDI4, 0);//set as input

 //HDI 
 sysfs_gpio_export(GPIO_488_HDI1);//export gpio key1
 sysfs_gpio_export(GPIO_489_HDI2);//export gpio key2
 sysfs_gpio_export(GPIO_490_HDI3);//export gpio key2
 sysfs_gpio_export(GPIO_491_HDI4);//export gpio key2
 
 sysfs_gpio_set_dir(GPIO_488_HDI1, 0);//set as input
 sysfs_gpio_set_dir(GPIO_489_HDI2, 0);//set as input
 sysfs_gpio_set_dir(GPIO_490_HDI3, 0);//set as input
 sysfs_gpio_set_dir(GPIO_491_HDI4, 0);//set as input

}

void *HW_INPUT_ThreadFunction(void arg)
{
char buf[10];
unsigned int value1;
double value2;
while (1)
{
/
code */
usleep(50000);//50 ms

    sysfs_gpio_get_value(GPIO_134_LDI1, &value1);	
    SetLdiValue(GPIO_134_LDI1,value1);

    sysfs_gpio_get_value(GPIO_135_LDI2, &value1);	
    SetLdiValue(GPIO_135_LDI2,value1);

    sysfs_gpio_get_value(GPIO_136_LDI3, &value1);
    SetLdiValue(GPIO_136_LDI3,value1);

    sysfs_gpio_get_value(GPIO_137_LDI4, &value1);
    SetLdiValue(GPIO_137_LDI4,value1);

    //HDI 
    sysfs_gpio_get_value(GPIO_488_HDI1, &value1);
    SetHdiValue(GPIO_488_HDI1,value1);

    sysfs_gpio_get_value(GPIO_489_HDI2, &value1);
     SetHdiValue(GPIO_489_HDI2,value1);

    sysfs_gpio_get_value(GPIO_490_HDI3, &value1);
    SetHdiValue(GPIO_490_HDI3,value1);

    sysfs_gpio_get_value(GPIO_491_HDI4, &value1);
    SetHdiValue(GPIO_491_HDI4,value1);

    //ADC
    sysfs_adc_get_value(ADC1, &value2);
    SetAdcValue(ADC1,value2);

    sysfs_adc_get_value(ADC2, &value2);
    SetAdcValue(ADC2,value2);

    sysfs_adc_get_value(ADC3, &value2);
    SetAdcValue(ADC3,value2);

    sysfs_adc_get_value(ADC4, &value2);
    SetAdcValue(ADC4,value2);
}

}

void HW_INPUT_CreateThread()
{
pthread_t threadID;

pthread_create(&threadID,NULL,HW_INPUT_ThreadFunction,NULL);

}

根据提供的引用内容,CCM_DI0_EXT_CLK是指在源码中的clk-imx6q.c文件中,通过设置LDB_DI0_SEL的parent为PLL2_PFD0_352M来配置的一个时钟信号。在该文件中的init_ldb_clks函数中,通过对寄存器CCM_CS2CDR的操作,将LDB_DI0_SEL的值设置为PLL2_PFD0_352M的值。而在设备树文件中的dts中,通过设置fsl,ldb-di0-parent为IMX6QDL_CLK_PLL2_PFD0_352M来指定CCM_DI0_EXT_CLK的parent。在arch/arm/mach-imx/clk-gate2.c文件中,定义了一系列与时钟门控相关的函数,其中包括clk_gate2_enable、clk_gate2_disable、clk_gate2_do_shared_clks等函数,这些函数用于控制时钟的使能和禁用。在clk_gate2_do_hardware函数中,通过对寄存器CCM_CCGR_FULL_ENABLE的操作,实现对时钟的使能和禁用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [IMX6DL Lvds pixelclock 深入详解](https://blog.youkuaiyun.com/changqing1990/article/details/79354334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Linux clock子系统【3】-i2c控制器打开时钟的流程分析(devm_clk_get)(consumer侧)](https://blog.youkuaiyun.com/m0_46535940/article/details/126328569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mason辘轳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值