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

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

?? lcd15xx.c

?? 這是我移植到GBA游戲機上的uCGUI3.24 可以通過模擬器仿真
?? C
?? 第 1 頁 / 共 5 頁
字號:
static int DataCacheY1;

#if LCD_SUPPORT_COMTRANS
  static int DataCacheYBit0;
#else
  #define DataCacheYBit0 DataCacheY0
#endif

/*
        *****************************************
        *                                       *
        *         Set Page routines             *
        *                                       *
        *****************************************

These routines set the page-register of their respective
LCD-controller. Note that page is not what you might imagine,
but is a section of the controllers internal video RAM.
For details, please refer to the datasheet.

*/

static void SetPage0(void) {
  SET_PAGE0(Page);
  aPage[0] = Page;
}

#if (LCD_NUM_CONTROLLERS > 1)
static void SetPage1(void) {
  SET_PAGE1(Page);
  aPage[1] = Page;
}
#endif

#if (LCD_NUM_CONTROLLERS > 2)
static void SetPage2(void) {
  SET_PAGE2(Page);
  aPage[2] = Page;
}
#endif

#if (LCD_NUM_CONTROLLERS > 3)
static void SetPage3(void) {
  SET_PAGE3(Page);
  aPage[3] = Page;
}
#endif

/*
        *****************************************
        *                                       *
        *         Set column routines           *
        *                                       *
        *****************************************
*/

static void SetCAdr0(void) {
  #if LCD_SEGOFF0
    U8 ColP = Col+LCD_SEGOFF0;
  #else
    #define ColP Col
  #endif
  SET_CADR0(ColP);
  aCAdr[0] = Col;
  #if !LCD_SEGOFF0
    #undef ColP
  #endif
}

#if (LCD_NUM_CONTROLLERS > 1)
static void SetCAdr1(void) {
  #if LCD_SEGOFF1
    U8 ColP = Col+LCD_SEGOFF1;
  #else
    #define ColP Col
  #endif
  SET_CADR1(ColP);
  aCAdr[1] = Col;
  #if !LCD_SEGOFF1
    #undef ColP
  #endif
}
#endif

#if (LCD_NUM_CONTROLLERS > 2)
static void SetCAdr2(void) {
  #if LCD_SEGOFF2
    U8 ColP = Col+LCD_SEGOFF2;
  #else
    #define ColP Col
  #endif
  SET_CADR2(ColP);
  aCAdr[2] = Col;
  #if !LCD_SEGOFF2
    #undef ColP
  #endif
}
#endif

#if (LCD_NUM_CONTROLLERS > 3)
static void SetCAdr3(void) {
  #if LCD_SEGOFF3
    U8 ColP = Col+LCD_SEGOFF3;
  #else
    #define ColP Col
  #endif
  SET_CADR3(ColP);
  aCAdr[3] = Col;
  #if !LCD_SEGOFF3
    #undef ColP
  #endif
}
#endif

/*
        *****************************************
        *                                       *
        *        Read video memory routines     *
        *                                       *
        *****************************************
*/

#if !LCD_CACHE
  static U8 ReadVMem0() {
    if (Page !=aPage[0])
      SetPage0();
    if (Col != aCAdr[0])
      SetCAdr0();
    aCAdr[0]+=2;
    LCD_ReadData0(Data);        /* Dummy read */
    return LCD_ReadData0(Data);
  }
#else
  #define ReadVMem0() (*pCacheByte)
#endif
#if (LCD_NUM_CONTROLLERS > 1)
  #if !LCD_CACHE
    U8 ReadVMem1() {
      if (Page !=aPage[1])
        SetPage1();
      if (Col != aCAdr[1])
        SetCAdr1();
      aCAdr[1]+=2;
      LCD_ReadData1(Data);      /* Dummy read */
      return LCD_ReadData1(Data);
    }
  #else
    #define ReadVMem1() (*pCacheByte)
  #endif
#endif /* LCD_NUM_CONTROLLERS >1 */
#if (LCD_NUM_CONTROLLERS > 2)
  #if !LCD_CACHE
    U8 ReadVMem2() {
      if (Page !=aPage[2])
        SetPage2();
      if (Col != aCAdr[2])
        SetCAdr2();
      aCAdr[2]+=2;
      LCD_ReadData2(Data);      /* Dummy read */
      return LCD_ReadData2(Data);
    }
  #else
    #define ReadVMem2() (*pCacheByte)
  #endif
