/****************************************************************************
* 文件名: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中断服务程序。
* 入口参数:无
* 出口参数:无
* 说明:
*******************************
没有合适的资源?快使用搜索试试~ 我知道了~
smartarm2200基础实验全部资源
共502个文件
scf:126个
s:113个
h:104个
需积分: 12 15 下载量 137 浏览量
2009-07-25
03:01:24
上传
评论
收藏 7.88MB RAR 举报
温馨提示
smartarm2200基础实验.rar smartarm2200基础实验.rar smartarm2200基础实验.rar smartarm2200基础实验.rar smartarm2200基础实验.rar smartarm2200基础实验.rar smartarm2200基础实验.rar
资源推荐
资源详情
资源评论
收起资源包目录
smartarm2200基础实验全部资源 (502个子文件)
main.c 9KB
modem.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
target.c 9KB
I2CINT.c 8KB
I2CINT.c 8KB
I2CINT.c 8KB
I2CINT.c 8KB
sendrtca.c 7KB
sendrtc.c 7KB
iaptest.c 7KB
main.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
target.c 6KB
sendrtcb.c 6KB
zlg7290.c 6KB
main.c 5KB
ReadKey.c 5KB
main.c 5KB
main.c 5KB
main.c 4KB
main.c 4KB
CAT24WC02.C 3KB
main.c 3KB
main.c 3KB
main.c 3KB
main.c 3KB
wake.c 3KB
main.c 3KB
main.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
main.c 2KB
TimeCiir.c 2KB
main.c 1KB
LedCon.c 1KB
main.c 1KB
main.c 1KB
main.c 1KB
main.c 1KB
TEST.C 268B
TEST.C 220B
第2章基础实验目录结构.doc 21KB
EasyARM-C.exe 231KB
EasyARM-E.exe 231KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
LPC2294.h 35KB
共 502 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
zwl897041054
- 粉丝: 1
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功