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

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

?? modem.c

?? modem 開發
?? C
字號:
/****************************************************************************
* 文件名:MODEM.C
* 功能:MODEM驅動程序。
* 說明:基于LPC2100、LPC2200系列ARM7微控制器的UART1
****************************************************************************/
#define IN_MODEM
#include "config.h"

static volatile uint8  ModemState=NOT_INIT_MODEM;	// 定義MODEM狀態變量


/****************************************************************************
* 名稱:DelayNS()
* 功能:長軟件延時
* 入口參數:dly		延時參數,值越大,延時越久
* 出口參數:無
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<10000; i++);
}


/****************************************************************************
* 名稱:UART1Init()
* 功能:UART1初始化(MODEM功能)。
* 入口參數:bps		波特率
* 出口參數:無
****************************************************************************/
void  UART1Init(uint32 bps)
{
    uint16 Fdiv;
    
    PINSEL0 = (PINSEL0 & 0x0000FFFF) | 0x55550000;  // 選擇管腳為UART0 

    U1LCR = 0x80;                                   // 允許訪問分頻因子寄存器 
    Fdiv = (Fpclk / 16) / bps;                      // 設置波特率 
    U1DLM = Fdiv / 256;							
	U1DLL = Fdiv % 256;						
    U1LCR = 0x03;                                   // 禁止訪問分頻因子寄存器 
                                                    // 且設置為8,1,n 
	U1IER = 0x0D;                                   // 允許接收和MODEM中斷 
    U1FCR = 0x87;                                   // 初始化FIFO 
    U1MCR = 0x03;
}


/****************************************************************************
* 名稱:ModemWrite()
* 功能:向UART1(MODEM)發送多字節數據。
* 入口參數:Data		待發送數據指針
*          NByte	發送數據字節個數
* 出口參數:返回當前MODEM狀態值
****************************************************************************/
uint8  ModemWrite(char *Data, uint16 NByte)
{
    uint8 i;
    
    while (NByte > 0)								// 發送NByte字節數據
    {
        for (i = 0; i < 8; i++)						// 一次發送8個字節(已使能FIFO)			
        {
            U1THR = *Data++;
            NByte--;
            if (NByte == 0)
            {
                break;
            }
        }
        while((U1LSR&0x20) == 0);					// 等待數據發送完畢
    }
    
    return(ModemState);
} 


/****************************************************************************
* 名稱:ModemGetch()
* 功能:接收UART1(MODEM)字節數據。
* 入口參數:無
* 出口參數:返回取得的數據
****************************************************************************/
uint8  ModemGetch(void)
{
    uint8 rt;

    while((U1LSR&0x01) == 0)
    {                                           // 沒有收到數據
        U1IER = U1IER | 0x01;                   // 允許接收中斷 
        for(rt=0; rt<200; rt++);
    }
    rt = U1RBR;                                 // 讀取收到的數據

    return(rt);
} 


/****************************************************************************
* 名稱:ModemCommand()
* 功能:發送MODEM命令。
* 入口參數:Command		AT指令(字符串)
* 出口參數:返回當前MODEM狀態值
****************************************************************************/
uint8  ModemCommand(char *Command)
{
    char  *cp;
    uint8  i, err;
    
    if(ModemState == MODEM_CLOSE)
    {
        while((U1LSR&0x01) != 0)			// 讀取完接收到的數據
        {
            err = U1RBR;
        }
        
        cp = Command;
        i = 0;
        while(*cp++ != 0)					// 取得AT指令字符個數
        {
            i++;
        }
        ModemWrite(Command, i);				// 發送AT指令
        ModemWrite("\r", 1);				// 發送命令結束符
        
        i = ModemGetch();
        if((i=='A') || (i=='a'))			// 若命令回顯,接字符形式等待回應
        {
            while(1)
            {
                err = i;
                i = ModemGetch();
                if((err=='O') || (err=='o'))
                if((i=='K') || (i=='k'))
                {
                    i = ModemGetch();
                    i = ModemGetch();
                    break;
                }
            }
        }
        else								// 按數字形式等待回應
        {
            while(1)
            {
                if(i == '0')
                {   
                    i = ModemGetch();
                    break;
                }
                i = ModemGetch();
            }
        }
    }
    
    return(ModemState);
}


/****************************************************************************
* 名稱:ModemDialDown()
* 功能:Modem斷開。
* 入口參數:Number		拔號字符串
* 出口參數:返回當前MODEM狀態值
****************************************************************************/
uint8  ModemDialDown(void)
{
    U1MCR = 0x02;							// 設置DTR為0,使MODEM掛機并返回命令狀態
    DelayNS(1);								// MODEM中斷會設置ModemState為MODEM_CLOSE
    U1MCR = 0x03;							// 恢復DTR為1
    DelayNS(1);
    										
    return(ModemState);
}

/****************************************************************************
* 名稱:ModemDialUp()
* 功能:Modem拔號操作。
* 入口參數:Number		拔號字符串
* 出口參數:返回當前MODEM狀態值
****************************************************************************/
uint8  ModemDialUp(char Number[])
{
    char   *cp;
    uint8  i, err;
    
    if(ModemState == MODEM_CLOSE)
    {
        while((U1LSR & 0x00000001) != 0)	// 讀取完接收到的數據
        {
            err = U1RBR;
        }
        ModemWrite("ATD", 3);				// 發送拔號命令
        i = 0;
        cp = Number;
        while(*cp++ != 0)					// 取得AT指令字符個數
        {
            i++;
        }
        ModemWrite(Number, i);				// 發送拔號號碼
        ModemWrite("\r", 1);				// 發送命令結束符

        U1IER = U1IER | 0x01;             	// 允許接收中斷
        for (i = 0; i < 200; i++)
        {
            DelayNS(5);
            if (ModemState == MODEM_CONNECT)
            {
                break;
            }
        }
    }
    
    return(ModemState);
}


/****************************************************************************
* 名稱:GetModemState()
* 功能:讀取MODEM狀態值。
* 入口參數:無
* 出口參數:當前MODEM狀態值
****************************************************************************/
uint8  GetModemState(void)
{
    return(ModemState);
}


/****************************************************************************
* 名稱:ModemInit()
* 功能:初始化MODEM。
* 入口參數:bps		串口波特率
* 出口參數:返回當前MODEM狀態值
****************************************************************************/
uint8  ModemInit(uint32 bps)
{
    ModemState = MODEM_CLOSE;					// 設置MODEM已關閉狀態
    UART1Init(bps);								// 初始化UART1

    if((U1MSR & 0x30) != 0x30)					// 判斷DSR、CTS是否有效
    {
        DelayNS(1);
        if((U1MSR & 0x30) != 0x30)
        {
            ModemState = NOT_FIND_MODEM;		// 沒有發現MODEM
        }
    }
    if(ModemState == MODEM_CLOSE)				// 進行MODEM初始化
    {
        ModemCommand("ATE0");					// 關閉命令回顯					
        ModemCommand("ATV0");					// 以數字形式返回結果碼
        ModemCommand("AT&C1");					// 數據載波檢測(DCD)選擇有效
        ModemCommand("AT&D2");					// 數據終端準備就緒(DTR)選擇,當DTR由ON-OFF時,MODEM將掛機,并返回命令狀態
        ModemCommand("AT&R0");					// 請求發送(RTS)/清除發送(CTS)選擇,當MODEM在線時,CTS跟隨RTS的變化
        ModemCommand("AT&S0");					// 數據設備就緒(DSR)選擇,DSR一直有效
        ModemCommand("ATS0=2");					// 自動摘機應答設置,響鈴2次后MODEM自動摘機
    }
    
    return(ModemState);
}


