公共文件和gpio開發(fā)說明書_第1頁
公共文件和gpio開發(fā)說明書_第2頁
公共文件和gpio開發(fā)說明書_第3頁
公共文件和gpio開發(fā)說明書_第4頁
公共文件和gpio開發(fā)說明書_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、V2.12014-01-17Copyright 2014Allwinner Technology.s.- 1 -ReviHistoryCopyright 2014Allwinner Technology.s.- 2 -VerDateChanges compared to previous ieV1.02013-03-15初建版本V2.02014-01-17刪除部分章節(jié)目錄概述61.1.1.1.2.1.3.編寫目的6適用范圍6相關62.模塊介紹72.1.2.2.模塊功能介紹7相關術語介紹72.2.1. Script. 7Script 接口7GPIO7模塊配置介紹7源碼結構介紹72.3.2.4.3

2、.4.模塊體系結構描述8模塊數(shù)據結構描述9aw_gpio_chip9gpio_cfg_t94.3. gpio_e_cfg_t104.4. gpio_pm_t10GPIO 接口描述12Linux 標準 GPIO 接口12gpiolib_sysfs_init12gpio_export12gpio_export_link12gpio_sysfs_set_active_low12gpio_unexport12gpiochip_add13gpiochip_remove13gpiochip_find13gpio_request13gpio_free13gpio_request_one14gpio_requ

3、est_array14gpio_free_array15gpiochip_is_requested15gpio_direction_input15gpio_direction_output15gpio_set_debounce15 gpio_get_value16 gpio_set_value16 gpio_cansleep16Copyright 2014Allwinner Technology.s.- 3 - gpio_to_irq16gpio_get_value_cansleep16gpio_set_value_cansleep.16多功能配置接口17sw_gpio_setcfg.17sw

4、_gpio_getcfg.17sw_gpio_setpull17sw_gpio_getpull17sw_gpio_setdrvlevel17sw_gpio_getdrvlevel18sw_gpio_setall_range18sw_gpio_getall_range18sw_gpio_dump_config.195.2.GPIO 中斷接口19功能說明19函數(shù)說明20sw_gpio_irq_request20sw_gpio_irq_free20sw_gpio_esw_gpio_esw_gpio_esw_gpio_esw_gpio_esw_gpio_esw_gpio_esw_gpio_esw_gp

5、io_esw_gpio_e_setall_range21_getall_range21_dumpall_range21_set_trigtype22_get_trigtype22_set_debounce22_get_debounce22_clr_irqpd_sta22_get_irqpd_sta23_get_enable235.3.2.13. u32 sw_gpio_e_set_enable23Script 接口使用描述24script_get_item246.1.1. 說明246.1.2. 示例25script_get_pio_list266.2.1. 說明266.2.2. 示例26scr

6、ipt_dump_mainkey.266.3.1. 說明266.3.2. 示例27GPIO 接口使用描述28如何確定用哪一套接口287.2. 關于 GPIO 的申請和. 29Copyright 2014Allwinner Technology.s.- 4 -7.3.常用場景33使用標準 GPIO 接口33將 PF3 設為 input, 并獲取其 data 值33將 PF3 設為 output, 并將 data 設為高33PF3 已被設為 output, 現(xiàn)將其 data 設為低34設置一組 gpio 的 input/output 狀態(tài)34使用多功能配置接口34將 PF3 配置成 2 號功能(S

7、DC0_CMD)34將 PF3 配置成 2 號功能(SDC0_CMD), pull 設為 1.35PF3 配置357.3.2.4.7.3.2.5.7.3.2.6.獲取 PF3 的 mul sel 值36獲取 PF3 的 mul sel, pull, driver level, data 值36設置一組 gpio 的 mul sel, pull, driver level, data 值367.3.3. 使用 gpio 中斷接口377.3.3.1.7.3.3.2.7.3.3.3.7.3.3.4.申請 PA0 中斷, 并設為上升沿觸發(fā)37PA0 中斷38將 PA0 配置成下降沿觸發(fā)38打開 PA0

