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

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

?? serial.c

?? keil 下usb轉串口
?? C
字號:
/*----------------------------------------------------------------------------
 *      Name:    serial.c
 *      Purpose: serial port handling
 *      Version: V1.00
 *----------------------------------------------------------------------------
 *      This file is part of the uVision/ARM development tools.
 *      This software may only be used under the terms of a valid, current,
 *      end user licence from KEIL for a compatible version of KEIL software
 *      development tools. Nothing else gives you the right to use it.
 *
 *      Copyright (c) 2005-2007 Keil Software.
 *---------------------------------------------------------------------------*/

#include "type.h"
#include <LPC23xx.H>                                  /* LPC23xx definitions */
#include "serial.h"

#define UART1                            /* Use UART 1  */

#ifdef UART0                             /* If UART 0 is used */
  #define UxFCR  U0FCR
  #define UxFDR  U0FDR
  #define UxLCR  U0LCR
  #define UxDLL  U0DLL
  #define UxDLM  U0DLM
  #define UxLSR  U0LSR
  #define UxMSR  U0MSR
  #define UxTHR  U0THR
  #define UxRBR  U0RBR
#elif defined(UART1)                     /* If UART 1 is used */
  #define UxFCR  U1FCR
  #define UxFDR  U1FDR
  #define UxLCR  U1LCR
  #define UxDLL  U1DLL
  #define UxDLM  U1DLM
  #define UxLSR  U1LSR
  #define UxMSR  U1MSR
  #define UxTHR  U1THR
  #define UxRBR  U1RBR
#endif

/*----------------------------------------------------------------------------
  initialize the buffer
 *---------------------------------------------------------------------------*/
void buf_Init (buf_t *buf, char *buffer) {
  buf->in  = 0;
  buf->out = 0;
  buf->buf = buffer;
}
 
/*----------------------------------------------------------------------------
  put a character into the buffer
 *---------------------------------------------------------------------------*/
BOOL buf_Put (buf_t *buf, char c) {
  int next;

  next = (buf->in + 1) % SER_BUF_SIZE;   /* check if space is available */
  if (next == buf->out) {                /* buffer full */
	return (FALSE);
  }

  buf->buf[buf->in] = c;
  buf->in = next;

  return (TRUE);
}


/*----------------------------------------------------------------------------
  get a character from the buffer
 *---------------------------------------------------------------------------*/
BOOL buf_Get (buf_t *buf, char *c) {
  int next;

  if (buf->in == buf->out) {                   /* check if data is available */
    return (FALSE);
  }

  next = (buf->out + 1) % SER_BUF_SIZE;

  *c = buf->buf[buf->out];
  buf->out = next;

  return (TRUE);
}


/*----------------------------------------------------------------------------
  check if space is in the buffer
 *---------------------------------------------------------------------------*/
int buf_Free (buf_t *buf) {
  int used;

  used = (SER_BUF_SIZE + buf->in - buf->out) % SER_BUF_SIZE;
  
  return (SER_BUF_SIZE - 1 - used);
}


/*----------------------------------------------------------------------------
  set the line coding
 *---------------------------------------------------------------------------*/
void ser_SetLineCoding (DWORD baudrate, BYTE databits, BYTE parity, BYTE stopbits) {
  BYTE  lcr_p, lcr_s, lcr_d;
  DWORD dll;

  switch (databits) {
    case 5:                              /* 5 Data bits   */
      lcr_d = 0x00;
    break;
    case 6:                              /* 6 Data bits   */
      lcr_d = 0x01;
    break;
    case 7:                              /* 7 Data bits   */
      lcr_d = 0x02;
    break;
    case 8:                              /* 8 Data bits   */
    default:
      lcr_d = 0x03;
    break;
  }

  switch (stopbits) {
    case 1:                              /* 1,5 Stop bits */
    case 2:                              /* 2   Stop bits */
      lcr_s = 0x04;
    break;
    case 0:                              /* 1   Stop bit  */
    default:
      lcr_s = 0x00;
    break;
  }

  switch (parity) {
    case 1:                              /* Parity Odd    */
      lcr_p = 0x08;
    break;
    case 2:                              /* Parity Even   */
      lcr_p = 0x18;
    break;
    case 3:                              /* Parity Mark   */
      lcr_p = 0x28;
    break;
    case 4:                              /* Parity Space  */
      lcr_p = 0x38;
    break;
    case 0:                              /* Parity None   */
    default:
      lcr_p = 0x00;
    break;
  }

  /*** Note that the pclk is 14,4 MHz. ***/
  dll = ((14400000UL / 16UL) + (baudrate-1)) / baudrate;

  UxFDR = 0;                             /* Fractional divider not used      */
  UxLCR = 0x80 | lcr_d | lcr_p | lcr_s;  /* Data bits, Parity,   Stop bit    */
  UxDLL = dll;                           /* Baud Rate @ 12 MHZ PCLK          */
  UxDLM = (dll >> 8);                    /* High divisor latch               */
  UxLCR = 0x00 | lcr_d | lcr_p | lcr_s;  /* DLAB = 0                         */
}