/****************************************************************************
* 名稱:UART1_Exception()
* 功能:UART1中斷服務程序。
* 入口參數:無
* 出口參數:無
* 說明:
****************************************************************************/
void __irq  UART1_Exception(void)
{
    uint8 IIR, temp;
    
    while(((IIR=U1IIR) & 0x01) == 0)
    {                                                   // 有中斷未處理完
        switch (IIR & 0x0e)
        {
            case 0x00:                                  // Modem狀態變化中斷
                if ((U1MSR & 0x80) != 0)
                {
                    ModemState = MODEM_CONNECT;
                }
                else
                {
                    ModemState = MODEM_CLOSE;
                }
                if ((U1MSR & 0x40) != 0)
                {
                    ModemState = MODEM_RING;
                }
                if ((U1MSR & 0x30) != 0x30)
                {
                    ModemState = NOT_FIND_MODEM;
                }
                break;
                
            case 0x04:                                  // 接收數據可用
                U1IER &= (~0x01);                       // 禁止接收及字符超時中斷
                break;
                    
            case 0x06:                                  // 接收線狀態
                temp = U1LSR;
                break;
                
            case 0x0c:                                  // 字符超時指示
                U1IER &= (~0x01);                       // 禁止接收及字符超時中斷
                break;
                
            default:
                break;
        }
    } 
    
    VICVectAddr = 0;      		// 通知中斷控制器中斷結束
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频在线一区| zzijzzij亚洲日本少妇熟睡| 亚洲美女电影在线| 国产精品久久毛片a| 国产精品毛片久久久久久久| 国产精品网站一区| 国产精品久久久久精k8| 亚洲少妇30p| 亚洲午夜av在线| 日韩中文字幕一区二区三区| 美女视频网站黄色亚洲| 国产资源在线一区| 不卡免费追剧大全电视剧网站| aaa欧美色吧激情视频| 欧美亚洲愉拍一区二区| 日韩三级在线免费观看| 国产偷v国产偷v亚洲高清| 国产精品久久久久久亚洲伦 | 国产片一区二区三区| 国产片一区二区| 亚洲午夜一区二区三区| 美女视频一区二区三区| 成人av在线观| 在线不卡的av| 欧美国产精品v| 亚洲aⅴ怡春院| 国产精品1区2区3区在线观看| 91在线看国产| 日韩视频免费观看高清完整版 | 在线看一区二区| 欧美不卡一区二区三区四区| 国产精品嫩草影院av蜜臀| 三级成人在线视频| hitomi一区二区三区精品| 欧美精品 日韩| 中文字幕一区二区三区精华液| 午夜久久久久久久久久一区二区| 国内精品视频666| 欧美中文字幕一区二区三区| 久久这里只有精品视频网| 一区二区三区自拍| 国产91精品免费| 在线成人av影院| 亚洲你懂的在线视频| 国产成人免费9x9x人网站视频| 欧美日韩日本视频| 国产精品久久久久久久久久久免费看 | 国产精品一区二区无线| 欧美精品自拍偷拍动漫精品| 亚洲国产成人午夜在线一区| 美女视频黄频大全不卡视频在线播放| 91在线视频免费91| 国产三级三级三级精品8ⅰ区| 日产精品久久久久久久性色| 在线一区二区视频| 国产精品伦一区二区三级视频| 精品一区二区三区视频在线观看 | 国产精品久久久99| 国产精品中文字幕一区二区三区| 91精品免费在线| 亚洲综合一区二区精品导航| 99热精品一区二区| 国产精品久久久久久久久搜平片| 国产制服丝袜一区| 精品免费日韩av| 免费观看一级欧美片| 欧美夫妻性生活| 天天影视涩香欲综合网| 欧美性猛交xxxx乱大交退制版 | 岛国精品在线播放| 国产欧美日韩一区二区三区在线观看| 捆绑调教美女网站视频一区| 91麻豆精品91久久久久久清纯| 亚洲韩国精品一区| 欧美精品久久99久久在免费线| 亚洲自拍偷拍av| 欧美日韩在线电影| 亚洲18色成人| 91精品国产91热久久久做人人 | 久久久高清一区二区三区| 麻豆成人免费电影| 久久众筹精品私拍模特| 国产不卡视频在线观看| 国产欧美久久久精品影院| 成人美女视频在线观看18| 国产精品免费人成网站| 色婷婷综合在线| 三级精品在线观看| 亚洲精品一区二区三区99| 国产 欧美在线| 亚洲同性同志一二三专区| 欧美亚洲国产一区二区三区| 天堂资源在线中文精品| 精品粉嫩aⅴ一区二区三区四区| 国产一区二区免费在线| 中文字幕一区二区三区不卡| 在线亚洲一区二区| 另类小说图片综合网| 久久免费美女视频| 色婷婷久久一区二区三区麻豆| 亚洲无线码一区二区三区| 日韩欧美的一区| 成人免费毛片嘿嘿连载视频| 一区二区三区免费看视频| 欧美一区二区在线免费播放 | 国产精品高潮久久久久无| 精品视频免费看| 国产真实精品久久二三区| 亚洲日本电影在线| 日韩女同互慰一区二区| av一本久道久久综合久久鬼色| 亚洲一区二区三区三| 亚洲欧洲日韩综合一区二区| 91久久精品日日躁夜夜躁欧美| 日韩精品一二三四| 亚洲日韩欧美一区二区在线| 欧美肥大bbwbbw高潮| 99精品国产视频| 激情久久五月天| 亚洲一区在线播放| 亚洲欧洲日韩在线| 久久久国产综合精品女国产盗摄| 欧美无砖专区一中文字| 成人激情免费网站| 久久99精品久久久久久动态图| 一区二区三区四区乱视频| 国产日韩高清在线| 日韩精品一区二区三区中文不卡 | 菠萝蜜视频在线观看一区| 日日摸夜夜添夜夜添精品视频| 综合亚洲深深色噜噜狠狠网站| 欧美大片顶级少妇| 在线播放国产精品二区一二区四区| 国产成人av一区二区三区在线观看| 美女视频黄频大全不卡视频在线播放| 一区二区理论电影在线观看| 国产精品欧美精品| 久久久久88色偷偷免费| 日韩欧美第一区| 日韩欧美一二三| 在线电影一区二区三区| 欧美日韩在线播放一区| 色综合久久久久综合99| 99久久亚洲一区二区三区青草| 国产sm精品调教视频网站| 国内精品国产三级国产a久久| 久久精品国产99国产| 蜜臀a∨国产成人精品| 久久精品国产亚洲a| 亚洲成a人v欧美综合天堂下载| 亚洲一区日韩精品中文字幕| 亚洲一区二区三区视频在线播放| 亚洲激情图片小说视频| 亚洲制服丝袜av| 午夜久久久久久电影| 亚洲国产视频a| 奇米在线7777在线精品| 蜜桃精品视频在线| 国产一区二区在线视频| 国产91综合一区在线观看| 大胆亚洲人体视频| 色综合久久九月婷婷色综合| 91高清视频在线| 欧美日韩高清一区二区| 91精品久久久久久久99蜜桃 | 91蝌蚪porny| 欧美私人免费视频| 日韩一区二区免费电影| 久久青草欧美一区二区三区| 欧美激情艳妇裸体舞| 一区二区三区四区亚洲| 日本中文字幕一区二区视频 | 91啪亚洲精品| 欧美日韩你懂得| 精品成人一区二区三区四区| 国产精品理论在线观看| 亚洲成人av电影在线| 国产一区二区三区免费看| 91一区二区三区在线观看| 6080午夜不卡| 亚洲国产精品成人综合色在线婷婷| 日韩理论在线观看| 蜜臀av亚洲一区中文字幕| 成人中文字幕在线| 欧美精品久久一区二区三区| 久久久777精品电影网影网| 一区二区三区国产精华| 男男成人高潮片免费网站| 国产成人自拍网| 欧美色图免费看| 国产午夜久久久久| 婷婷综合在线观看| 成人av电影在线观看| 日韩网站在线看片你懂的| 一区免费观看视频| 国内精品第一页| 欧美精品色一区二区三区| 国产精品久久久久一区二区三区共| 偷偷要91色婷婷| 99re热视频精品|