8、 中斷的 enable 位38Script 接口和 GPIO 接口合用39card0_boot_para 主鍵下的所有 gpio 信息39sdc_cmd 子鍵的 gpio 信息40AXP GPIO 的配置407.4.如何得到 GPIO. 417.4.1. 已知 GPIO 名稱417.4.2. sys_config 中的 GPIO. 428. 總結439. Declaration44Copyright 2014Allwinner Technology.s.- 5 -概述編寫目的介紹 A20上 script 和 GPIO 的接口及其使用方法。1.2. 適用范圍適用于 A20對應 sdk。1.3.

9、相關Linux 內核和驅動開發(fā)。Copyright 2014Allwinner Technology.s.- 6 -模塊介紹模塊功能介紹script 接口提供了sys_config.fex的功能。GPIO 接口提供了 GPIO 操作功能。2.2. 相關術語介紹2.2.1. Script指的是打包到 img 中的 sys_config.fex 文件。 包含系統(tǒng)各模塊配置參數(shù)。各方案的sys_config.fex 文件路徑為:lichee/tools/pack_brandy/chipn7i/configs/android/方案名/sys_config.fex2.2.2. Script 接口由內核提

10、供,對 sys_config.fex 進行的函數(shù)。2.2.3. GPIOGeneral Pure Input Output, 即通用輸入/輸出, 也稱總線擴展器。2.3. 模塊配置介紹GPIO 為內核必備的模塊, 直接編譯到 kernel 中, 無須 sys_config.fex 或進行配置。config2.4.源碼結構介紹scriptscript 接口在linux-3.4archarmmach-sun7isys_config.c 中實現(xiàn)。gpiogpio 模塊源碼在licheelinux-3.3archarmmach-sun7igpio 目錄下;gpio_multi_func.c::對 pi

11、n 腳的功能、pull、driverlevel 進行配置的接口;gpio_init.c::模塊初始化,gpio chip;gpio_e.c::gpio 中斷操作接口;gpio_base.c::提供了標準 gpio 需要的函數(shù)。Copyright 2014Allwinner Technology.s.- 7 -3. 模塊體系結構描述圖 3.1標準 GPIO 接口, 處理輸入輸出, GPIO 申請支持。(1)等。需要linux 內核的gpiolib(2)(3)(4)多功能配置接口, 處理 GPIO 的功能配置, pull, driverlevel 等。gpio e接口, 處理 gpio 外部中斷的

12、配置, 觸發(fā)模式等。gpio pm 接口,管理 gpio 驅動的待機,喚醒操作。Copyright 2014Allwinner Technology.s.- 8 -gpio hardw aregp io 電源管 理操作 gp io 外部中 斷配置操作 多功能配置 操 作input/output操 作g p io libgpio pm 接 口gpio e接 口多功能配置 接 口標 準 gp io 接口模塊數(shù)據結構描述aw_gpio_chip對標準 gpio_chip 的擴展和進一步封裝(mon.h):chip:標準 gpio_chip 成員,由 gpiolib 進行管理,實現(xiàn)了對標準gpio a

13、pi 的支持;cfg: cfg_e pm:定義的 gpio_cfg_t 成員,實現(xiàn)了對 gpio 功能配置的支持;:定義的 gpio_e_cfg_t 成員,實現(xiàn)了對 gpio 外部中斷的支持;定義的 gpio_pm_t 成員,實現(xiàn)了對電源管理的支持;vbase:當前 chip 對應的 gpio 功能配置寄存器的起始虛擬地址,如 PA 對應的起始地址為 0 xf1c20800;vbase_e:當前 chip 對應的 gpio external配置寄存器的起始虛擬地址,如 PA 對應的起始地址為 0 xf1c20a00;irq_num:當前 chip 對應的外部中斷號,如 PA 對應 PA_E l

14、ock:對各 api 的加鎖處理。(43);Copyright 2014Allwinner Technology.s.- 9 -struct aw_gpio_chip struct gpio_chipchip;struct gpio_cfg_t*cfg; struct gpio_e_cfg_t*cfg_e; struct gpio_pm_t*pm;void iomem*vbase;/* gpio einit config reg base */ void iomem *vbase_einit; u32irq_num;spinlock_t lock;4.2. gpio_cfg_t功能配置函數(shù)。C

