📄 app2543.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <linux/ioctl.h>#include <linux/delay.h>#include <asm/delay.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#define AD_IOC_MAGIC 'k'#define CS_ON _IO(AD_IOC_MAGIC,0)#define CS_OFF _IO(AD_IOC_MAGIC,1)#define CLK_ON _IO(AD_IOC_MAGIC,2)#define CLK_OFF _IO(AD_IOC_MAGIC,3)#define INDATA_ON _IO(AD_IOC_MAGIC,4)#define INDATA_OFF _IO(AD_IOC_MAGIC,5)int main(){static unsigned char portsum=6; //通道总数
unsigned char indata; //转换输入参数
unsigned char j; //循环变量
unsigned int csl; //CS片选
unsigned int clk; //CLK时钟
unsigned int outdata[portsum]; //AD转换得到的数据
unsigned int tmpe; //AD转换结果临时量
int i;
unsigned char key;int dev_fd;dev_fd = open("/dev/tlc2543",O_RDWR | O_NONBLOCK);if( dev_fd == -1){ printf("can't open file /dev/tlc2543\n"); exit(0); }
//setparm(indata);
indata=0x00;//通道0,12bit,MSB first,正数
while(1)
{
for(j=0;j<portsum;j++)
{
indata=j<<4; //通道参数
//setpin(csl_pin,0); //开始IO操作 ioctl(dev_fd,CS_OFF,0);
for(i=0;i<12;i++)
{
//setpin(clk_pin,1); //上升沿触发 ioctl(dev_fd,CLK_ON,0);
if(i<8)
//setpin(indate_pin,(indata<<1)&1); //输入参数往左移一位 ioctl(dev_fd,((indata<<1)&1)?INDATA_ON:INDATA_OFF,0);
//tmpe=getpin(outdata_pin); //获取上一次转换完的数据中的一位 read(dev_fd,&key,1); if(key==1)tmpe=1; else tmpe=0;
outdata[j]=outdata[j]<<1 + tmpe; //转换结果
//setpin(clk_pin,0); ioctl(dev_fd,CLK_OFF,0);
} //for i<12
//setpin(csl_pin,1); //IO操作结束,开始转换 ioctl(dev_fd,CS_ON,0);
//mdelay(50); //转换需要的时间, 微秒 int a; for(a=0;a<100;a++) { tmpe=tmpe+1; } tmpe=0;
if(outdata[j]) {
printf("input paramter is: %x \n",indata);
printf("last out is: %d \n",outdata[j]); //转换的第一个数据是错误的,舍弃 }
} //for i< portsum
} // wihle} // mian
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -