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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? modem.c

?? 周立功《ARM與嵌入式系統(tǒng)基礎(chǔ)教程》第5章
?? C
字號:
/****************************************************************************
* 文件名:MODEM.C
* 功能:MODEM驅(qū)動程序。
* 說明:基于LPC2100、LPC2200系列ARM7微控制器的UART1
****************************************************************************/
#define IN_MODEM
#include "config.h"

static volatile uint8  ModemState=NOT_INIT_MODEM;	// 定義MODEM狀態(tài)變量


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

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


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

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


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


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

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

    return(rt);
} 


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


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

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

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


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


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

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


/****************************************************************************
* 名稱:UART1_Exception()
* 功能:UART1中斷服務(wù)程序。
* 入口參數(shù):無
* 出口參數(shù):無
* 說明:
****************************************************************************/
void __irq  UART1_Exception(void)
{
    uint8 IIR, temp;
    
    while(((IIR=U1IIR) & 0x01) == 0)
    {                                                   // 有中斷未處理完
        switch (IIR & 0x0e)
        {
            case 0x00:                                  // Modem狀態(tài)變化中斷
                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:                                  // 接收數(shù)據(jù)可用
                U1IER &= (~0x01);                       // 禁止接收及字符超時(shí)中斷
                break;
                    
            case 0x06:                                  // 接收線狀態(tài)
                temp = U1LSR;
                break;
                
            case 0x0c:                                  // 字符超時(shí)指示
                U1IER &= (~0x01);                       // 禁止接收及字符超時(shí)中斷
                break;
                
            default:
                break;
        }
    } 
    
    VICVectAddr = 0;      		// 通知中斷控制器中斷結(jié)束
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区在线| 成人深夜视频在线观看| 久久精品欧美日韩| 亚洲精品免费在线播放| 国产精品欧美久久久久无广告| www国产精品av| 精品国产91九色蝌蚪| 欧美成人在线直播| 26uuu国产在线精品一区二区| 欧美一区二区三区在线观看 | 亚洲夂夂婷婷色拍ww47| 亚洲亚洲人成综合网络| 亚洲成a人片在线不卡一二三区| 亚洲福利视频导航| 美女一区二区三区| 国产制服丝袜一区| 99国产精品国产精品毛片| 色综合色狠狠综合色| 欧美精选一区二区| 2020国产精品自拍| 国产清纯美女被跳蛋高潮一区二区久久w | 男男视频亚洲欧美| 国产麻豆精品theporn| www.亚洲在线| 欧美精品v日韩精品v韩国精品v| 日韩亚洲国产中文字幕欧美| 26uuu国产一区二区三区| 《视频一区视频二区| 视频一区二区三区在线| 成熟亚洲日本毛茸茸凸凹| 日本道免费精品一区二区三区| 91精品国产色综合久久ai换脸| 久久精品亚洲国产奇米99| 亚洲夂夂婷婷色拍ww47| 国产精品18久久久久久久久久久久 | 日韩免费高清视频| 中文字幕在线不卡一区二区三区| 天天综合网 天天综合色| 国产成人精品1024| 欧美精品一二三| 国产精品免费观看视频| 视频一区视频二区在线观看| av激情成人网| 日韩精品一区二区三区老鸭窝 | 欧美久久久久久蜜桃| 国产精品久久久久久亚洲毛片| 香港成人在线视频| 99久久夜色精品国产网站| 精品国产亚洲在线| 亚洲午夜精品久久久久久久久| 福利91精品一区二区三区| 日韩亚洲欧美成人一区| 一区二区三区高清不卡| 成人午夜看片网址| 2023国产精华国产精品| 日本vs亚洲vs韩国一区三区二区 | 日本欧美在线看| 91免费视频观看| 国产精品乱码妇女bbbb| 紧缚捆绑精品一区二区| 日韩一区二区电影| 亚洲高清免费观看 | 粉嫩av亚洲一区二区图片| 欧美一区二区在线观看| 一区二区三区加勒比av| 91啪九色porn原创视频在线观看| 日韩三级免费观看| 亚洲国产一区二区视频| 在线观看视频一区| 中文av一区二区| 日韩成人伦理电影在线观看| 成人91在线观看| 国产精品久久久久永久免费观看 | 欧美一区二区三区视频免费| 亚洲成人你懂的| 51精品国自产在线| 日韩主播视频在线| 制服丝袜亚洲精品中文字幕| 五月婷婷色综合| 欧美性猛交xxxx黑人交| 亚洲人成影院在线观看| 日本久久电影网| 亚洲国产另类av| 欧美一区二区精品久久911| 奇米在线7777在线精品| 久久亚洲一级片| 本田岬高潮一区二区三区| 亚洲男女毛片无遮挡| 欧美日韩在线一区二区| 日韩和欧美一区二区| 欧美zozo另类异族| 成人午夜视频福利| 亚洲午夜影视影院在线观看| 这里只有精品免费| 国产精品一区二区久激情瑜伽| 国产精品久久久久婷婷| 欧洲精品一区二区| 免费高清不卡av| 久久女同互慰一区二区三区| 成人不卡免费av| 婷婷丁香激情综合| 久久久久综合网| 色av成人天堂桃色av| 三级不卡在线观看| 国产亚洲欧美一级| 欧美在线一区二区| 国产精品99久久久久久似苏梦涵 | 成人国产一区二区三区精品| 亚洲黄色尤物视频| 久久综合久久综合亚洲| 色婷婷国产精品综合在线观看| 秋霞电影一区二区| 亚洲素人一区二区| 精品国产免费视频| 欧美午夜免费电影| 成人蜜臀av电影| 日韩高清在线不卡| 一区二区三区视频在线观看| 欧美大片日本大片免费观看| 一本大道av一区二区在线播放| 久久99精品久久久久久| 洋洋av久久久久久久一区| 久久久噜噜噜久久中文字幕色伊伊| 欧美自拍丝袜亚洲| 不卡一区在线观看| 国产精品白丝jk白祙喷水网站| 日韩二区三区在线观看| 亚洲美女偷拍久久| 国产欧美一区在线| 欧美成人一区二区三区在线观看 | 国产91丝袜在线18| 久久精工是国产品牌吗| 亚洲成av人综合在线观看| 亚洲欧洲av在线| 亚洲国产精品国自产拍av| 精品伦理精品一区| 51久久夜色精品国产麻豆| 欧美日韩免费在线视频| 99国产精品久久久| 99久久久久久| av不卡在线播放| 成人av资源网站| 粗大黑人巨茎大战欧美成人| 国产丶欧美丶日本不卡视频| 久久99精品一区二区三区三区| 日韩国产成人精品| 裸体歌舞表演一区二区| 久久黄色级2电影| 另类成人小视频在线| 久久国产剧场电影| 精品无人码麻豆乱码1区2区| 韩国三级在线一区| 国产精品一区二区三区乱码| 国产在线播放一区| 国产成人精品免费在线| 丁香婷婷综合网| 99国产精品久久久久久久久久| 91一区二区在线| 欧美三级电影一区| 欧美美女视频在线观看| 日韩三级在线免费观看| 久久久99精品久久| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品一区一区三区| 成人高清视频在线| 91免费视频观看| 91精品啪在线观看国产60岁| 欧美成人a∨高清免费观看| 日韩欧美国产麻豆| 国产精品视频观看| 亚洲老妇xxxxxx| 亚洲国产综合91精品麻豆| 亚洲欧美乱综合| 丝袜脚交一区二区| 精品一区二区免费在线观看| 国产精品66部| 99久久婷婷国产综合精品| 欧美日本韩国一区二区三区视频| 日韩一区二区在线看片| 欧美国产成人精品| 午夜精品视频在线观看| 国产麻豆精品视频| 欧美日韩在线三级| 国产三级一区二区| 视频一区二区三区入口| 懂色av中文字幕一区二区三区 | 色综合色综合色综合色综合色综合 | 亚洲影院免费观看| 精品在线一区二区三区| 成人av资源网站| 欧美一区二区三区视频免费播放 | 欧美一级片免费看| 亚洲欧洲99久久| 精油按摩中文字幕久久| 色偷偷久久一区二区三区| 欧美成人女星排行榜| 亚洲第一会所有码转帖| 不卡的av电影| 欧美精品一区二区三区蜜桃 | 99久久久久久|