15、opyright 2014Allwinner Technology.s.- 10 -typedef u32(*pset_cfg)(struct aw_gpio_chip *pchip,u32 offset, u32 val);typedef u32(*pget_cfg)(struct aw_gpio_chip *pchip, u32 offset); typedef u32(*pset_pull)(struct aw_gpio_chip *pchip,u32 offset, u32 val);typedef u32(*pget_pull)(struct aw_gpio_chip *pchip,

16、 u32 offset); typedef u32(*pset_drvlevel)(struct aw_gpio_chip *pchip,u32 offset, u32 val);typedef u32(*pget_drvlevel)(struct aw_gpio_chip *pchip,u32 offset);struct gpio_cfg_t pset_cfgset_cfg;pget_cfgget_cfg; pset_pullset_pull; pget_pull get_pull; pset_drvlevelset_drvlevel; pget_drvlevel get_drvlevel

17、;set_cfg:設置 pin 腳功能接口,如 input/output/e get_cfg:獲取 pin 腳功能接口,如 input/output/e set_pull:設置 pin 腳的上拉/下拉;get_pull:獲取 pin 腳的上拉/下拉狀態(tài);set_drvlevel:設置 pin 腳的驅動能力;get_drvlevel:獲取 pin 腳當前的驅動能力;4.3. gpio_e_cfg_tgpio 中斷處理函數(shù)。Copyright 2014Allwinner Technology.s.- 11 -typedef u32(*pe_set_trig)(struct aw_gpio_chip

18、 *pchip,u32 offset, enum gpio_e_trigtype trig_val); typedef u32(*pe_get_trig)(struct aw_gpio_chip *pchip,u32 offset, enum gpio_e_trigtype *pval);typedef u32(*pe_get_enable)(struct aw_gpio_chip *pchip,u32 offset, u32 *penable);typedef u32(*pe_set_enable)(struct aw_gpio_chip *pchip,u32 offset, u32 ena

19、ble);typedef u32(*pe_get_irqpd_sta)(struct aw_gpio_chip *pchip,u32 offset);typedef u32(*pe_clr_irqpd_sta)(struct aw_gpio_chip *pchip,u32 offset);e_set_trig:設置 pin 腳的中斷觸發(fā)類型;e_get_trig:獲取 pin 腳當前的中斷觸發(fā)類型;e_set_enable:設置 pin 腳的中斷使能;e_get_enable:Copyright 2014Allwinner Technology.s.- 12 -/* for chip, not

20、 just port */typedef u32(*pe_set_debounce)(struct aw_gpio_chip *pchip,struct gpio_e_debounce val);/* for chip, not just port */typedef u32(*pe_get_debounce)(struct aw_gpio_chip *pchip,struct gpio_e_debounce *pval);struct gpio_e_cfg_t pe_set_trige_set_trig;pe_get_trige_get_trig;pe_set_enablee_set_ena

21、ble;pe_get_enablee_get_enable;pe_get_irqpd_stae_get_irqpd_sta; pe_clr_irqpd_stae_clr_irqpd_sta; pe_set_debouncee_set_debounce; pe_get_debounce e _get_debounce;獲取 pin 腳當前的中斷使能狀態(tài);e_get_irqpd_sta:獲取 pin 腳當前的中斷狀態(tài)(pending se);e_clr_irqpd_sta:清除 pin 腳的中斷狀態(tài);e_set_debounce:pin 腳的消抖設置;e_get_debounce:獲取 pin 腳

22、的消抖設置。4.4. gpio_pm_t電源管理接口, 目前暫不支持。save:休眠前,保留當前 pin 腳的配置;resume:喚醒后,獲取當前的 pin 腳配置。Copyright 2014Allwinner Technology.s.- 13 -typedef u32(*psave)(struct aw_gpio_chip *pchip);typedef u32(*presume)(struct aw_gpio_chip *pchip);struct gpio_pm_t psavesave;presumeresume;GPIO 接口描述Linux 標準 GPIO 接口Linux 標準 G

23、PIO 在linux-3.3driversgpiogpiolib.c 中實現(xiàn), gpiolib 使用結構體gpio_chip 對一組 GPIO 進行抽象。5.1.1. gpiolib_sysfs_initgpio_class 類,向上提供/sys 操作接口:/sys/class/gpio/5.1.2. gpio_exportgpio_export(unsigned gpio, bool direction_may_change)功能:通過 sysfs 導出一個 gpio;參數(shù):gpio:gpio;direction_may_change:描述用戶空間是否會改變 gpio 的輸入輸出狀態(tài);返回值