/*----------------------------------------------------------------------------
  initialize the serial interface
 *---------------------------------------------------------------------------*/
void ser_Init (void) {                   /* Initialize Serial Interface      */

  #ifdef UART0
    PINSEL0 |= 0x00000050;               /* Enable TxD0 and RxD0             */
  #elif defined (UART1)
    PINSEL0 |= 0x40000000;               /* Enable TxD1                      */
    PINSEL1 |= 0x00000001;               /* Enable RxD1                      */
  #endif

  ser_SetLineCoding (9600, 8, 0, 0);     /* set the initial LineCoding       */ 
}


/*----------------------------------------------------------------------------
  read the line status register
 *---------------------------------------------------------------------------*/
unsigned char ser_GetLSR (void) {
  return (UxLSR);
}


/*----------------------------------------------------------------------------
  read the modem status register
 *---------------------------------------------------------------------------*/
unsigned char ser_GetMSR (void) {
  return (UxMSR);
}


/*----------------------------------------------------------------------------
  read a character from serial interface
 *---------------------------------------------------------------------------*/
int ser_GetChar (void) {

  while (!(UxLSR & 0x01));

  return (UxRBR);
}


/*----------------------------------------------------------------------------
  put a caracter to the serial interface
 *---------------------------------------------------------------------------*/
int ser_PutChar (int ch) {

  if (ch == '\n')  {
	while (!(U0LSR & 0x20));
	UxTHR = '\r';                          /* output CR */
  }
  while (!(UxLSR & 0x20));

  return (UxTHR = ch);
}


/*----------------------------------------------------------------------------
  put a string to the serial interface
 *---------------------------------------------------------------------------*/
int ser_PutString (const char *s) {

  while (*s) {
    ser_PutChar(*s++);
  }
  ser_PutChar('\n');

  return (TRUE);
}


/*----------------------------------------------------------------------------
  check if a character is available at the serial interface
 *---------------------------------------------------------------------------*/
