PC与ARM嵌入式系统间串口通信功能的实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+5V C 54
1ut TX D SA TX D SB R X D SA
R X D SB
C 42 1uf +
陈竞:硕士生
中国自控网:http://www.a utocontrol.com.cn
- 56 - 120 元 / 年 邮局订阅号:82-946
3 串口通信模块程序设计
我们在 ARM 嵌入式系统串口通信模块的开发过
定接收或发送缓存大小后不需要再占用 ARM 内核,
{
自动接收或发送数据的控制方式。驱动函数编写相对
//如果上次包发送成功但握手失败的情况下
简单,在此就不具体说明,如果需要了解请查询请参
if(Backpackage.MSGID ! = recpackage.MSGID)
考文献。
Check = CMDCheck(&recpackage);
3 仿真结果
社,2003 [2]Bhasker J. Verilog HDL Synthesis A Practical primer[M]. London, UK: Star Galaxy; 1998. [3]Liakot Ali,Roslina Sidek,Ishak Aris,Alauddin Mohd. Ali,Bambang Sunaryo Suparjo.Design of a micro - UART for SoC application [J].In: Computers and Electrical Engineering 30 (2004) 257–268.
P22/R X D 1 R 2O U T R 2IN GND VEE
P24/B M S 78 P24/B M S 79 P25/M C K O
P25/M C K O
M A X 232
P26/N C S2 80 P26/N C S2
A T91M 40800 R S232接口
图 1 系统框图
C 41 1uf
COM_PDC_Recv (Com, &recpackage, sizeof(rec- 了的函数,一定要在使用完毕后使用 free 函数释放空
package));
间,否则可能引起内存泄漏,系统崩溃。
while(! COM_CheckENDRX(Com))
第三,如果在一些经常调用且需要快速处理的模
{
块,考虑使用汇编完成。
}
PacketSendStruct recpackage; PacketBackStruct Backpackage;
4 开发体会
按上位机和下位机约定的波特率打开选定串口
笔者在使用 IAR 开发 ARM 串口通信模块时有以
后,采用下位机等待接收,上位机主动发包的方式,代 下几点开发体会:
码如下:
第一,对于嵌入式系统,特别是没有内存管理模
AT91M40800 芯片(ARM7TDMI 内核)为主芯片的嵌入
式系统进行软件开发,获得了成功,此文重点介绍其
中的串口通信模块设计方案和具体实现。
2 系统框图简介
AT91M40800 芯片带有 USART 接口,芯片具体资 料请查阅参考资料,在此使用 USART 接口与 MAX232 芯片实现串口功能,系统框图如下图 1 所示。
} else //校验失败继续
术
char Data[MAX_SIZE_PAGE]; //数据包所带内容 {
创
unsigned Verify; //校验位
VerifyData = 0;
} PacketSendStruct; //上位机发送包结构
TimeFlage++;
新
typedef struct
if(TimeFlage>=RetryTime)
{
return;
unsigned short MSGID;
//应 答 包 标 号 ,
continue;
一般等于最近接收正确包标号
}
unsigned short BackData;
//应答控制命令
//将所得信息按照要求进行处理
unsigned Verify;
//校验位
..........
} PacketBackStruct;
#ifdef USE_WD
第四,在 IAR 使用 release 方式编译完毕后,会在
WD_Reset();
此工程目录下生成 release 目录,此目录下的 exe 目录
#endif
即生成目标文件,而 list 目录下的 *.map 文件包含了
}
按照内存配置文件编译后目标文件的具体内存使用
情况,可以参照里面的信息判断是否存在(见 113 页)
67 P13/SC K 0 P13/SC K 0
P14/TX D 0/N TR 0 68 P14/TX D 0
C 40
P15/R X D 0 69 P13/R X D 0
1uf
C 1+ V D D
P16 70 P16
C 1- V C C
P17 71 P17 P18 72 P18
73 P19 P19
1uf
文 献 标 识 码 :A
文章编号:1008- 0570(2005)8- 2- 0056- 02
Abstr act: Embedded system often needs serial port communica-
tion in industry controlling condition. This paper will show how
您的论文得到两院院士关注
中文核心期刊《 微计算机信息》(嵌入式与 S O C )2005 年第 21 卷第 8-2 期
PC与 ARM 嵌入式系统间串口通信功能的实现
S e ria l Po rt Co m m u n ica tio n Be tw e e n PC a n d ARM Em b e d d e d S ys te m
统的堆栈空间有限且不能由操作系统负责回收调度,
所以 malloc、free 这样的函数使用必须非常谨慎;同时
也尽量不要多层函数嵌套和递归,否则可能造成堆栈
溢出,引起程序异常。
显示通道选择菜单
设置滚屏
等待按键
COM 1 COM 2
是
上下键 按下何键 E SC 返回
E ruter
设置通过相应 通道接收数据
C 2+
C
53
P14/TX
D
0
C 2- T1IN
T10U T
P20/SC K 1 74 P20/SC K 1
P21/TX D 1/N TR 1 T2IN T2O U T
P21/TX D 1/N TR 1 75 P21/TX D 1/N TR 1 P15/R X D 0 R 1O U T R 1IN
P22/R X D 1 76 P22/R X D 1 P23 77 P23
技 to use the IAR ARM C- SPY Macraigor JTAG driver and how to
communicate with PC without operating system supporting.
术 Key wor ds: embedded system; ARM; ser ial por t communica- tion
创
新
1 引言
在当前嵌入式系统设计中,以 ARM 为内核的处
理器芯片已经成为了开发的主流。为了降低开发成本
和开发难度,常选择不加载操作系统。本文选择 IAR
(IAR Embedded Workbench)开发平台,在不加载操作
系 统 的 前 提 下 , 使 用 C 语 言 对 以 ATMEL 公 司 的
程中,采用了 IAR(IAR Embedded Workbench)开发平
台。使用 IAR 集成交叉开发环境 C 语言设计开发与
PC 上的 C 语言程序设计开发有许多不同之处。虽然
IAR 提供了大部分的标准 C 语言函数库(包括 stdio、
string、math、stdlib 等),但由于没有操作系统支持,系
因为下位机 ARM 运行速度大大低于上位机 PC,
//根据控制命令进行控制
所以这里串口通信采用了上位机主动发包,下位机等
if((Check == CMDDOWNFINISH) ||
待的方式。下位机和上位机软件流程图如图 2 所示:
((recpackage.CMD&CMDDOWNFINISH) ==
在这里为了达到通信要求我们自定义了通信数 CMDDOWNFINISH))
电 话 :010-62132436 ,62192616(T/F ) 《 现场总线技术应用 200 例》
中国自控网:http://www.a utocontrol.cn
邮局订阅号:82-946 120 元 / 年 - 57 -
P LD/CP LD/FP GA设计应用
您的论文得到相关企业家品评
控制信号复杂,设计难度大,调试不方便,所以在大规 模数字电路设计中显得很不适用。而利用状态机实现 正好克服了这些缺点,明显加快了设计流程,是复杂 系统设计的重要手段。
电 话 :010-62132436 ,62192616(T/F ) 《 变频器与软启动器应用 200 例》
AR M应 用
您的论文得到相关企业家品评
发送 COM_PDC_Send()、PDC 模式接收 COM_PDC_
for (i = 0; i < sizeof (PacketSendStruct)/sizeof(un-
(华中科技大学)陈 竞 刘 玉 熊 祖 彪
Chen ,J ing Liu ,Yu Xiong ,Zubiao
摘 要 :在 工 业 控 制 场 合 ,常 会 要 求 嵌 入 式 微 机 系 统 实 现 串 口
通 信 的 功 能 , 介 绍 IAR 软 件 平 台 和 简 易 JTAG 进 行 ARM 内
核 的 嵌 入 式 系 统 开 发 。 我 们 用 ATMEL 公 司 AT91M40800 搭
建一个嵌入式微机系统,圆满实现了没有操作系统支持的
串 口 通 信 功 能 ,文 中 详 细 介 绍 了 具 体 实 现 方 法 。
关 键 词 :嵌 入 式 系 统 ,AR M ,串 口 通 信
中 图 分 类 号 :T P 273+.5
unsigned *pSend = (unsigned *) &recpackage;
块(MMU)的 ARM7TDMI 内核系统,不要轻易申请类
...........
似 int buffer[2048] 这样的空间,开销太大,一下子申请
while(1)
这么大的栈可能造成系统崩溃。
{
第二,如果使用了 malloc 这样虽然 IAR 已经提供
{
(Backpackage));
unsigned short MSGID; //发送包标号 unsigned short CMD; //控制命令标识此包的内容
.............. }
技
unsigned short DataStart; //数据包起始 unsigned short DataLength; //数据包长度
是否 E SC 否
有 有键按下? 无否
接收完一帧?
处理帧数据
发送应答数据包 下位机
写入要发送的 命令入数据
发送数据包
接收数据包
否
否
正确接收包
是否超时
是 返回成功
是 返回失败
上位机
图 2 软件流程
在我们选用的 AT91M40800 芯片本身带有双 US- ART 接口,配合串行接口芯片 MAX232 共同实现串口 功能。要完成串口通信必先编写的驱动函数如:打开 串口 COM_Ope( n )、关闭串口 COM_Clos(e )、PDC 模式
Rec(v )、判断采用 PCD 方式是否发送或接受数据完毕 signed) - 1 ; i++)
的 COM_CheckENDRX()和 COM_CheckENDTX()等。
VerifyData ^= *pSend ++;
其中 PDC 模式类似电脑中经常使用到的 DMA,在设
if(recpackage.Ver百度文库fy==VerifyData) //比较校验位
状态寄存器模块的 8 位输出中低 4 位将 UART 的工作状态提供给 CPU 读取,从低到高分别表示正在 发送、正在接收、发送完成和接收完成。
2.5 CPU 接口模块 该模块是 UART 与 CPU 相交互的部分,通过该模 块,在 CPU 的控制信号 C 和外部读写信号 WR 以及 片选信号 CS 的共同作用下,向 UART 发出清除中断 信号,写使能信号和开始发送信号。同样也是利用有 限状态机来实现。
据包, 其中 MAX_SIZE_PAGE 与波特率正比的一个常
{
数,用于保证不同波特率下串口调整传送包大小,提
Backpackage.MSGID = recpackage.MSGID;
高传输效率。
SendBack(Check);
typedef struct
COM_PDC_Send(Com, &Backpackage,sizeof
1ut TX D SA TX D SB R X D SA
R X D SB
C 42 1uf +
陈竞:硕士生
中国自控网:http://www.a utocontrol.com.cn
- 56 - 120 元 / 年 邮局订阅号:82-946
3 串口通信模块程序设计
我们在 ARM 嵌入式系统串口通信模块的开发过
定接收或发送缓存大小后不需要再占用 ARM 内核,
{
自动接收或发送数据的控制方式。驱动函数编写相对
//如果上次包发送成功但握手失败的情况下
简单,在此就不具体说明,如果需要了解请查询请参
if(Backpackage.MSGID ! = recpackage.MSGID)
考文献。
Check = CMDCheck(&recpackage);
3 仿真结果
社,2003 [2]Bhasker J. Verilog HDL Synthesis A Practical primer[M]. London, UK: Star Galaxy; 1998. [3]Liakot Ali,Roslina Sidek,Ishak Aris,Alauddin Mohd. Ali,Bambang Sunaryo Suparjo.Design of a micro - UART for SoC application [J].In: Computers and Electrical Engineering 30 (2004) 257–268.
P22/R X D 1 R 2O U T R 2IN GND VEE
P24/B M S 78 P24/B M S 79 P25/M C K O
P25/M C K O
M A X 232
P26/N C S2 80 P26/N C S2
A T91M 40800 R S232接口
图 1 系统框图
C 41 1uf
COM_PDC_Recv (Com, &recpackage, sizeof(rec- 了的函数,一定要在使用完毕后使用 free 函数释放空
package));
间,否则可能引起内存泄漏,系统崩溃。
while(! COM_CheckENDRX(Com))
第三,如果在一些经常调用且需要快速处理的模
{
块,考虑使用汇编完成。
}
PacketSendStruct recpackage; PacketBackStruct Backpackage;
4 开发体会
按上位机和下位机约定的波特率打开选定串口
笔者在使用 IAR 开发 ARM 串口通信模块时有以
后,采用下位机等待接收,上位机主动发包的方式,代 下几点开发体会:
码如下:
第一,对于嵌入式系统,特别是没有内存管理模
AT91M40800 芯片(ARM7TDMI 内核)为主芯片的嵌入
式系统进行软件开发,获得了成功,此文重点介绍其
中的串口通信模块设计方案和具体实现。
2 系统框图简介
AT91M40800 芯片带有 USART 接口,芯片具体资 料请查阅参考资料,在此使用 USART 接口与 MAX232 芯片实现串口功能,系统框图如下图 1 所示。
} else //校验失败继续
术
char Data[MAX_SIZE_PAGE]; //数据包所带内容 {
创
unsigned Verify; //校验位
VerifyData = 0;
} PacketSendStruct; //上位机发送包结构
TimeFlage++;
新
typedef struct
if(TimeFlage>=RetryTime)
{
return;
unsigned short MSGID;
//应 答 包 标 号 ,
continue;
一般等于最近接收正确包标号
}
unsigned short BackData;
//应答控制命令
//将所得信息按照要求进行处理
unsigned Verify;
//校验位
..........
} PacketBackStruct;
#ifdef USE_WD
第四,在 IAR 使用 release 方式编译完毕后,会在
WD_Reset();
此工程目录下生成 release 目录,此目录下的 exe 目录
#endif
即生成目标文件,而 list 目录下的 *.map 文件包含了
}
按照内存配置文件编译后目标文件的具体内存使用
情况,可以参照里面的信息判断是否存在(见 113 页)
67 P13/SC K 0 P13/SC K 0
P14/TX D 0/N TR 0 68 P14/TX D 0
C 40
P15/R X D 0 69 P13/R X D 0
1uf
C 1+ V D D
P16 70 P16
C 1- V C C
P17 71 P17 P18 72 P18
73 P19 P19
1uf
文 献 标 识 码 :A
文章编号:1008- 0570(2005)8- 2- 0056- 02
Abstr act: Embedded system often needs serial port communica-
tion in industry controlling condition. This paper will show how
您的论文得到两院院士关注
中文核心期刊《 微计算机信息》(嵌入式与 S O C )2005 年第 21 卷第 8-2 期
PC与 ARM 嵌入式系统间串口通信功能的实现
S e ria l Po rt Co m m u n ica tio n Be tw e e n PC a n d ARM Em b e d d e d S ys te m
统的堆栈空间有限且不能由操作系统负责回收调度,
所以 malloc、free 这样的函数使用必须非常谨慎;同时
也尽量不要多层函数嵌套和递归,否则可能造成堆栈
溢出,引起程序异常。
显示通道选择菜单
设置滚屏
等待按键
COM 1 COM 2
是
上下键 按下何键 E SC 返回
E ruter
设置通过相应 通道接收数据
C 2+
C
53
P14/TX
D
0
C 2- T1IN
T10U T
P20/SC K 1 74 P20/SC K 1
P21/TX D 1/N TR 1 T2IN T2O U T
P21/TX D 1/N TR 1 75 P21/TX D 1/N TR 1 P15/R X D 0 R 1O U T R 1IN
P22/R X D 1 76 P22/R X D 1 P23 77 P23
技 to use the IAR ARM C- SPY Macraigor JTAG driver and how to
communicate with PC without operating system supporting.
术 Key wor ds: embedded system; ARM; ser ial por t communica- tion
创
新
1 引言
在当前嵌入式系统设计中,以 ARM 为内核的处
理器芯片已经成为了开发的主流。为了降低开发成本
和开发难度,常选择不加载操作系统。本文选择 IAR
(IAR Embedded Workbench)开发平台,在不加载操作
系 统 的 前 提 下 , 使 用 C 语 言 对 以 ATMEL 公 司 的
程中,采用了 IAR(IAR Embedded Workbench)开发平
台。使用 IAR 集成交叉开发环境 C 语言设计开发与
PC 上的 C 语言程序设计开发有许多不同之处。虽然
IAR 提供了大部分的标准 C 语言函数库(包括 stdio、
string、math、stdlib 等),但由于没有操作系统支持,系
因为下位机 ARM 运行速度大大低于上位机 PC,
//根据控制命令进行控制
所以这里串口通信采用了上位机主动发包,下位机等
if((Check == CMDDOWNFINISH) ||
待的方式。下位机和上位机软件流程图如图 2 所示:
((recpackage.CMD&CMDDOWNFINISH) ==
在这里为了达到通信要求我们自定义了通信数 CMDDOWNFINISH))
电 话 :010-62132436 ,62192616(T/F ) 《 现场总线技术应用 200 例》
中国自控网:http://www.a utocontrol.cn
邮局订阅号:82-946 120 元 / 年 - 57 -
P LD/CP LD/FP GA设计应用
您的论文得到相关企业家品评
控制信号复杂,设计难度大,调试不方便,所以在大规 模数字电路设计中显得很不适用。而利用状态机实现 正好克服了这些缺点,明显加快了设计流程,是复杂 系统设计的重要手段。
电 话 :010-62132436 ,62192616(T/F ) 《 变频器与软启动器应用 200 例》
AR M应 用
您的论文得到相关企业家品评
发送 COM_PDC_Send()、PDC 模式接收 COM_PDC_
for (i = 0; i < sizeof (PacketSendStruct)/sizeof(un-
(华中科技大学)陈 竞 刘 玉 熊 祖 彪
Chen ,J ing Liu ,Yu Xiong ,Zubiao
摘 要 :在 工 业 控 制 场 合 ,常 会 要 求 嵌 入 式 微 机 系 统 实 现 串 口
通 信 的 功 能 , 介 绍 IAR 软 件 平 台 和 简 易 JTAG 进 行 ARM 内
核 的 嵌 入 式 系 统 开 发 。 我 们 用 ATMEL 公 司 AT91M40800 搭
建一个嵌入式微机系统,圆满实现了没有操作系统支持的
串 口 通 信 功 能 ,文 中 详 细 介 绍 了 具 体 实 现 方 法 。
关 键 词 :嵌 入 式 系 统 ,AR M ,串 口 通 信
中 图 分 类 号 :T P 273+.5
unsigned *pSend = (unsigned *) &recpackage;
块(MMU)的 ARM7TDMI 内核系统,不要轻易申请类
...........
似 int buffer[2048] 这样的空间,开销太大,一下子申请
while(1)
这么大的栈可能造成系统崩溃。
{
第二,如果使用了 malloc 这样虽然 IAR 已经提供
{
(Backpackage));
unsigned short MSGID; //发送包标号 unsigned short CMD; //控制命令标识此包的内容
.............. }
技
unsigned short DataStart; //数据包起始 unsigned short DataLength; //数据包长度
是否 E SC 否
有 有键按下? 无否
接收完一帧?
处理帧数据
发送应答数据包 下位机
写入要发送的 命令入数据
发送数据包
接收数据包
否
否
正确接收包
是否超时
是 返回成功
是 返回失败
上位机
图 2 软件流程
在我们选用的 AT91M40800 芯片本身带有双 US- ART 接口,配合串行接口芯片 MAX232 共同实现串口 功能。要完成串口通信必先编写的驱动函数如:打开 串口 COM_Ope( n )、关闭串口 COM_Clos(e )、PDC 模式
Rec(v )、判断采用 PCD 方式是否发送或接受数据完毕 signed) - 1 ; i++)
的 COM_CheckENDRX()和 COM_CheckENDTX()等。
VerifyData ^= *pSend ++;
其中 PDC 模式类似电脑中经常使用到的 DMA,在设
if(recpackage.Ver百度文库fy==VerifyData) //比较校验位
状态寄存器模块的 8 位输出中低 4 位将 UART 的工作状态提供给 CPU 读取,从低到高分别表示正在 发送、正在接收、发送完成和接收完成。
2.5 CPU 接口模块 该模块是 UART 与 CPU 相交互的部分,通过该模 块,在 CPU 的控制信号 C 和外部读写信号 WR 以及 片选信号 CS 的共同作用下,向 UART 发出清除中断 信号,写使能信号和开始发送信号。同样也是利用有 限状态机来实现。
据包, 其中 MAX_SIZE_PAGE 与波特率正比的一个常
{
数,用于保证不同波特率下串口调整传送包大小,提
Backpackage.MSGID = recpackage.MSGID;
高传输效率。
SendBack(Check);
typedef struct
COM_PDC_Send(Com, &Backpackage,sizeof