I O晶元擴充套件開發

2021-09-26 01:45:50 字數 2018 閱讀 4597

cpu上的gpio口特別有限,所以想著給現有的單板做乙個i/o擴充套件。方案是qca9563通過i2c,外接mcp23017,可以外出16路i/o口。配置i/o口為固定方向,8個為一組,一組輸出一組輸入。

剛開始打算直接通過qca9563自帶的i2c口控制器進行控制mcp23017晶元,但是在開發的過程中才發現沒有i2c控制器驅動**。可能由於這款晶元太新了,開源**還沒有適配,最後想著用gpio模擬i2c的方式進行控制的。

首先選中gpio模擬i2c驅動部分

註冊i2c裝置

static

struct ath79_i2c_platform_data ath79_i2c_pdata =

;static

struct resource ath79_i2c_resources=

,,};

static

struct platform_device ath79_i2c_device =,}

;platform_device_register

(&ath79_i2c_device)

;

驅動跑起來之後,會建立乙個i2c裝置/dev/i2c-0.

應用層開發

提供讀寫介面:

#define mcp23017_address 0x20 

/* mcp23017 address 通過查手冊和硬體走線即可確定*/

//通過/dev/i2c-0裝置進行讀

intmcp23017_read

(unsigned

char regaddr,

unsigned

char

*value)

*value = buf2[0]

;#ifdef ioextend_debug

print_file

("[%s %d]%s value:0x%2x\n"

,__file__

,__line__

, register_to_string[regaddr]

, buf2[0]

);#endif

return ret_ok;

}

//通過/dev/i2c-0裝置進行寫

intmcp23017_write

(unsigned

char regaddr,

unsigned

char value)

return ret_ok;

}

//初始化/dev/i2c-0

intmcp23017_init()

ioctl

(i2c_fd, i2c_timeout,2)

;ioctl

(i2c_fd, i2c_retries,1)

; i2c_data.nmsgs =2;

i2c_data.msgs =

(struct i2c_msg *

)malloc

(i2c_data.nmsgs *

sizeof

(struct i2c_msg));

if(!i2c_data.msgs)

mcp23017_write

(reg_iodira,

0x00);

/* out put module */

mcp23017_write

(reg_iodirb,

0xff);

/* in put module */

mcp23017_write

(reg_gpioa,

0xff);

return ret_ok;

}

通過read、write介面就可以控制mcp23017晶元,如果想要實時獲取晶元上的狀態,需要把晶元上的中斷引腳解出來,根據中斷來讀。或者採用輪詢模式進行讀狀態。

php擴充套件開發

php擴充套件 pecl 跟php引擎一樣都是使用c語言開發。php核心開發組成員鳥哥laruence使用的是vim進行php開發。書籍 案例 php src ext pecl開發郵件組 盡量編寫一些phpt測試用例,php src tests下有很多參考.測試時用 enable debug編譯ph...

php擴充套件開發

二 php擴充套件開發 擴充套件開發流程 生成開發骨架 修改config.m4 編碼 編譯擴充套件為so 修改php.ini 1.生成開發骨架 1.1 進入擴充套件目錄 cd php 7.0.1 ext 1.2 用.ext skel生成骨架 ext skel extname module 1.3 修...

PHP擴充套件開發

php function say hello len spprintf strg,0,hello s n arg return stringl strg,len,0 1.引數接收 這裡接收函式的引數需要通過zend parse parameter函式解析,第乙個引數指定使用者傳入say hello函...