一、电路图
3个165串联组成扩展24路光耦输入检测,一个595扩展8路继电器输出

二、驱动源码
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>//jiffies在此头文件中定义
#include <linux/init.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
#include <linux/gpio.h>
#include <mach/gpio.h>
#include <linux/delay.h>
static struct hrtimer kthread_timer;
#define DISP_BUF_LEN 2
#define DISP_DIG_LEN 4
typedef struct _disp_buf_t{
uint8_t output[DISP_BUF_LEN];
uint8_t dig[DISP_DIG_LEN]
}disp_buf_t;
disp_buf_t disp_buf;;
#define SERIAL_CLK_PIN NUC980_PB0
#define SERIAL_PE_PIN NUC980_PB3
#define SERIAL_LE_PIN NUC980_PB2
#define SERIAL_IN_PIN NUC980_PB6
#define SERIAL_OUT_PIN NUC980_PB4
#define serial_clk_pin(sta) gpio_set_value(SERIAL_CLK_PIN, sta)
#define serial_pe_pin(sta) gpio_set_value(SERIAL_PE_PIN, sta)
#define serial_le_pin(sta) gpio_set_value(SERIAL_LE_PIN, sta)
#define serial_in_pin() gpio_get_value(SERIAL_IN_PIN)
#define serial_out_pin(sta) gpio_set_value(SERIAL_OUT_PIN, sta)
#define LED_PIN NUC980_PB13
#define EXTIO_IN_MAX 24
#define EXTIO_OUT_MAX 8
#define EXTIO_KEY_MAX 2
#define EXTIO_CHECK_AMX 2
#define EXTIO_SET_KEY 0
#define EXTIO_OPEN_KEY 1
#define EXTIO_KEY_RELEASE 0
#define EXTIO_KEY_PRESS 1
#define EXTIO_KEY_KEEP 2
#define EXTIO_CHECK_POWERDOWN 0
#define EXTIO_CHECK_EMERGENCY 1
typedef struct _input_t{
uint8_t buf[EXTIO_IN_MAX/8];
uint8_t save[EXTIO_IN_MAX/8];
uint8_t timer[EXTIO_IN_MAX];
}input_t;
typedef struct _output_t{
uint8_t byte[EXTIO_OUT_MAX/8];
}output_t;
typedef struct _check_t{
uint8_t sta[EXTIO_CHECK_AMX];
uint8_t time[EXTIO_CHECK_AMX];
}check_t;
typedef struct _extio_t{
input_t input;
output_t output;
key_t key;
check_t check;
}extio_t;
extio_t extio;
void extio_write(uint8_t byte)
{
uint8_t i;
for( i=0; i<8; i++ ){
if( byte&(0x80) )
serial_out_pin(1);
else
serial_out_pin(0);
serial_clk_pin(1);
udelay(100);
serial_clk_pin(0);
udelay(100);
byte<<=1;
}
}
void extio_output(void)
{
uint8_t i;
for( i=
Linux驱动程序:24路光耦输入与8路继电器输出设计

该代码实现了一个基于Linux内核的驱动程序,用于管理24路光耦合器输入和8路继电器输出。它使用了硬件实时定时器(hrtimer)进行周期性任务,并通过GPIO控制信号。程序还包括一个简单的用户空间应用示例,用于读写设备节点进行通信。
最低0.47元/天 解锁文章
391

被折叠的 条评论
为什么被折叠?



