亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gpio.c

?? AT91SAM9261啟動代碼。SPI DATAFLASH。
?? C
字號:
/* ---------------------------------------------------------------------------- *         ATMEL Microcontroller Software Support  -  ROUSSET  - * ---------------------------------------------------------------------------- * Copyright (c) 2006, Atmel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the disclaimer below in the documentation and/or * other materials provided with the distribution. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- * File Name           : gpio.c * Object              : * Creation            : ODi Apr 19th 2006 *----------------------------------------------------------------------------- */#include "../include/part.h"#include "../include/main.h"#include "../include/gpio.h"#include "../include/debug.h"#define EINVAL 1 /* Error code returned when the PIN is unknown *//* Write PIO register */static inline void write_pio(unsigned int offset, const unsigned int value){	writel(value, offset + AT91C_BASE_PIOA);}/* Read PIO registers */static inline unsigned int read_pio(volatile unsigned int offset){	return readl(offset + AT91C_BASE_PIOA);}/* Convert Pin Number into PIO controller index */static inline unsigned pin_to_controller(unsigned pin){	return  (pin) / PIO_NB_IO;}/* Convert Pin Number into I/O line index */static inline unsigned pin_to_mask(unsigned pin){	return 1 << ((pin) % PIO_NB_IO);}/*------------------------------------------------------------------------------*//* \fn    pio_set_A_periph							*//* \brief the pin to the "A" internal peripheral role.				*//*------------------------------------------------------------------------------*/static int pio_set_A_periph(unsigned pin, int use_pullup){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio(PIO_IDR(pio), mask);	write_pio(use_pullup ? PIO_PPUER(pio) : PIO_PPUDR(pio), mask);	write_pio(PIO_ASR(pio), mask);	write_pio(PIO_PDR(pio), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_B_periph							*//* \brief mux the pin to the "B" internal peripheral role.			*//*------------------------------------------------------------------------------*/static int pio_set_B_periph(unsigned pin, int use_pullup){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio(PIO_IDR(pio), mask);	write_pio((use_pullup ? PIO_PPUER(pio) : PIO_PPUDR(pio)), mask);	write_pio(PIO_BSR(pio), mask);	write_pio(PIO_PDR(pio), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_gpio_input							*//* \brief mux the pin to the gpio controller (instead of "A" or "B" peripheral),*//*        and configure it for an input.					*//*------------------------------------------------------------------------------*/static int pio_set_gpio_input(unsigned pin, int use_pullup){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio(PIO_IDR(pio), mask);	write_pio((use_pullup ? PIO_PPUER(pio) : PIO_PPUDR(pio)), mask);	write_pio(PIO_ODR(pio), mask);	write_pio(PIO_PER(pio), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_gpio_input							*//* \brief mux the pin to the gpio controller (instead of "A" or "B" peripheral),*//*        and configure it for an output.					*//*------------------------------------------------------------------------------*/static int pio_set_gpio_output(unsigned pin, int value){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio(PIO_IDR(pio), mask);	write_pio(PIO_PPUDR(pio), mask);	write_pio((value ? PIO_SODR(pio) : PIO_CODR(pio)), mask);	write_pio(PIO_OER(pio), mask);	write_pio(PIO_PER(pio), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_deglitch							*//* \brief enable/disable the glitch filter; mostly used with IRQ handling.	*//*------------------------------------------------------------------------------*/static int pio_set_deglitch(unsigned pin, int is_on){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio((is_on ? PIO_IFER(pio) : PIO_IFDR(pio)), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_multi_drive							*//* \brief enable/disable the multi-driver; This is only valid for output and	*//*        allows the output pin to run as an open collector output.		*//*------------------------------------------------------------------------------*/static int pio_set_multi_drive(unsigned pin, int is_on){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio((is_on ? PIO_MDER(pio) : PIO_MDDR(pio)), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_set_value								*//* \brief assuming the pin is muxed as a gpio output, set its value.		*//*------------------------------------------------------------------------------*/int pio_set_value(unsigned pin, int value){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	if (pio >= AT91C_NR_PIO)		return -EINVAL;	write_pio((value ? PIO_SODR(pio) : PIO_CODR(pio)), mask);	return 0;}/*------------------------------------------------------------------------------*//* \fn    pio_get_value								*//* \brief read the pin's value (works even if it's not muxed as a gpio).	*//*        !!! PIO Clock must be enabled in the PMC !!!				*//*------------------------------------------------------------------------------*/int pio_get_value(unsigned pin){	unsigned	pio = pin_to_controller(pin);	unsigned	mask = pin_to_mask(pin);	unsigned int		pdsr;	if (pio >= AT91C_NR_PIO)		return -EINVAL;	pdsr = read_pio(PIO_PDSR(pio));	return (pdsr & mask) != 0;}/*------------------------------------------------------------------------------*//* \fn    pio_device_pio_setup							*//* \brief Configure PIO in periph mode according to the platform informations	*//*------------------------------------------------------------------------------*/int pio_setup (const struct pio_desc *pio_desc){        unsigned        pio, pin = 0;        if(!pio_desc) {                return 0;        }        /* Sets all the pio muxing of the corresponding device as defined in its platform_data struct */        while (pio_desc->pin_name) {                pio = pin_to_controller( pio_desc->pin_num);                if (pio >= AT91C_NR_PIO)                		return 0;                else if (pio_desc->type == PIO_PERIPH_A)                        pio_set_A_periph(pio_desc->pin_num,                                (pio_desc->attribute & PIO_PULLUP) ? 1 : 0);                else if (pio_desc->type == PIO_PERIPH_B)                        pio_set_B_periph(pio_desc->pin_num,                                (pio_desc->attribute & PIO_PULLUP) ? 1 : 0);                else if (pio_desc->type == PIO_INPUT) {                        pio_set_deglitch(pio_desc->pin_num,                                (pio_desc->attribute & PIO_DEGLITCH)? 1 : 0);                        pio_set_gpio_input(pio_desc->pin_num,                                (pio_desc->attribute & PIO_PULLUP) ? 1 : 0);                }                else if(pio_desc->type == PIO_OUTPUT) {                        pio_set_multi_drive(pio_desc->pin_num, (pio_desc->attribute & PIO_OPENDRAIN) ? 1 : 0);                        pio_set_gpio_output(pio_desc->pin_num, pio_desc->dft_value);                }                else                         return 0;                ++pin;                ++pio_desc;        }        return pin;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩vs国产vs欧美| 欧美一区二区在线免费播放 | 国产91色综合久久免费分享| 日韩精品视频网站| 首页综合国产亚洲丝袜| 亚洲国产精品一区二区www| 亚洲成人精品一区| 亚洲成人福利片| 性久久久久久久久久久久| 亚洲午夜一区二区| 午夜精品福利在线| 美腿丝袜在线亚洲一区| 免费日韩伦理电影| 日本成人在线网站| 国产高清久久久久| 成人av影视在线观看| 成人app在线观看| 91视视频在线观看入口直接观看www| 成人午夜免费av| 91麻豆文化传媒在线观看| thepron国产精品| 99精品视频免费在线观看| 91影院在线免费观看| 精品视频在线免费看| 日韩久久精品一区| 国产精品进线69影院| 午夜成人在线视频| 久久99精品国产91久久来源| 国产精品一区久久久久| 97久久人人超碰| 欧美羞羞免费网站| 欧美一区二区三区公司| 国产欧美精品一区二区色综合| 26uuu亚洲综合色| 国产精品免费久久| 天天爽夜夜爽夜夜爽精品视频| 久久精品久久精品| 91浏览器入口在线观看| 日韩久久久久久| 夜夜操天天操亚洲| 老司机午夜精品| 一本久道久久综合中文字幕| 日韩丝袜美女视频| 亚洲精品老司机| 国产成人精品午夜视频免费| 欧美酷刑日本凌虐凌虐| 久久精品免费在线观看| 婷婷成人激情在线网| 99久久99久久精品国产片果冻| 91精品国产欧美一区二区18| 成人免费在线观看入口| 国产精品一区在线| 日韩美一区二区三区| 亚洲激情欧美激情| 国产精品一二三四五| 欧美午夜精品电影| 国产日产精品1区| 三级一区在线视频先锋| 国产原创一区二区三区| 欧美群妇大交群中文字幕| 亚洲欧美日韩中文字幕一区二区三区 | 国产亚洲女人久久久久毛片| 天天免费综合色| 成人aa视频在线观看| 精品国产91乱码一区二区三区 | 美女mm1313爽爽久久久蜜臀| 欧美午夜电影在线播放| 一区二区三区在线观看视频 | 日本少妇一区二区| 欧美日韩国产一级| 亚洲成人动漫av| 日本韩国精品在线| 一区二区三区四区乱视频| 成人激情小说乱人伦| 国产精品欧美久久久久一区二区| 高清视频一区二区| 国产精品三级av| 白白色 亚洲乱淫| 亚洲美女免费在线| 欧美性猛交一区二区三区精品| 亚洲同性同志一二三专区| 91香蕉视频在线| 亚洲一区二区三区国产| 欧美日韩一区二区欧美激情| 亚洲一区二区三区四区在线免费观看 | 成人亚洲精品久久久久软件| 日本一区二区高清| 蜜臀久久久久久久| 99久久精品国产一区二区三区| 国产精品三级av| 色欧美乱欧美15图片| 午夜免费久久看| 26uuu国产在线精品一区二区| 久久99精品久久久久久动态图| 日韩精品中午字幕| 国产在线精品不卡| 成人欧美一区二区三区黑人麻豆| 欧美美女视频在线观看| 久久成人久久鬼色| 中文字幕乱码日本亚洲一区二区| 不卡的av电影| 亚洲高清不卡在线| 欧美成人精品1314www| 国产精品亚洲第一| ㊣最新国产の精品bt伙计久久| 91豆麻精品91久久久久久| 午夜精品免费在线| 日韩欧美一级在线播放| 国产伦精品一区二区三区在线观看| 亚洲欧美在线aaa| 欧美肥妇free| 成人黄色a**站在线观看| 丝袜美腿亚洲色图| 国产精品乱码一区二区三区软件| 91久久线看在观草草青青| 国产米奇在线777精品观看| 国产精品国产自产拍在线| 欧洲生活片亚洲生活在线观看| 久久se精品一区二区| 亚洲蜜桃精久久久久久久| 欧美大片拔萝卜| 在线亚洲精品福利网址导航| 国产在线一区二区综合免费视频| 亚洲欧美电影院| 欧美国产一区在线| 91精品国产综合久久福利| 91亚洲国产成人精品一区二三 | 欧美日韩国产成人在线免费| 奇米777欧美一区二区| 亚洲欧美在线视频观看| 久久亚洲欧美国产精品乐播| 欧美一区二区视频观看视频| 日本道免费精品一区二区三区| 成人激情免费网站| 福利一区福利二区| 国产美女在线观看一区| 国内精品写真在线观看| 欧美aaa在线| 亚洲成av人片观看| 亚洲人成网站色在线观看| 中文天堂在线一区| 国产精品免费人成网站| 欧美国产在线观看| 中文字幕中文在线不卡住| 日本一区二区三区在线观看| 欧美精品一区二区三区在线播放| 日韩写真欧美这视频| 91精品国产乱码| 久久精品72免费观看| 91论坛在线播放| 色婷婷香蕉在线一区二区| 91网站在线播放| 欧美伊人久久久久久午夜久久久久| 91日韩在线专区| 欧美中文字幕不卡| 欧美色老头old∨ideo| 欧美性生活影院| 91麻豆精品国产自产在线| 在线不卡中文字幕播放| 欧美日韩一二三| 欧美午夜不卡视频| 欧美亚洲尤物久久| 粉嫩aⅴ一区二区三区四区| 久久成人av少妇免费| 麻豆一区二区99久久久久| 偷拍亚洲欧洲综合| 亚洲一区在线视频观看| 蜜桃久久久久久| 午夜精品久久久久久久久久 | 一本色道久久综合亚洲精品按摩| 国产乱子伦一区二区三区国色天香 | 国产精品久久久久一区二区三区 | 精品久久久久久久久久久久久久久| 91精品国产福利| 色一情一乱一乱一91av| 欧美精品在欧美一区二区少妇| 成人黄色在线视频| 欧美日韩国产天堂| 成人性生交大合| 岛国av在线一区| 国产91在线|亚洲| 欧美日韩专区在线| 日韩亚洲欧美中文三级| 国产精品免费丝袜| 自拍偷拍亚洲激情| 久久成人免费日本黄色| 国产在线精品一区二区不卡了| 91在线免费视频观看| 色呦呦国产精品| 久久久久97国产精华液好用吗| 精品理论电影在线| 亚洲国产毛片aaaaa无费看| 亚洲成在线观看| 国内精品伊人久久久久av一坑 | 国产专区综合网| 99视频国产精品| 最新国产の精品合集bt伙计| 亚洲一区在线看| 成人伦理片在线| 在线观看一区二区精品视频|