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

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

?? smc_x_hw.c

?? uCOS uCGUI uCFS 在ADS下調試通過 LPC2292
?? 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一区二区三区免费野_久草精品视频
91亚洲精品久久久蜜桃| 麻豆91精品91久久久的内涵| 99热在这里有精品免费| 自拍偷在线精品自拍偷无码专区 | 久久久久久久综合| 国产露脸91国语对白| 国产日韩欧美综合在线| 色综合色狠狠天天综合色| 有坂深雪av一区二区精品| 欧美日韩激情在线| 国产一区二区在线观看视频| 国产精品女同一区二区三区| 一本色道久久加勒比精品 | 亚洲国产高清不卡| 在线视频欧美精品| 久久精品二区亚洲w码| 欧美极品aⅴ影院| 色久综合一二码| 日本麻豆一区二区三区视频| 欧美国产丝袜视频| 欧美日韩一区二区三区免费看| 美女视频黄免费的久久| 国产精品女同互慰在线看| 欧美三级电影网站| 国产精品亚洲一区二区三区妖精| 亚洲欧美在线视频观看| 日韩欧美在线不卡| 99热精品国产| 精品亚洲成a人在线观看| 亚洲欧洲另类国产综合| 69久久99精品久久久久婷婷| 国产91综合网| 日韩精品成人一区二区三区 | 国产精品狼人久久影院观看方式| 欧美日韩一区二区三区免费看 | 日韩精品一区二区三区三区免费| 暴力调教一区二区三区| 免费在线欧美视频| 一区二区三区久久| 国产欧美视频一区二区| 欧美电影一区二区| 91麻豆免费看片| 国产精品亚洲а∨天堂免在线| 亚洲线精品一区二区三区八戒| 国产拍欧美日韩视频二区| 在线电影院国产精品| 一本大道久久a久久综合| 激情久久五月天| 日产国产欧美视频一区精品| 亚洲视频在线观看三级| 久久久国产精华| 日韩欧美一级精品久久| 欧美日韩国产在线观看| 一本一道波多野结衣一区二区| 国产在线精品一区二区三区不卡| 亚洲不卡在线观看| 亚洲精品成人天堂一二三| 中文字幕av一区二区三区高| 亚洲精品一区二区在线观看| 91精品国产丝袜白色高跟鞋| 色八戒一区二区三区| 99久久精品99国产精品| 成人小视频在线观看| 国内久久精品视频| 九九视频精品免费| 免费人成精品欧美精品| 三级欧美在线一区| 香蕉久久夜色精品国产使用方法| 又紧又大又爽精品一区二区| 亚洲色图清纯唯美| 亚洲色图丝袜美腿| 亚洲综合色丁香婷婷六月图片| 日韩美女视频一区二区| 国产精品福利一区二区| 国产精品护士白丝一区av| 日本一区二区免费在线| 欧美国产日本视频| 一区在线播放视频| 亚洲欧美日韩国产中文在线| 亚洲精品乱码久久久久久| 亚洲精品中文在线观看| 夜夜嗨av一区二区三区四季av| 亚洲欧美日韩综合aⅴ视频| 一区二区三区蜜桃| 亚洲chinese男男1069| 日韩精品一区第一页| 奇米综合一区二区三区精品视频 | 麻豆高清免费国产一区| 美女高潮久久久| 国产一区二区成人久久免费影院 | 色乱码一区二区三区88| 日本道色综合久久| 欧美久久久影院| 欧美成人一级视频| 久久美女高清视频| 亚洲国产精品av| 亚洲福利一区二区| 蜜桃精品视频在线| 国产高清不卡一区二区| 丁香六月久久综合狠狠色| 99国产精品99久久久久久| 欧美亚洲愉拍一区二区| 日韩一区二区在线免费观看| 国产欧美视频一区二区| 亚洲综合男人的天堂| 麻豆国产一区二区| av在线免费不卡| 欧美高清视频一二三区| 久久久久久99精品| 亚洲精品国产第一综合99久久 | 日韩一区二区电影网| 精品一区二区三区日韩| 福利视频网站一区二区三区| 欧洲色大大久久| 精品福利一区二区三区 | 精品成人一区二区三区四区| 在线观看亚洲a| 久久这里只有精品视频网| 午夜视频一区二区三区| 色久综合一二码| 亚洲日本丝袜连裤袜办公室| 成人在线一区二区三区| 国产午夜亚洲精品不卡| 国产自产v一区二区三区c| 日韩一区二区免费在线观看| 天使萌一区二区三区免费观看| 色www精品视频在线观看| 亚洲精品国产无天堂网2021| 色老汉一区二区三区| 一二三四社区欧美黄| 91国在线观看| 亚洲国产毛片aaaaa无费看| 日本道色综合久久| 亚洲国产成人高清精品| 欧美性感一区二区三区| 亚洲国产精品久久久久婷婷884| 色欧美片视频在线观看 | 日韩激情视频网站| 欧美精品在线观看一区二区| 天天操天天色综合| 欧美精品乱码久久久久久| 日韩成人精品在线| 精品少妇一区二区三区| 国产乱码精品1区2区3区| 中文字幕第一区综合| 色综合天天综合色综合av| 一区二区三区在线免费| 欧美午夜免费电影| 日韩va欧美va亚洲va久久| 精品剧情在线观看| 国产精品1区2区3区| 国产精品另类一区| 一本色道a无线码一区v| 亚洲欧美日韩在线| 91精品欧美久久久久久动漫| 另类成人小视频在线| 久久精品综合网| 99re8在线精品视频免费播放| 亚洲综合区在线| 精品少妇一区二区三区视频免付费| 国精产品一区一区三区mba桃花| 国产女人18毛片水真多成人如厕| 成人精品国产福利| 亚洲一卡二卡三卡四卡五卡| 欧美刺激午夜性久久久久久久 | 欧美日韩不卡视频| 久久成人免费网站| 国产精品人人做人人爽人人添| 欧美性猛片aaaaaaa做受| 麻豆成人免费电影| 亚洲色图色小说| 日韩手机在线导航| av电影天堂一区二区在线观看| 亚洲成人在线网站| 久久精品这里都是精品| 欧美日韩在线播放| 国产传媒一区在线| 亚洲一二三四在线观看| 精品蜜桃在线看| 91久久精品午夜一区二区| 久久超碰97人人做人人爱| 亚洲欧美日韩电影| 久久久一区二区三区| 欧美性受xxxx黑人xyx| 夫妻av一区二区| 日韩精品每日更新| www日韩大片| 欧美日韩一区三区| 粉嫩aⅴ一区二区三区四区五区| 亚洲成人一区在线| 国产日韩欧美在线一区| 91精品国产综合久久精品图片| 不卡av电影在线播放| 久久狠狠亚洲综合| 亚洲午夜影视影院在线观看| 久久在线免费观看| 欧美一级一级性生活免费录像| 91色九色蝌蚪| 国产v综合v亚洲欧| 激情综合色综合久久|