24、:0 表示成功,否則表示失敗。5.1.3. gpio_export_linkgpio_export_link(struct device *dev, const char *name, unsigned gpio)功能:為導出的 gpio 端口創(chuàng)建 link;參數(shù):de:創(chuàng)建 link 的設備;name: link 的名稱;gpio: gpio返回值:0 表示成功, 否則表示失敗。;5.1.4. gpio_sysfs_set_active_lowgpio_sysfs_set_active_low(unsigned gpio,功能:設置導出 gpio 的 active_low 屬性;參數(shù):val

25、ue)value: 非 0 表示使用 active_low;gpio: gpio;Copyright 2014Allwinner Technology.s.- 14 -返回值:0 表示成功,否則表示失敗。5.1.5. gpio_unexportvoid gpio_unexport(unsigned gpio)功能:取消 gpio 的導出;參數(shù):gpio: gpio返回值:無。;5.1.6. ggpiochip_add(struct gpio_chip *chip)功能:參數(shù):gpio_chip;chip: gpio_chip 結構;返回值:0 表示成功,否則表示失敗。該函數(shù)一般被調用, 用于支

26、持標準 gpio 接口。5.1.7. gpiochip_removegpiochip_remove(struct gpio_chip *chip)功能:注銷 gpio_chip;參數(shù):chip: gpio_chip 結構;返回值:0 表示成功,否則表示失敗。5.1.8. gpiochip_findstruct gpio_chip *gpiochip_find(void *data,(*match)(struct gpio_chip *chip, void *data)功能:由 gpio 號查找對應 gpio_chip 結構;參數(shù):data: match 函數(shù)的第二個參數(shù);match:提供的匹配

27、函數(shù);返回值:成功返回找到的 gpio_chip 句柄,NULL 表示失敗。Copyright 2014Allwinner Technology.s.- 15 -5.1.9. gpio_requestgpio_request(unsigned gpio, const char *label)功能:申請 gpio,獲取 gpio 的參數(shù):權;gpio: gpio;label: gpio 名稱, 可以為 NULL;返回值:0 表示成功,否則表示失敗。5.1.10.gpio_freevoid gpio_free(unsigned gpio)gpio;功能:參數(shù):gpio: gpio返回值:無。;5.

28、1.11. gpio_request_onegpio_request_one(unsigned gpio, unsigned long flags, const char *label)功能:申請 gpio,并設置 input/output 狀態(tài);參數(shù):gpio: gpio flags:輸入輸出狀態(tài),如 GPIOF_IN 表示輸入,GPIOF_OUT_INIT_HIGH 表示輸;,在linux-3.3includelinuxgpio.h 中定義;出label: gpio 名稱,可以為 NULL;返回值:0 表示成功,否則表示失敗。5.1.12.gpio_request_arraygpio_re

29、quest_array(const struct gpio *array, size_t num)功能:申請一組 gpio ,并設置 input/output 狀態(tài),即對一組 gpio 的每一項執(zhí)行gpio_request_one 操作;參數(shù):array: gpio 數(shù)組;num: array 的項數(shù);Copyright 2014Allwinner Technology.s.- 16 -返回值:0 表示成功,否則表示失敗。5.1.13.gpio_free_arrayvoid gpio_free_array(const struct gpio *array, size_t num)一組 gpio

30、,即對一組 gpio 的每一項執(zhí)行 gpio_free 操作;功能:參數(shù):array: gpio 數(shù)組;num: array 的項數(shù);返回值:無。5.1.14.gpiochip_is_requestedconst char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)功能: 測試 gpio 是否已被申請;參數(shù):chip: gpio 所在 chip; offset: chip 中的偏移;返回值:NULL 表示當前 gpio 未被申請, 否則表示已申請。5.1.15.gpio_direction_inputgpio_