#endif
#if (LCD_NUM_CONTROLLERS > 3)
  #if !LCD_CACHE
    U8 ReadVMem3() {
      if (Page !=aPage[3])
        SetPage3();
      if (Col != aCAdr[3])
        SetCAdr3();
      aCAdr[3]+=2;
      LCD_ReadData3(Data);      /* Dummy read */
      return LCD_ReadData3(Data);
    }
  #else
    #define ReadVMem3() (*pCacheByte)
  #endif
#endif

/*
        *****************************************
        *                                       *
        *       Write video memory routines     *
        *                                       *
        *****************************************
*/

#if  LCD_SUPPORT_CACHECONTROL
  #define CHECK_CACHE_LOCK(Con)                          \
  if (CacheLocked) {                                     \
    U8 ColOff = Col -LCD_FIRSTSEG##Con;                  \
    U8 Bit = ColOff&7;                                   \
    aaCacheDirtyTag##Con[Page][ColOff>>3] |= (1<<Bit);   \
    CacheStat = 1;         /* Mark cache as dirty */     \
    return;                                              \
  }
#else
  #define CHECK_CACHE_LOCK(LCDCON)
#endif
#define WRITE_VMEM(Con)             \
  CHECK_CACHE_LOCK(Con);            \
  if (Page !=aPage[Con])            \
    SetPage##Con();                 \
  if (Col != aCAdr[Con])            \
    SetCAdr##Con();                 \
  LCD_LOCK();                       \
  WRITE_DATA##Con(DataW_Cache);          \
  LCD_UNLOCK();                     \
  aCAdr[Con]++;

#if !LCD_CACHE_WRITETHRU
  #define RETURN_IF_WRITE_NOT_NEEDED(Con) \
    if ( *pCacheByte == DataW_Cache) \
      return;
#else
  #define RETURN_IF_WRITE_NOT_NEEDED(Con)
#endif

#if LCD_CACHE
  #define CHECK_VMEM_CACHE(Con) \
    RETURN_IF_WRITE_NOT_NEEDED(Con);                                \
    *pCacheByte = DataW_Cache;
#else
  #define CHECK_VMEM_CACHE(Con)
#endif

static void WriteVMem0(void) {
  CHECK_VMEM_CACHE(0);
  WRITE_VMEM(0);
}

#if (LCD_NUM_CONTROLLERS > 1)
static void WriteVMem1(void) {
  CHECK_VMEM_CACHE(1);
  WRITE_VMEM(1);
}
#endif

#if (LCD_NUM_CONTROLLERS > 2)
static void WriteVMem2(void) {
  CHECK_VMEM_CACHE(2);
  WRITE_VMEM(2);
}
#endif

#if (LCD_NUM_CONTROLLERS > 3)
static void WriteVMem3(void) {
  CHECK_VMEM_CACHE(3);
  WRITE_VMEM(3);
}
#endif

/*
  ********************************************************************
  *                                                                  *
  *                Write Cache control                               *
  *                                                                  *
  ********************************************************************

In order to speed up access to the LCD and to avoid flickering, it
can be necessary to lock the write cache. This means that all drawing
commands do not affect the hardware it the cache is locked until
the flush (or unlock) command is given.

Note: The code could be shortened a bit by defining an add. macro
      for the code for every controller. This has not been done
      because it would make debugging even harder.
      (It is already hard enough)
*/

#define CHECK_CACHE_BYTE_DIRTY(Controller,Bit)   \
  if (Dirty&(1<<Bit)) {                          \
    if (page !=aPage[Controller]) {              \
      Page = page;                               \
      SetPage##Controller();                     \
    }                                            \
    if (col+Bit != aCAdr[Controller]) {        \
      Col = col+Bit;                             \
      SetCAdr##Controller();                     \
    }                                            \
    LCD_WriteData##Controller(Cache##Controller[page][col+Bit]); \
    aCAdr[Controller]++;                         \
  }
    
