14 linux驅動 spi GPIO模擬

2021-10-07 04:06:23 字數 1897 閱讀 5847

spi系列文章:

1.spi 硬體、協議

2.spi(gpio模擬)

3.spi驅動

gpio模擬spi

只實現一下主機傳送,上公升沿傳送,空閒狀態為低電平。需要注意cpu速度過快,gpio電平設定會被合併,需要加入延時函式。

另外自己實現延時的話需要使用記憶體屏障關鍵字volatile 防止被優化。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

module_license

("gpl");

dev_t devid;

struct cdev char_dev;

struct class * char_class;

int buffer_size =

500000

;char

* char_data;

#pragma pack(4)

static

struct gpio

* gpio_b;

#pragma pack()

#define scl_h (gpio_b->out_put |= (1 << 31))

#define scl_l (gpio_b->out_put &= ~(1 << 31))

#define sdo_h (gpio_b->out_put |= (1 << 30))

#define sdo_l (gpio_b->out_put &= ~(1 << 30))

#define cycle_ns 20l

//spi週期

inline

void

write_spi_byte

(unsigned

char spi_byte)

}static ssize_t write

(struct file * fl,

const

char __user * buf, size_t len, loff_t * offset)

ret = copy_len - ret;

for(i =

0; i < ret;

++i)

// *offset += ret; //移動檔案指標

return ret;

}static

long

ioctl

(struct file * fl,

unsigned

int cmd,

unsigned

long arg)

return0;

}struct file_operations my_opts =

;static

int __init spi_init

(void

)static

void __exit spi_exit

(void

)module_init

(spi_init)

;module_exit

(spi_exit)

;

執行試一下
[root@minicoco spi_visual]# insmod spi.ko

[ 364.136000] spi init

[root@minicoco spi_visual]# echo 123456 > /dev/char_test_dev_1

14 Linux備份與恢復

系統目錄 安裝服務的資料 mysql需要備份的資料 完全備份 完全備份就是指把所有需要備份的資料全部備份,當然完全備份可以備份整塊硬碟,整個分割槽或某個具體的目錄。特點 恢復時比較方便,只需要恢復一次。增量備份 第一次完全備份,之後每次備份只備份新增的資料。特點 恢復時比較麻煩,需要挨個恢復。差異備...

14 Linux 字元裝置控制技術

裝置控制 應用函式 在使用者空間,使用ioctl系統呼叫來控制裝置 int ioctl int fd,unsigned long cmd,fd 要控制的裝置檔案描述符 cmd 傳送給裝置的控制命令,其實只是用來起到標識作用 可選引數,存在與否依賴於控制命令,可以簡單地課程就是乙個引數 核心file ...

隨筆14 Linux探索 系統效能配置

要修改的檔案 vim usr lib sysctl.d 00 system.conf可修改配置項說明 關閉ipv6 net.ipv6.conf.all.disable ipv6 1 net.ipv6.conf.default.disable ipv6 1 避免放大攻擊 net.ipv4.icmp e...