31、direction_input(unsigned gpio)功能: 將 gpio 設置為 input;參數(shù):gpio: gpio返回值:0 表示成功,否則表示失敗。;5.1.16.gpio_direction_outputgpio_direction_output(unsigned gpio,value)功能: 將 gpio 設置為 output, 并設置電平值。參數(shù):gpio: gpio;value: gpio 電平值,非 0 表示高,0 表示低;返回值:0 表示成功,否則表示失敗。Copyright 2014Allwinner Technology.s.- 17 -5.1.17.gpio_

32、set_debouncegpio_set_debounce(unsigned gpio, unsigned debounce)功能: 設置 gpio 的 debounce time(硬件特性),一般不用;參數(shù):gpio: gpio;debounce: debounce 值;返回值:0 表示成功,否則表示失敗。5.1.18.gpio_get_value gpio_get_value(unsigned gpio)功能: 獲取 gpio 電平值(gpio 已設為 input/output 狀態(tài));參數(shù):gpio: gpio返回值:;gpio 電平,1 表示高,0 表示低。5.1.19.gpio_se

33、t_valuevoid gpio_set_value(unsigned gpio,value)功能: 設置 gpio 電平值 (gpio 已設為 output 狀態(tài));參數(shù):gpio: gpio;value: gpio 電平值,非 0 表示高,0 表示低;返回值:無。5.1.20.gpio_cansleep gpio_cansleep(unsigned gpio)功能: 獲取gpio 對應gpio_chip 的can_sleep 標記(描述gpio 在配置時是否可睡眠);參數(shù):gpio: gpio返回值:;對應 gpio_chip 的 can_sleep 成員,一般為非 0,以防止操作 gpi

34、o 時 sleep。5.1.21.gpio_to_irq gpio_to_irq(unsigned gpio)Copyright 2014Allwinner Technology.s.- 18 -功能: 獲取 gpio 對應中斷號。參數(shù):gpio:gpio返回值:獲取 gpio 對應的 irq 號,若無則返回-ENXIO。;5.1.22.gpio_get_value_cansleepgpio_get_value_cansleep(unsigned gpio)功能:與 gpio_get_value 相同,但函數(shù)首先會_cond_resched(),根據需要進行調度;參數(shù):gpio: gpio返回

35、值:對應 gpio 的電平值。;5.1.23.gpio_set_value_cansleepvoid gpio_set_value_cansleep(unsigned gpio,value)功能:與 gpio_set_value 相同,但函數(shù)首先會_cond_resched(),根據需要進行調度。參數(shù):gpio: gpio;value: gpio 電平值,非 0 表示高,0 表示低;返回值:無。5.2. 多功能配置接口5.2.1. sw_gpio_setcfgu32 sw_gpio_setcfg(u32 gpio, u32 val)功能:配置 gpio 的功能;參數(shù):gpio: 全局 gpio

36、 號;val: 返回值:配置值;成功返回 0,失敗返回錯誤行號。5.2.2. sw_gpio_getcfgu32 sw_gpio_getcfg(u32 gpio)Copyright 2014Allwinner Technology.s.- 19 -功能:獲取 gpio 的配置值;參數(shù):gpio: 全局 gpio 號;返回值:成功返回配置值,失敗返回 GPIO_CFG_INVALID。5.2.3. sw_gpio_setpullu32 sw_gpio_setpull(u32 gpio, u32 val)功能:配置 gpio 的 pull;參數(shù):gpio: 全局 gpio 號;val: 返回值:p

37、ull 值;成功返回 0,失敗返回錯誤行號。5.2.4. sw_gpio_getpullu32 sw_gpio_getpull(u32 gpio)功能:獲取 gpio 的 pull 值;參數(shù):gpio: 全局 gpio 號;返回值:成功返回 pull 值,失敗返回 GPIO_PULL_INVALID。5.2.5. sw_gpio_setdrvlevelu32 sw_gpio_setdrvlevel(u32 gpio, u32 val)功能:配置 gpio 的 driver level;參數(shù):gpio: 全局 gpio 號;val: 返回值:driver level 值;成功返回 0,失敗返回錯

38、誤行號。5.2.6. sw_gpio_getdrvlevelu32 sw_gpio_getdrvlevel(u32 gpio)Copyright 2014Allwinner Technology.s.- 20 -功能:獲取 gpio 的 driver level 值;參數(shù):gpio: 全局 gpio 號;返回值:成功返回 driver level 值,失敗返回 GPIO_DRVLVL_INVALID。5.2.7. sw_gpio_setall_rangeu32 sw_gpio_setall_range(struct gpio_config *pcfg, u32 cfg_num)功能:配置一組

