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

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

?? smc_x_hw.c

?? ucos平臺下的文件系統的源代碼
?? C
字號:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : smc_hw.c
Purpose     : SMC hardware layer for Cogent EP7312 Development Kit
              This layer does support the on board NAND FLASH (id==1)
              and the Smart Media Socket (id==0) of the Cogent board.
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
None.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_port.h"
#include "smc_x_hw.h"


/*********************************************************************
*
*             #define Macros
*
**********************************************************************
*/

/* SFR definition of EP7312 */
#define __PBDR                  *(volatile unsigned char*)0x80000001
#define __PDDR                  *(volatile unsigned char*)0x80000003
#define __PBDDR                 *(volatile unsigned char*)0x80000041
#define __PDDDR                 *(volatile unsigned char*)0x80000043
#define __SYSCON1               *(volatile unsigned int*)0x80000100
#define __SYSFLG1               *(volatile unsigned int*)0x80000140
#define __MEMCFG2               *(volatile unsigned int*)0x800001C0
#define __INTSR1                *(volatile unsigned int*)0x80000240
#define __INTMR1                *(volatile unsigned int*)0x80000280
#define __TC1D                  *(volatile unsigned short*)0x80000300
#define __TC2D                  *(volatile unsigned short*)0x80000340
#define __UARTDR1               *(volatile unsigned short*)0x80000480
#define __UBRLCR1               *(volatile unsigned int*)0x800004C0
#define __TC1EOI                *(volatile unsigned int*)0x800006C0
#define __TC2EOI                *(volatile unsigned int*)0x80000700
#define __SYSFLG2               *(volatile unsigned int*)0x80001140
#define __INTMR2                *(volatile unsigned int*)0x80001280
#define __SYSCON3               *(volatile unsigned int*)0x80002200
#define __PLLW                  *(volatile unsigned int*)0x80002610

/* CSB238 On-Board NAND FLASH & SmartMedia Socket */
#define __SMCPORT               *(volatile char*)0x10000000


/*********************************************************************
*
*             Local Variables        
*
**********************************************************************
*/

/*
  Following variables are used instead of HW pin detection, which is
  not supported by Cogent EP7312 Development Kit. Their values are
  set by "FS__SMC_HW_DetectStatus".
*/

static char _Hw_card_changed[2]  = {1,1};
static char _Hw_card_wprotect[2];
static char _Hw_card_in[2];


/*********************************************************************
*
*             Global functions section 1
*
**********************************************************************

  All functions in this section are called by "smc_phy.c".
  These functions implement a 0.1 ms timer by using Timer 2 of
  the EP7312.
*/

/*********************************************************************
*
*             FS_SMC_HW_X_StopTimer
*/

