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

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

?? smc_x_hw.c

?? ucfs1.34源代碼
?? 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一区二区三区免费野_久草精品视频
国产激情一区二区三区四区| 国产精品美女久久久久aⅴ国产馆| 久久综合色婷婷| 亚洲人成人一区二区在线观看| 奇米精品一区二区三区在线观看一| 白白色亚洲国产精品| 精品久久久久久久一区二区蜜臀| 一区二区欧美视频| 成人激情av网| 欧美国产精品劲爆| 精品亚洲成a人| 欧美一二三四在线| 日韩高清一区在线| 欧美女孩性生活视频| 曰韩精品一区二区| 91影院在线观看| 中文字幕色av一区二区三区| 国产福利一区在线| 久久亚洲免费视频| 韩国成人精品a∨在线观看| 欧美一级夜夜爽| 亚洲成av人在线观看| 欧美亚洲日本一区| 亚洲一区成人在线| 欧美三级在线视频| 亚洲电影欧美电影有声小说| 日本久久一区二区| 一区二区三区欧美日| 欧美在线制服丝袜| 亚洲成人综合视频| 欧美日本高清视频在线观看| 婷婷开心久久网| 在线综合视频播放| 黄色小说综合网站| 国产亚洲美州欧州综合国 | 国产欧美日韩在线视频| 国产真实乱对白精彩久久| 欧美成人a∨高清免费观看| 久久99国产乱子伦精品免费| www久久久久| 成人永久aaa| 亚洲欧美日韩在线不卡| 欧美日韩在线播放三区四区| 日产欧产美韩系列久久99| 精品久久一区二区| 懂色av中文字幕一区二区三区| 中文字幕在线一区| 欧美在线播放高清精品| 奇米色一区二区| 国产精品私人自拍| 91传媒视频在线播放| 日韩国产高清在线| 国产精品色哟哟| 欧洲在线/亚洲| 国内精品免费**视频| 亚洲另类在线一区| 91麻豆精品国产91久久久久久久久 | 日韩无一区二区| 国产91精品一区二区| 一区二区三区在线视频播放| 欧美久久久久久久久久| 国产乱码精品一区二区三区五月婷| 中文字幕精品一区二区精品绿巨人 | 高清久久久久久| 亚洲一区二区三区美女| 精品国产髙清在线看国产毛片 | 97久久超碰国产精品| 午夜欧美视频在线观看| 久久久亚洲高清| 欧美日韩一本到| 成人黄色免费短视频| 午夜精品福利一区二区三区av| 中文字幕欧美三区| 91麻豆精品国产91| 色综合天天综合网国产成人综合天| 麻豆成人久久精品二区三区红 | 中文字幕乱码久久午夜不卡| 欧美群妇大交群的观看方式| 成人h精品动漫一区二区三区| 日本中文字幕一区二区视频 | 亚洲激情图片一区| 2023国产精品自拍| 5566中文字幕一区二区电影| 成人综合婷婷国产精品久久蜜臀 | 国产拍揄自揄精品视频麻豆| 欧美乱妇15p| 91成人看片片| 国产91精品在线观看| 精品一区二区三区免费观看| 亚洲精品老司机| 国产精品水嫩水嫩| 欧美一区二区三区免费大片| 欧洲色大大久久| 成人avav影音| 高清免费成人av| 国产一区91精品张津瑜| 麻豆91免费观看| 日韩中文字幕1| 亚洲sss视频在线视频| 亚洲日本护士毛茸茸| 国产精品电影一区二区| 久久精品一区二区三区av| 精品国产区一区| 欧美成人艳星乳罩| 精品国产乱码久久久久久夜甘婷婷 | 亚洲国产美国国产综合一区二区| 自拍av一区二区三区| 中文字幕av一区二区三区免费看| 精品电影一区二区三区| 精品久久国产97色综合| 欧美变态tickling挠脚心| 欧美大肚乱孕交hd孕妇| 日韩欧美一区二区免费| 欧美大白屁股肥臀xxxxxx| 欧美一区二区免费视频| 日韩视频一区二区三区在线播放| 欧美疯狂性受xxxxx喷水图片| 欧美精品乱人伦久久久久久| 4438成人网| 欧美电影免费观看高清完整版| 精品粉嫩超白一线天av| 国产欧美一区二区三区鸳鸯浴| 亚洲国产成人自拍| 亚洲美女电影在线| 亚洲午夜一区二区三区| 秋霞影院一区二区| 狠狠色伊人亚洲综合成人| 国产九色sp调教91| 99久久99久久精品免费观看| 欧美日韩综合一区| 日韩三级精品电影久久久 | 久久久青草青青国产亚洲免观| 久久五月婷婷丁香社区| 中文字幕一区av| 亚洲专区一二三| 精品综合久久久久久8888| 成人激情文学综合网| 欧美伊人久久久久久午夜久久久久| 欧美美女黄视频| 久久久国产精品午夜一区ai换脸 | 久久久久久麻豆| 亚洲色图欧美在线| 免费成人美女在线观看.| 国产成人在线免费| 欧美日韩一区二区不卡| 久久午夜色播影院免费高清| 亚洲视频一区在线| 日本特黄久久久高潮| 成人精品高清在线| 欧美美女一区二区三区| 国产精品乱码人人做人人爱| 亚洲va国产va欧美va观看| 国产成人一级电影| 欧美日韩久久一区| 国产偷国产偷亚洲高清人白洁 | 亚洲欧美一区二区三区久本道91| 亚洲国产裸拍裸体视频在线观看乱了 | 在线视频国内一区二区| 精品国产乱码久久久久久闺蜜 | 日韩一区二区在线播放| 国产精品区一区二区三区| 日韩不卡在线观看日韩不卡视频| 成人免费毛片app| 日韩一区二区在线看片| 亚洲无人区一区| 成人美女视频在线观看18| 91麻豆精品国产综合久久久久久| 成人欧美一区二区三区黑人麻豆 | 免费视频最近日韩| 91在线小视频| 欧美韩国一区二区| 麻豆传媒一区二区三区| 欧美精品亚洲一区二区在线播放| 亚洲少妇30p| 成人av免费在线观看| 欧美精品一区二区三区久久久| 亚洲成人免费在线| 99国产欧美另类久久久精品| 欧美国产日产图区| 国产精品12区| 久久综合狠狠综合| 精品一区二区久久| 精品国产a毛片| 免费欧美在线视频| 制服.丝袜.亚洲.中文.综合| 亚洲一区二区综合| 91成人看片片| 一区二区三区高清在线| 色诱亚洲精品久久久久久| 国产精品美女久久久久久久网站| 国产剧情一区二区| 久久综合久久综合亚洲| 极品少妇xxxx精品少妇| 日韩精品中文字幕在线不卡尤物| 日韩黄色片在线观看| 欧美精品粉嫩高潮一区二区| 天天综合色天天| 日韩精品一区二区三区视频在线观看| 免费看日韩a级影片| 精品日韩欧美一区二区|