39、gpio 的 mul sel, pull, driver level, data;參數(shù):pcfg: 配置參數(shù)數(shù)組;cfg_num:pcfg 數(shù)組項數(shù);返回值:成功返回 0,失敗返回錯誤行號。5.2.8. sw_gpio_getall_rangeu32 sw_gpio_getall_range(struct gpio_config *pcfg, u32 cfg_num)功能:獲取一組 gpio 的 mul sel、pull、driver level、data;參數(shù):pcfg: 配置參數(shù)數(shù)組,輸出;cfg_num: pcfg 數(shù)組項數(shù);返回值:成功返回 0,失敗返回錯誤行號。5.2.9.nfigv

40、oid sw_gpio_dump_config(struct gpio_config *pcfg, u32 cfg_num)功能:打印一組 gpio 的 mul sel、pull、driver level、data;參數(shù):pcfg:配置參數(shù)數(shù)組,輸出; cfg_num: pcfg 數(shù)組項數(shù);返回值:無。Copyright 2014Allwinner Technology.s.- 21 -5.3. GPIO 中斷接口5.3.1. 功能說明sw_gpio_e_set_trigtype設置單個 gpio 的觸發(fā)模式;sw_gpio_e_get_trigtype獲取單個 gpio 的觸發(fā)模式;sw_g

41、pio_e_set_enable設置單個 gpio 中斷的 enable 狀態(tài),1 表示 enable,0 表示 disable;sw_gpio_e_get_enable獲取單個 gpio 中斷的 enable 狀態(tài);sw_gpio_e_clr_irqpd_sta個 gpio 中斷的 irq pending,若 pending 位未置則不處理;sw_gpio_e_get_irqpd_st獲取單個 gpio 中斷的 pending 狀態(tài),1 表示產生中斷,0 表示沒有;sw_gpio_e_set_debounce設置單個 gpio 所屬 chip 的 debounce,一般不用;sw_gpio_

42、e_get_debounce獲取單個 gpio 所屬 chip 的 debounce 信息,一般不用;sw_gpio_e_setall_range設置一組 gpio 的 pull、driver level、trig type 等信息;sw_gpio_e_getall_range獲取一組 gpio 的 pull、driver level、trig type 等信息;sw_gpio_e_dumpall_range打印一組 gpio 的 pull、driver level、trig type 等信息;sw_gpio_irq_request申請 gpio 中斷; sw_gpio_irq_freegpi

43、o 中斷。實際使用中,一般只用到 sw_gpio_irq_request 和 sw_gpio_irq_free。5.3.2. 函數(shù)說明5.3.2.1. sw_gpio_irq_requestu32 sw_gpio_irq_request(u32 gpio, enum gpio_e_trigtype trig_type,pe_handle handle, void *para)功能:申請 gpio 中斷;Copyright 2014Allwinner Technology.s.- 22 -參數(shù):gpio: gpio,如 PA0 對應 GPIOA(0);trig_type:觸發(fā)類型;handle:

44、中斷回調函數(shù),當 gpio 中斷觸發(fā)時回調;para: handle 的參數(shù),必須為全局,或者在堆中;返回值:成功返回句柄,失敗返回 0。注: sw_gpio_irq_request會進行如下處理:5.3.2.2. sw_gpio_irq_freeu32 sw_gpio_irq_free(u32 handle)功能:gpio 中斷,與 sw_gpio_irq_request 對應;參數(shù):handle:sw_gpio_irq_request 返回的句柄;返回值:成功返回 0,失敗返回錯誤行號。注: sw_gpio_irq_free會進行如下處理:5.3.2.3. sw_gpio_eall_ran

45、geu32 sw_gpio_e功能:_setall_range(struct gpio_config_e_all *pcfg, u32 cfg_num)設置一組 gpio 的 pull/driver level/trig type 等信息;參數(shù):pcfg:gpio 配置結構體;cfg_num:pcfg 的元素個數(shù);返回值:Copyright 2014Allwinner Technology.s.- 23 -關閉 gpio 中斷的enable 位,調用 sw_gpio_e_set_enable;清 gpio 中斷的pending 位,調用 sw_gpio_e_clr_irqpd_sta;向 li