void FS_SMC_HW_X_StopTimer(FS_u32 id)  {   
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkTimer
*/

int FS_SMC_HW_X_ChkTimer(FS_u32 id) {
  short int x;

  x = __TC2D;
  if (x < 0) {
    x = 0;
  }
  /* 
     Make sure it does return !=0 at least one time.
     Current "smc_phy.c" implementation does not check for condition,
     if time has already elapsed for some reason.
  */
  return x; 
}


/*********************************************************************
*
*             FS_SMC_HW_X_SetTimer
*/

void FS_SMC_HW_X_SetTimer(FS_u32 id,unsigned short time) {
  __INTMR1  &= ~0x200ul;     /* disable TC2 underflow interrupt */
  __SYSCON1 |= 0x80ul;       /* Set clock in 512kHz mode */
  __SYSCON1 &= ~0x40ul;     /* free running */
  __TC2D     = time * 50;      /* Load counter */
}


/*********************************************************************
*
*             FS_SMC_HW_X_WaitTimer
*/

void FS_SMC_HW_X_WaitTimer(FS_u32 id,unsigned short time) {
  short x;
  
  __INTMR1  &= ~0x200ul;     /* disable TC2 underflow interrupt */
  __SYSCON1 |= 0x80ul;       /* Set clock in 512kHz mode */
  __SYSCON1 &= ~0x40ul;     /* free running */
  __TC2D     = time * 50;      /* Load counter */
  do {
    x = __TC2D;
  } while (x > 0);
}


/*********************************************************************
*
*             Global functions section 2
*
**********************************************************************

  All functions in this section are called by "smc_phy.c".
  Functions in this section access the SMC control signals and
  SMC data port of the Cogent EP7312 Development Kit.
*/

/*********************************************************************
*
*             FS_SMC_HW_X_SetData
*/

void FS_SMC_HW_X_SetData(FS_u32 id) {
  if (id == 0) {
    __PBDR      = 0x4f;       /* nCE low, CLE low, ALE low  */
  }
  else if (id == 1) {
    __PBDR      = 0x8f;       /* nCE low, CLE low, ALE low  */
  }
}


/*********************************************************************
*
*             FS_SMC_HW_X_SetCmd
*/

void FS_SMC_HW_X_SetCmd(FS_u32 id) {
  if (id == 0) {
    __PBDR      = 0x5f;       /* nCE low, CLE high, ALE low  */
  }
  else if (id == 1) {
    __PBDR      = 0x9f;       /* nCE low, CLE high, ALE low  */
  }
}


/*********************************************************************
*
*             FS_SMC_HW_X_SetAddr
*/

void FS_SMC_HW_X_SetAddr(FS_u32 id) {
  if (id == 0) {
    __PBDR      = 0x6f;       /* nCE low, CLE low, ALE high */
  }
  else if (id == 1) {
    __PBDR      = 0xaf;       /* nCE low, CLE low, ALE high  */
  }
}


/*********************************************************************
*
*             FS_SMC_HW_X_SetStandby
*/

void FS_SMC_HW_X_SetStandby(FS_u32 id) {
  __PBDR      = 0x0f;       /* nCE high, CLE low, ALE low  */
}


/*********************************************************************
*
*             FS_SMC_HW_X_InData
*/

char FS_SMC_HW_X_InData(FS_u32 id) {
  return __SMCPORT;
}


/*********************************************************************
*
*             FS_SMC_HW_X_OutData
*/

void FS_SMC_HW_X_OutData(FS_u32 id,unsigned char data) {
  __SMCPORT = (char)data;
}


/*********************************************************************
*
*             FS_SMC_HW_X_VccOn
*/

void FS_SMC_HW_X_VccOn(FS_u32 id) {
}


/*********************************************************************
*
*             FS_SMC_HW_X_VccOff
*/

void FS_SMC_HW_X_VccOff(FS_u32 id) {
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkCardIn
*/

char FS_SMC_HW_X_ChkCardIn(FS_u32 id) {
  return _Hw_card_in[id];
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkStatus
*/

char FS_SMC_HW_X_ChkStatus(FS_u32 id) {
  if (_Hw_card_changed[id]) {
    _Hw_card_changed[id] = 0;
    return 1;
  }
  return 0;
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkWP
*/

char FS_SMC_HW_X_ChkWP(FS_u32 id) {
  return _Hw_card_wprotect[id];
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkPower
*/

char FS_SMC_HW_X_ChkPower(FS_u32 id) {
  return 1;
}


/*********************************************************************
*
*             FS_SMC_HW_X_ChkBusy
*/

char FS_SMC_HW_X_ChkBusy(FS_u32 id) {
  char x;

  FS_SMC_HW_X_SetCmd(id);        /* nCE low, CLE high, ALE low  */
  __SMCPORT   = 0x70;             /* cmd read status   */
  FS_SMC_HW_X_SetData(id);       /* nCE low, CLE low, ALE low  */
  x  = __SMCPORT;
  FS_SMC_HW_X_SetStandby(id);    /* nCE high, CLE low, ALE low  */
  if (x&0x40) {
    return 0;
  }
  return 1;
}


/*********************************************************************
*
*             Global functions section 3
*
**********************************************************************

  All functions in this section are called by "smc_drv.c", which is
  the main module of file system's SMC driver. Module "smc_phy.c" does
  not use these functions.
*/

/*********************************************************************
*
*             FS_SMC_HW_X_BusyLedOn
*/

void FS_SMC_HW_X_BusyLedOn(FS_u32 id) {
  if (id == 0) {
    __PDDR |= 0x01;           /* DIAG LED on */
  }
}


/*********************************************************************
*
*             FS_SMC_HW_X_BusyLedOff
*/

void FS_SMC_HW_X_BusyLedOff(FS_u32 id) {
  if (id == 0) {
    __PDDR &= ~0x01;        /* DIAG LED off */
  }
}


/*********************************************************************
*
*             FS_SMC_HW_X_DetectStatus
*
  This function is called by "smc_drv.c" only and is used to detect
  a diskchange. It is not used by "smc_phy.c", which uses functions
  "FS__SMC_HW_ChkCardIn", "FS__SMC_HW_ChkStatus", "FS__SMC_HW_ChkWP"
  and "FS__SMC_HW_ChkPower" for that purpose.

  This function needs to be called periodically to make sure, that
  every  diskchange is detected, because there is no HW diskchange
  detect in EP7312 Development Kit. This is done by executing
  "FS_IoCtl("smc:",FS_CMD_CHK_DSKCHANGE,0,0)".
*/

char FS_SMC_HW_X_DetectStatus(FS_u32 id) {
  char x;

  FS_SMC_HW_X_SetCmd(id);        /* nCE low, CLE high, ALE low  */
  __SMCPORT   = 0x70;             /* cmd read status   */
  FS_SMC_HW_X_SetData(id);       /* nCE low, CLE low, ALE low  */
  x  = __SMCPORT;
  FS_SMC_HW_X_SetStandby(id);    /* nCE high, CLE low, ALE low  */
  if ((x == 0x70) || (x & 0x01) || (!(x & 0x40))) {
    _Hw_card_changed[id]  = 1;
    _Hw_card_wprotect[id] = 1;
    _Hw_card_in[id]       = 0;
    return 1;
  }
  _Hw_card_in[id]         = 1;
  if (x&0x80) {
    _Hw_card_wprotect[id] = 0;
  }
  else {
    _Hw_card_wprotect[id] = 1;
  }
  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区电影在线观看 | 国产福利一区在线观看| 欧美疯狂做受xxxx富婆| 国产在线精品免费av| 中文字幕一区视频| 91.com在线观看| 丰满白嫩尤物一区二区| 亚洲国产你懂的| 久久久久久99久久久精品网站| a美女胸又www黄视频久久| 亚洲成人资源在线| 久久精品一区二区| 91精品国产一区二区三区蜜臀| 国产黄色成人av| 国产成人福利片| 成人免费视频免费观看| 天天影视涩香欲综合网| 国产精品五月天| 亚洲精品一区在线观看| 欧美在线你懂得| 99精品热视频| 久久电影国产免费久久电影| 一级特黄大欧美久久久| 国产精品毛片大码女人| 一区二区三区高清不卡| 免费日韩伦理电影| 亚洲国产日韩a在线播放| 美女一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 国产在线精品视频| k8久久久一区二区三区| 欧美日韩免费在线视频| 在线欧美小视频| 日韩欧美久久久| 日韩免费成人网| 国产精品传媒入口麻豆| 国产喷白浆一区二区三区| 精品国产1区二区| 亚洲品质自拍视频网站| 一区二区三区加勒比av| 韩国一区二区三区| 成人激情开心网| 99国产麻豆精品| 欧美一级高清大全免费观看| 国产精品久久久久久户外露出 | 99久久免费视频.com| 欧美日韩成人在线| 欧美精品三级在线观看| 中日韩免费视频中文字幕| 三级不卡在线观看| 麻豆成人久久精品二区三区小说| 成人高清伦理免费影院在线观看| 欧美精品久久99| 亚洲免费av网站| 不卡电影一区二区三区| 欧美一区二区视频观看视频| 亚洲欧美经典视频| 国产成a人亚洲| 日韩免费电影一区| 日本欧美肥老太交大片| 韩国欧美国产1区| 欧美精品久久天天躁| 亚洲人123区| caoporn国产一区二区| 日本一区二区三区免费乱视频| 午夜欧美视频在线观看| 欧美在线免费播放| 亚洲欧美色图小说| 99久久精品免费| 国产精品久久久久久久蜜臀| 国产一区二三区好的| 日韩精品中文字幕一区二区三区 | 久久精品99国产精品| 91精品一区二区三区久久久久久| 亚洲成人免费影院| 欧美性生活一区| 国产网站一区二区| 韩国中文字幕2020精品| 久久亚区不卡日本| 午夜av一区二区| 欧美日本一区二区| 午夜国产精品影院在线观看| 欧美麻豆精品久久久久久| 香港成人在线视频| 欧美成人一区二区三区| 亚洲女性喷水在线观看一区| 一本到高清视频免费精品| 日韩欧美一区二区视频| 久久国产精品一区二区| 久久久综合精品| 国产91对白在线观看九色| 国产精品不卡在线| 欧美中文字幕一区二区三区 | 色伊人久久综合中文字幕| 亚洲精品你懂的| 国产.欧美.日韩| 最新国产精品久久精品| 天堂va蜜桃一区二区三区| 91精品国产综合久久小美女| 国产在线看一区| 中文字幕在线不卡一区| 欧美日韩二区三区| www.亚洲人| 亚洲精品精品亚洲| 欧美一级久久久久久久大片| 国产一区在线观看麻豆| 亚洲视频在线观看三级| 欧美伦理视频网站| 成人性色生活片| 亚洲成人一区二区| xvideos.蜜桃一区二区| 色天使色偷偷av一区二区| 免费成人小视频| 亚洲欧美日韩一区二区三区在线观看| 91精品麻豆日日躁夜夜躁| 不卡视频在线看| 老司机午夜精品| 亚洲视频免费观看| 亚洲精品在线电影| 欧美日韩午夜精品| 成人短视频下载| 精品亚洲成a人在线观看| 日韩欧美的一区| 色婷婷综合五月| 成人免费高清在线| 免费在线观看精品| 亚洲一区精品在线| 这里只有精品电影| 99久久国产综合色|国产精品| 蜜臀av一区二区在线观看| 亚洲人成网站色在线观看| 久久免费午夜影院| 欧美精品自拍偷拍| 91欧美激情一区二区三区成人| 中文字幕一区二区三区不卡| 日韩欧美电影在线| 在线不卡免费欧美| 欧美视频一区二区三区四区| 成人精品一区二区三区中文字幕| 蜜桃av噜噜一区| 亚洲无线码一区二区三区| 亚洲女女做受ⅹxx高潮| 国产精品久久久久精k8| 26uuu精品一区二区三区四区在线| 久久午夜色播影院免费高清 | 国产伦精品一区二区三区视频青涩| 亚洲成人av福利| 亚洲精品美国一| 亚洲卡通欧美制服中文| 中文字幕日韩av资源站| 国产视频一区二区三区在线观看| 久久网这里都是精品| 欧美tk—视频vk| 精品免费一区二区三区| 久久网站热最新地址| 2020国产精品久久精品美国| 精品三级av在线| 久久综合九色综合欧美就去吻| 日韩午夜三级在线| 日韩精品一区二区三区四区| 日韩精品一区国产麻豆| 久久这里只有精品视频网| 久久久久国产免费免费| 国产亚洲精品超碰| 中文字幕欧美日本乱码一线二线| 97精品久久久久中文字幕 | 精品国产sm最大网站| 精品国产成人在线影院| 午夜精品久久久久久久99水蜜桃 | 日韩高清在线电影| 免费精品视频在线| 国产乱码精品一区二区三区忘忧草| 一区二区在线观看免费视频播放| 亚洲黄色性网站| 丝袜亚洲另类丝袜在线| 日本不卡123| 激情偷乱视频一区二区三区| 成人精品电影在线观看| 一本一道综合狠狠老| 欧美一级日韩免费不卡| 久久久99精品免费观看| 亚洲精品日日夜夜| 久久精品国产精品青草| 99精品黄色片免费大全| 欧美日韩国产大片| 久久久久久久免费视频了| 亚洲精品乱码久久久久久 | 97精品国产露脸对白| 欧美日韩不卡视频| 久久精品日产第一区二区三区高清版 | 首页欧美精品中文字幕| 国产成人免费视频精品含羞草妖精| eeuss鲁片一区二区三区| 91精品国产综合久久香蕉的特点 | 久久久精品综合| 午夜私人影院久久久久| 国产+成+人+亚洲欧洲自线| 7799精品视频| 亚洲欧美日韩国产另类专区| 久久超碰97人人做人人爱|