BOOL ser_AvailChar (void) {

  if ((UxLSR & 0x01) == 1)
    return (TRUE);
  else
    return (FALSE);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产呦萝稀缺另类资源| 另类调教123区| 色综合久久中文综合久久97| 亚洲视频资源在线| 欧美日韩一区二区三区在线 | 亚洲国产欧美一区二区三区丁香婷| 91婷婷韩国欧美一区二区| 亚洲狠狠丁香婷婷综合久久久| 精品视频全国免费看| 国产麻豆精品theporn| 国产精品美女久久久久久| 欧美日韩在线不卡| 99视频一区二区| 韩国精品主播一区二区在线观看 | 成年人网站91| 日韩成人免费电影| 26uuu成人网一区二区三区| 91麻豆文化传媒在线观看| 精彩视频一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 久久精品视频网| 日韩丝袜情趣美女图片| 91久久国产最好的精华液| www.av精品| 精品亚洲成a人| 美女视频黄 久久| 日韩中文欧美在线| 视频在线观看91| 亚洲成人在线免费| 久久久久高清精品| 日韩三级免费观看| 精品久久久久99| 欧美一区二区成人| 精品久久久久一区二区国产| 91精品免费观看| 欧美电视剧免费观看| 欧美成人性福生活免费看| 欧美日韩亚洲综合| 欧美一区二区三区白人| 日韩亚洲欧美高清| 欧美日韩国产大片| 日韩三级精品电影久久久| 日韩一级视频免费观看在线| 日韩一区国产二区欧美三区| 日韩一区二区三区在线视频| 久久蜜桃一区二区| 亚洲人成在线播放网站岛国| 亚洲大片免费看| 久久99精品一区二区三区三区| 久久97超碰国产精品超碰| 国产在线播放一区| 91视频国产资源| 久久色.com| 亚洲成人动漫av| 91在线观看下载| 日韩欧美色电影| 亚洲一区免费观看| 老司机精品视频一区二区三区| 成人激情文学综合网| 欧美电影免费观看完整版| 一区二区三区四区在线播放| 激情久久久久久久久久久久久久久久| 国产成人一级电影| 欧美成人aa大片| 久久不见久久见免费视频7| 欧美日免费三级在线| 国产精品久久久爽爽爽麻豆色哟哟| 偷拍日韩校园综合在线| 色综合天天综合网国产成人综合天 | 国产成人自拍网| 日韩免费一区二区三区在线播放| 亚洲第一搞黄网站| 欧美日韩国产不卡| 天堂在线一区二区| 欧美日韩国产天堂| 秋霞午夜鲁丝一区二区老狼| 欧美三级电影在线看| 亚洲国产精品一区二区www在线 | 成人免费毛片片v| 中文无字幕一区二区三区 | 国产在线精品一区二区三区不卡| 69久久夜色精品国产69蝌蚪网| 日韩va亚洲va欧美va久久| 8x8x8国产精品| 韩国精品主播一区二区在线观看| 久久综合色8888| 91美女蜜桃在线| 六月丁香婷婷色狠狠久久| 久久精品亚洲国产奇米99| 99精品欧美一区二区三区综合在线| 中文字幕一区在线观看| 欧美成人a在线| 日本乱码高清不卡字幕| 精品一区二区三区av| 亚洲欧美国产三级| 精品国产乱码91久久久久久网站| 国产91精品在线观看| 五月天亚洲精品| 成人欧美一区二区三区视频网页| 欧美一a一片一级一片| 成人免费视频一区二区| 日本vs亚洲vs韩国一区三区二区 | 91老师国产黑色丝袜在线| 美女视频第一区二区三区免费观看网站| 国产精品女同互慰在线看| 91麻豆精品国产综合久久久久久| 成人精品免费看| 久草热8精品视频在线观看| 亚洲午夜久久久久中文字幕久| www国产亚洲精品久久麻豆| 欧美日韩视频在线第一区| 91丝袜国产在线播放| 成人综合日日夜夜| 国产69精品久久久久777| 美女精品自拍一二三四| 丝袜美腿亚洲综合| 美洲天堂一区二卡三卡四卡视频| 亚洲国产aⅴ成人精品无吗| 一区二区三区不卡视频在线观看 | 日本sm残虐另类| 日本成人在线看| 美女诱惑一区二区| 国产精品自拍在线| 国产99精品国产| 91视视频在线观看入口直接观看www| 9l国产精品久久久久麻豆| 99视频国产精品| 欧美人妖巨大在线| 国产欧美一区二区精品久导航 | 91精品欧美综合在线观看最新| 色综合久久久久| 在线播放91灌醉迷j高跟美女 | 欧美唯美清纯偷拍| 国产亚洲欧美色| 亚洲精品国产无天堂网2021| 日韩精品一二区| 成人国产一区二区三区精品| 欧美私模裸体表演在线观看| 精品久久久久香蕉网| 亚洲成人免费视| 成人美女视频在线观看18| 91精品国产一区二区三区| 国产精品国产自产拍高清av王其| 亚洲不卡一区二区三区| 成人黄色av电影| 2023国产精华国产精品| 亚洲国产精品久久久男人的天堂| 国产风韵犹存在线视精品| 日韩欧美亚洲国产另类| 天天色天天操综合| 欧美日韩精品三区| 亚洲国产乱码最新视频| 99精品视频一区二区三区| 国产精品免费久久久久| 国产精品一二三区在线| 久久综合狠狠综合久久综合88| 亚洲成人动漫av| 欧美一级视频精品观看| 蜜桃精品视频在线| 日韩三级电影网址| 国产精品亚洲第一| 一区二区中文视频| 欧美日韩一卡二卡三卡| 亚州成人在线电影| 日韩精品中午字幕| 久久99久久久欧美国产| 国产婷婷色一区二区三区| 成人avav在线| 亚洲综合在线第一页| 欧美一区二区三区公司| 卡一卡二国产精品| 国产精品理伦片| 9191精品国产综合久久久久久| 日本女优在线视频一区二区| 国产欧美一区二区在线| 91老司机福利 在线| 久久成人综合网| 一区二区三区美女| 国产精品美女久久福利网站| 欧美吻胸吃奶大尺度电影| 久久99精品久久久久久久久久久久| 国产日本亚洲高清| 7777精品久久久大香线蕉| 大胆欧美人体老妇| 日本怡春院一区二区| 亚洲卡通动漫在线| 国产婷婷色一区二区三区| 在线播放中文一区| av中文字幕一区| 国产不卡高清在线观看视频| 午夜激情一区二区三区| 亚洲三级视频在线观看| 国产欧美一区二区三区鸳鸯浴 | 美腿丝袜亚洲综合| 日本美女一区二区| 五月天视频一区| 视频一区二区欧美| 五月天一区二区| 日本特黄久久久高潮| 亚洲gay无套男同|