46、nux 內核gpio 中斷,調用 free_irq;gpio 中斷句柄,即 sw_gpio_irq_request 返回的句柄;gpio 的權,調用 gpio_free。申請 gpio 的權,調用 gpio_request;檢測 gpio 是否可配置成中斷;配置 gpio 的功能(mul sel):pull/driver level/trig type,并打開 gpio 中斷的 enable位,這些通過調用sw_gpio_e_setall_range 來完成;分配 gpio 中斷句柄(gpio_irq_handle 結構)作為返回值;向 linux 內核申請中斷,調用 request_irq,

47、并傳入 IRQF_SHARED 標記。成功返回 0,失敗返回出錯行號。5.3.2.4. sw_gpio_e_getall_rangeu32 sw_gpio_e功能:_getall_range(struct gpio_config_e_all *pcfg, u32 cfg_num)獲取 gpio 中斷配置參數(shù);參數(shù):pcfg:gpio 配置數(shù)組;cfg_num:pcfg 的元素個數(shù);返回值:成功返回 0,失敗返回出錯行號。5.3.2.5. sw_gpio_e_dumpall_rangevoid sw_gpio_e功能:_dumpall_range(struct gpio_config_e_all

48、 *pcfg, u32 cfg_num)打印 gpio 中斷配置參數(shù);參數(shù):pcfg:gpio 配置數(shù)組;cfg_num:pcfg 的元素個數(shù);返回值:無。5.3.2.6. sw_gpio_e_trigtypeu32 sw_gpio_e功能:_set_trigtype(u32 gpio, enum gpio_e_trigtype trig_type)設置單個 gpio 的中斷觸發(fā)類型;參數(shù):gpio: trig_type:返回值:gpio;觸發(fā)類型;成功返回 0,失敗返回出錯行號。5.3.2.7. sw_gpio_e_get_trigtypeu32 sw_gpio_e功能:_get_trigt

49、ype(u32 gpio, enum gpio_e_trigtype *pval)獲取單個 gpio 的中斷觸發(fā)類型;參數(shù):gpio:gpio;pval:保存獲取的觸發(fā)類型;Copyright 2014Allwinner Technology.s.- 24 -返回值:成功返回 0,失敗返回出錯行號。5.3.2.8.u32 sw_gpio_e功能:_set_debounce(u32 gpio, struct gpio_e_debounce dbc)設置單個 gpio 所屬 chip 的 debounce,一般不用;參數(shù):gpio:gpio;dbc:設置給硬件的 debounce 值;返回值:成功

50、返回 0,失敗返回出錯行號。5.3.2.9. sw_gpio_e_get_debounceu32 sw_gpio_e功能:_get_debounce(u32 gpio, struct gpio_e_debounce *pdbc)獲取單個 gpio 所屬 chip 的 debounce,一般不用;參數(shù):gpio:gpio;pdbc:獲取到的 debounce 值;返回值:成功返回 0,失敗返回出錯行號。5.3.2.10. sw_gpio_e_clr_irqpd_stau32 sw_gpio_e功能:_clr_irqpd_sta(u32 gpio)個 gpio 中斷的 irq pending,若

51、pending 位未置則不處理;參數(shù):gpio:gpio返回值:;成功返回 0,失敗返回出錯行號。5.3.2.11. sw_gpio_e_get_irqpd_stau32 sw_gpio_e功能:_get_irqpd_sta(u32 gpio)獲取單個 gpio 中斷的 pending 狀態(tài),1 表示中斷產生,0 表示沒有;參數(shù):gpio:gpio返回值:;Copyright 2014Allwinner Technology.s.- 25 -1 表示 gpio 中斷已產生,0 表示未產生或獲取失敗。5.3.2.12. sw_gpio_e_get_enableu32 sw_gpio_e功能:_g