#define FLUSH_CACHE_X(Con)                                      \
  for (page=0; page<NUM_PAGES##Con; page++) {					\
    for (col8=0; col8<(NUM_COLS##Con+7)/8; col8++) {			\
      U8 Dirty;													\
      if ((Dirty=aaCacheDirtyTag##Con[page][col8]) !=0) {		\
        int col   = col8<<3;									\
        aaCacheDirtyTag##Con[page][col8] =0;					\
        CHECK_CACHE_BYTE_DIRTY(Con,0);							\
        CHECK_CACHE_BYTE_DIRTY(Con,1);							\
        CHECK_CACHE_BYTE_DIRTY(Con,2);							\
        CHECK_CACHE_BYTE_DIRTY(Con,3);							\
        CHECK_CACHE_BYTE_DIRTY(Con,4);							\
        CHECK_CACHE_BYTE_DIRTY(Con,5);							\
        CHECK_CACHE_BYTE_DIRTY(Con,6);							\
        CHECK_CACHE_BYTE_DIRTY(Con,7);                          \
      }                                                         \
    }															\
  }

#if  LCD_SUPPORT_CACHECONTROL
static void FlushCache(void) {
  int page;
  int col8;     /* Column index, 1 inc skips 8 bytes */
  FLUSH_CACHE_X(0);
  #if (LCD_NUM_CONTROLLERS >1)
    FLUSH_CACHE_X(1);
  #endif
  #if (LCD_NUM_CONTROLLERS >2)
    FLUSH_CACHE_X(2);
  #endif
  #if (LCD_NUM_CONTROLLERS >3)
    FLUSH_CACHE_X(3);
  #endif
/* Important !!!
  We have to make sure that the byte-level cache is not level
  inconsistent because we have modified the Page/Col values. This
  is done by invalidating the x-position. */
  DataCacheX=-1;
}

U8 LCD_L0_ControlCache(U8 cmd) {
  switch (cmd) {
  case LCD_CC_LOCK:   /* Set Cache to lock state.*/
    CacheLocked =1;
    break;
  case LCD_CC_UNLOCK: /* Set Cache to unlock state ... must flush !*/
    CacheLocked =0;
  case LCD_CC_FLUSH:  /* Flush cache */
    if (CacheStat) {
      CacheStat =0;
      FlushCache();
    }
  }
  return CacheStat;
}
#endif

/*
  ********************************************************************
  *                                                                  *
  *                                                                  *
  *         Internal video memory management                         *
  *                                                                  *
  *                                                                  *
  ********************************************************************

This contains the internal video management of this driver, which is
the core of it. It has been designed with the following goals:

+ Support for all types of orientaions of display
+ Support for multiple controllers
+ Support for both parallel and serial interface
+ Small RAM footprint
+ Fast execution on all CPUs in all configurations
+ Small code

It has taken a considerable amount of time to develop, optimize and
test the concept of this driver. It should pretty much cover most LCDs
using 15XX controllers; if you feel your configuration is not covered
by this driver, please get
in contact with us, preferably via email (support@segger.com).

*/

#define FLUSH() if (DataW_Dirty) Flush()

/* For XOR operations, the byte needs to be loaded in order to
   perform the operation. We also have to make sure that bits which
   have been previously modified are not forgotten.
   This essentially means loading only the unmodified bits (for which
   the bit in DATAW_Dirty is ==0) and leave the other ones unchanged.
*/

#define LOADDATA()                               \
  if (!DataR_Valid) {                            \
    ReadData();                                  \
    DataW_Cache &= DataW_Dirty;                  \
    DataW_Cache |= DataR_Cache&(~DataW_Dirty);   \
  }

#if LCD_CACHE
  #define ReadData() DataR_Cache = *pCacheByte; DataR_Valid= 0xff;
#else
static void ReadData(void) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩伦理免费电影| 日本一区二区三区久久久久久久久不| 国产不卡免费视频| 国产成人午夜视频| 成人永久免费视频| 国产精品影音先锋| 岛国精品在线观看| 91黄色免费观看| 日韩一区和二区| 亚洲天堂中文字幕| 亚洲欧美日韩一区二区| 亚洲高清不卡在线| 黄页网站大全一区二区| 国产成人av一区二区三区在线| 国产一级精品在线| 国产一区二区伦理| 欧美亚洲日本国产| 欧美一区二区二区| 国产精品美女一区二区| 亚洲狠狠爱一区二区三区| 美腿丝袜一区二区三区| 91免费国产在线| 欧美精品国产精品| 国产精品毛片a∨一区二区三区| 一区二区三区免费在线观看| 久久精品国产**网站演员| 99re亚洲国产精品| 6080日韩午夜伦伦午夜伦| 国产欧美日韩综合| 另类小说一区二区三区| 在线观看91视频| 久久久99久久| 美女视频黄久久| 欧美精品在线一区二区三区| 亚洲日本免费电影| 成人午夜激情影院| 国产精品免费网站在线观看| 久久国产精品区| 91精品国产麻豆| 日本伊人午夜精品| 欧美一区二区高清| 精品一区二区在线播放| 欧美一区中文字幕| 美女在线视频一区| 日韩一区二区三区免费看 | 狠狠狠色丁香婷婷综合激情| 欧美狂野另类xxxxoooo| 精品国产123| 一级精品视频在线观看宜春院| 成人动漫视频在线| 亚洲图片另类小说| 欧美午夜在线一二页| 亚洲激情成人在线| 欧美日韩国产综合久久| 韩国女主播成人在线| 欧美精品v日韩精品v韩国精品v| 一区二区免费视频| 91精品国产黑色紧身裤美女| 国精品**一区二区三区在线蜜桃| 国产精品视频你懂的| 色婷婷国产精品久久包臀| 午夜影院久久久| 亚洲精品一区二区三区在线观看| 高清国产午夜精品久久久久久| 中文字幕在线不卡视频| 7777精品伊人久久久大香线蕉超级流畅| 免费久久99精品国产| 国产精品欧美久久久久无广告 | 国产精品视频免费| 日韩欧美黄色影院| 欧洲激情一区二区| 国产剧情一区在线| 日韩高清不卡一区| 亚洲人精品午夜| 久久先锋影音av鲁色资源网| 欧美亚洲国产一区在线观看网站| 国产成人综合视频| 日本视频中文字幕一区二区三区 | 五月天一区二区三区| 国产欧美日本一区二区三区| 欧美一区二区视频网站| 欧美视频日韩视频在线观看| 99在线热播精品免费| 亚洲一区在线观看免费| 精品日产卡一卡二卡麻豆| 欧美一级一级性生活免费录像| 99热这里都是精品| 91免费在线播放| 在线观看一区二区精品视频| 色婷婷激情综合| 在线免费观看日韩欧美| 欧美亚洲国产一区二区三区va | 亚洲欧美国产77777| 中文字幕佐山爱一区二区免费| 国产精品国产三级国产aⅴ中文 | 欧美日本免费一区二区三区| 欧美三级电影网站| 日韩欧美一二区| 久久久久国色av免费看影院| 国产无遮挡一区二区三区毛片日本| ww亚洲ww在线观看国产| 中文在线一区二区| 亚洲第一电影网| 国产在线视频精品一区| 97久久精品人人做人人爽50路 | 综合网在线视频| 亚洲成人激情av| 成人免费高清在线| 欧美一级久久久| 中文幕一区二区三区久久蜜桃| 亚洲成人第一页| 波多野结衣欧美| 日韩天堂在线观看| 亚洲综合图片区| 国产高清成人在线| 丁香激情综合五月| 正在播放亚洲一区| 最新不卡av在线| 国产福利91精品| 91.麻豆视频| 亚洲成人精品影院| 色综合久久88色综合天天 | 国产精品一区免费视频| 欧美日本视频在线| 一区二区理论电影在线观看| 成人av免费网站| 国产精品国模大尺度视频| 激情五月婷婷综合网| 欧美一区二区三区四区视频| 亚洲一区二区成人在线观看| www.激情成人| 国产精品理伦片| 91在线观看成人| 国产精品美女久久久久久久久| 韩国一区二区三区| 欧美xxxxx牲另类人与| 日韩av二区在线播放| 欧美一二三区在线| 国产成人精品三级麻豆| 国产免费成人在线视频| 成人午夜电影网站| 综合激情网...| 欧美三级欧美一级| 麻豆91在线播放| 亚洲国产精品传媒在线观看| 99精品视频在线播放观看| 一区二区久久久| 日韩色视频在线观看| 国产剧情一区二区| 亚洲国产成人va在线观看天堂| 欧美一区二区三区小说| 成人精品视频一区二区三区尤物| 亚洲男女一区二区三区| 精品久久国产字幕高潮| 91女人视频在线观看| 蜜桃视频一区二区| 亚洲人午夜精品天堂一二香蕉| 欧美一区三区四区| 日韩vs国产vs欧美| 中文字幕在线一区| 欧美一区三区二区| 欧美在线播放高清精品| 国产在线精品国自产拍免费| 亚洲视频免费在线观看| 久久综合国产精品| 欧美高清hd18日本| 欧美日韩国产综合久久| 91在线国内视频| 成人91在线观看| 国产精品一区二区黑丝| 免费观看在线综合| 日韩高清在线一区| 污片在线观看一区二区| 亚洲成人综合在线| 亚洲国产成人av| 一区二区三区.www| 亚洲精品一卡二卡| 亚洲激情第一区| 午夜精品久久一牛影视| 亚洲高清一区二区三区| 亚洲一区二区精品3399| 亚洲成人免费影院| 日本特黄久久久高潮| 九一久久久久久| 成人动漫精品一区二区| 91年精品国产| 欧美福利电影网| 2017欧美狠狠色| 亚洲婷婷在线视频| 亚洲成av人片| 精品无码三级在线观看视频| 国产精品亚洲专一区二区三区| 国产精品亚洲成人| 色综合久久天天综合网| 911精品产国品一二三产区| 久久婷婷久久一区二区三区| 日本一区二区免费在线观看视频| 亚洲手机成人高清视频| 亚洲成人777| 色香蕉成人二区免费|