52、et_enable(u32 gpio, u32 *penable)獲取單個 gpio 中斷的 enable 位;參數(shù):gpio:gpio;penable:獲取到的 enable 狀態(tài);返回值:成功返回 0,此時 penable 保存獲取的 enable 狀態(tài),1 表示 enable,0 表示 disable;失敗返回出錯行號。5.3.2.13. u32 sw_gpio_e_set_enableu32 sw_gpio_e功能:_set_enable(u32 gpio, u32 enable)設置單個 gpio 中斷的 enable 位;1 表示 enable, 0 表示 disable;參數(shù):g

53、pio:gpio;enable:enable 狀態(tài),0 表示 disable,1 表示 enable;返回值:設置成功返回 0,失敗返回出錯行號。Copyright 2014Allwinner Technology.s.- 26 -6. SCopyright 2014Allwinner Technology.s.- 27 -script 接口使用描述script_get_item7.1.1. 說明script_item_value_type_e script_get_item(char *main_key, char *sub_key, script_item_u *item)功能:獲取配置參

54、數(shù):中某一項子鍵值;main_key: 主鍵名。Sub_key: 子鍵名。Item: 返回值:保存獲取到的子鍵值, 可能為, string 或 gpio;成功返回子鍵類型,失敗返回 SCIRPT_ITEM_VALUE_TYPE_INVALID。子鍵使用 script_item_u 進行描述:Copyright 2014Allwinner Technology.s.- 28 -/*define data structure script itemval:eger value foreger type itemstr: string poer for sting type itemgpio: gp

55、io config fpio type item*/typedef union val;char*str;struct gpio_configgpio; script_item_u;子鍵類型用 script_item_value_type_e 描述:7.1.2. 示例假設 sys_config.fex 有如下內容:依次獲取 card_line/machine /sdc_clk 的值代碼如下:Copyright 2014Allwinner Technology.s.- 29 -script_item_uval; script_item_value_type_etype;/* 獲取 card_li

56、ne 值 */type = script_get_item(card0_boot_para, card_line, &val);if(SCIRPT_ITEM_VALUE_TYPE_!= type)card0_boot_paracard_line= 4 machine= evb_v12sdc_d1= port:PF0sdc_d0= port:PF1sdc_clk= port:PF2 sdc_cmd= port:PF3 sdc_d3= port:PF4sdc_d2= port:PF5Copyright 2014Allwinner Technology.s.- 30 -prk(type err!);

57、prk(value is %dn, val.val);/* 獲取 machine 值 */type = script_get_item(card0_boot_para, machine, &val);if(SCIRPT_ITEM_VALUE_TYPE_STR != type)prk(type err!);prk(value is %sn, val.str);/* 獲取 sdc_clk 值 */type = script_get_item(card0_boot_para, sdc_clk, &val);if(SCIRPT_ITEM_VALUE_TYPE_PIO != type)prk(type

58、err!);prk(gpio %d, mul_sel %d, pull %d, drv_level %d, data %dn,val.gpio.gpio, val.gpio.mul_sel, val.gpio.pull, val.gpio.drv_level, val.gpio.data, );7.2. script_get_pio_list7.2.1. 說明script_get_pio_list(char *main_key, script_item_u *list)功能:獲取配置參數(shù):中某一主鍵的所有 gpio 信息;main_key:主鍵名; list:保存獲取到的 gpio 數(shù)組指針;

59、返回值:獲取到的有效 gpio 個數(shù)。7.2.2. 示例假設 sys_config.fex 有如下內容:獲取 gpio 數(shù)組代碼如下:Copyright 2014Allwinner Technology.s.- 31 -script_item_u*list = NULL;card0_boot_paracard_line= 4 machine= evb_v12sdc_d1= port:PF0sdc_d0= port:PF1sdc_clk= port:PF2 sdc_cmd= port:PF3 sdc_d3= port:PF4sdc_d2= port:PF57.3. script_dump_mai

60、nkey7.3.1. 說明script_dump_mainkey(char *main_key)功能:打印主鍵所有子鍵信息;參數(shù):main_key:主鍵名;返回值:成功返回 0,失敗返回負數(shù)。7.3.2. 示例假設 sys_config.fex 中 card0_boot_para 配置信息如下:Copyright 2014Allwinner Technology.s.- 32 -card0_boot_paracard_ctrl= 0 card_high_speed= 1 card_line= 4 cnt = 0;/* 獲取 gpio list */cnt = script_get_pio_li

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論