实时操作系统VxWorks下多串口通讯设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期 : 2010- 06 - 21 作者简介 : 王立新 ( 1978 - ) , 男 , 硕士 研究生 , 主要 从事图 像处理、 系统控制等研究。
1 Vx W orks系统串口通信配置
1 . 1 串口工作模式 VxW orks操作系统 中的串 行设备 ( 终端 tty 设
73
先存储在缓冲区中, 当输入 NEWL INE 字符后 , 整行 字符 ( 包括 NEWL I NE 字符 ) 同时 导入环 形存储区 中。当从一个 tty 设备以线性模式进行读操作时, 根 据用户读操作缓冲区的容量 , 可以从环形存储区中 读取两行的字符信息。 1 . 2 串口参数选择 VxW orks实时操作系统通过 I/O 控制函数 io ctl ( ) 对串口参数进 行选择。串 口控制功能字如 表 1 所示。
应用领域。 Vx W orks实时操作系统具有良好的裁剪能力, 用户可通过交叉开发环境根据需求裁剪 组件 , 选择各种内核组件进行系统内核配置 , 编译系统内核时进行独立的加载和卸载 。 介绍了 基于 x86 平台的嵌入式 VxW orks系统与 PC 机多串口通信的实现方式以及串口通信的编程方法。 关键词: 多串口通信 ; VxW orks ; 实时操作系统
备 ), 属于含 buffer 的连续字节流设备, 每一个设备 各有一个在创建设备室分配的输入和输出环形缓冲 区。从一个 tty 设备读 /写数据实际上是从输入 /输 出环形缓冲期中读 /写数据。一个 tty 设备的工作模 式有两种 : 一种是原始模式 (非缓冲 型 ) ; 二是线性 模式。系统默认状态时是原始模式。 在原始模式下 , 每一个输入的字符一旦从输入 设备中输入, 接收方就立即获得该字符。在原始模 式下用户在 tty 设备上进行读操作时, 可以从输入环 形缓冲区中读取尽可能多的字符 ( 只是受用户输入 环形缓冲区大小 的限制 ) 。输入方式只能由 tty 设 备选项控制字改变。 在线 性 模 式 操 作 中, 首 先 所 有 输 入 的 字 符
表 1 串口控制功能字 功能字 FI O BAUDRA TE FI O CAN CEL FI O FLU S H FI OG ETNAM E FI O GETOPT I ON S FI ONR EAD FI ONW R I TE FI O SETO PTI ON S 功能 设置串口波特率 取消读写操作 清空输入缓冲和输出缓冲 得到文件设备名 返回当前的设备选项字 得到输入缓冲中未读取的字节数 得到输出缓冲中的字节数 设置设备选项字 图 1 多串口初始化流程
2 多串口初始化流程
基于 PC /104 模块的嵌入式系统 , 串行通信是 常用的通信方式之一。通过串行数据端口 , 可以实 现 PC /104 与 PC 机以及 PC /104 模块之间的通信。 本文采用盛博科技有限公司的 SE M /M SP - 12( A ) 嵌入式模块 , 在嵌入式系统中扩展 8 个以上的串行 端口, 实现多串口数据通信扩展设计。 VxW orks系统平台下多串口初始化操作流程如 图 1 所示。 74
中图分类号 : TP332
文献标识码 : A
文章编号 : 1009- 2552( 2010) 08- 0073- 03
实时操作系统 Vx W orks下多串口通讯设计
王立新, 马胜贤
( 光电系统信息控制技术国家级重点实验室 , 三河 065201)
摘
要: VxW orks是一种由 W in dR iv er公司开发的实时操作系统, 广泛地应用于各种嵌入式实时
图 2 多串口中断服务程序流程
RDA: IPort= sysInByte( Port+ 5); if ( IPort& 0x01 ) { W rk= sysInByte( P ort); if (! ( IPort& 0x04 ) ) { P r= pwk - > RXDR; Pw = pwk - > RX DW; p w k- > p RXD[ Pw ] = W rk ; Pw + + ; Pw& = pwk- > RXDS ; if ( Pw! } goto RDA; } AnyRC | = BIT; /* 置当前串口收到数据标志位 * / RCB it| = B I T; /* 置当前串口收到数据标志位 * / break ; case 0x06 : W rk= sysInByte( Port+ 5) ; } goto STA; EdA: sysOutB y te( I NTPTA, 0x20); sysOutB y te( I NTPTC, 0x20) ; }
1 . 3 串口数据读写 VxW orks实时操作系统可通过 se lect( ) 函数使 串口读写任务一直处于阻塞状态, 直到串口设备文 件准备好。通过 select宏实现对串口数据读写的监 测 , 即当在串口上有数据送来时或串口设备准备好 可以发送数据时 , Vx W orks实时操作系统通过 select 宏通知串口数据读写任务。 VxW orks提供的 select ( ) 函数有关宏定义如表 2所示。
Ab stract : VxW orks is a real t i m e operat io n syste m deve lo ped byW indR iver com pany , and is popular in m any e m bedded system s. Vx W orks RTOS has super io r clipping ab ility . User can c lip dow n g roupw are based on require m ents by using the T ornado cross developm en t env ironm en. t U ser con fig ures kernel facilities o f system by se lect ing som e of the K ernel facilit ie s , and all kerne l facilities can be independently conf ig ured in to the system. T he rea liza tio n w ays and prog ra mm in g m ethod of mu lt i serial comm unication bet w een em bedded Vx W orks system o f x86 operat ing platfor m and PC w as in troduced . Key words : m ulti seria l comm un icat ion; VxW orks ; rea l ti m e operatio n system ( RTOS)
0 引言
VxW orks是目前软件工程师采用最多的用于开 发实时嵌入式系统的商用实时操作系统。 Vx W orks 操作系统采用微内核设计 , 具有可伸缩性、 可裁减性 和高可靠性 , 适用于所有流行目标的 CPU 平台, 提 供了超过 1800 个应用编成接口, 用户可以根据自己 的需要对 Vx W orks进行配置。 V x W orks操作系统具 有良好的持续发展能力、 高性能的内核以及友好的 用户开发环境, 广泛地应用于通信、 军事、 航空和航 天等高精尖技术及实时性要求极高的领域中 , 如美 国的 F 16、 FA 18 战斗机、 B 2 隐形轰炸机和爱国者 导弹上 , 甚至在火星探测器上也使用了 V x W orks操 作系统。
实际使用中, CPU 板和串口板通过 PC104 总线 连接。本文仅对与串口相关的模块进行介绍。系统 串口板提供 8 个串行口 ( P1~ P8) , 分别完成不同的 数据通信功能。 SEM /M SP 12( A )串口通信模块, 在 板集成了两个单元高性能的 16C554 控制芯片 ( 相 当于 8 个 16C550) , 可以达到更高的通讯速率而无 需占用过多的 CPU 资源。 SEM /M SP 12( A) 模块中 , J3 、J4 为模 块的串行 端口。该模块 共有 8 个串口 , 每个串口有 16 字节 FI FO, 并且 RS232 /RS422 /RS485 可选 , 光 电隔离输 出, 在标 准 配 置下 可 达 115 . 2kbps ( 460 . 8kbps 可 选 ), 低 功 耗 单 + 5V 供 电 , 工 作 温 度 范 围 较 宽 ( - 55 ~ + 70 ), 串口 的基 地址系 统加 电时 从 EEPROM 中取数据配置 , 上电后可通过软件配置 , 八个串口占用一个系统中断资源。串口通讯模块采 用两块 16C554 芯片 , 每块芯片控制四个串口。 要正确使用每个串行口, 除了硬件跳线设置正 确外 , 还要 对 SEM /M SP 12 ( A ) 模 块 的 在板 EEP ROM 进行软件设置。每个串行口的基地址和中断 号设置均保存在 EEPROM 中 , 上电后模块将从中读 取这些数据, 并且中断号的软件设置要与硬件跳线 设置相一致。在本文中, 通过跳线设定串口通讯模 块的基地址为 0x380 , 中断向量为 IRQ9, 通过编程设 定串口的工作参数 : 波特率为 115200bps。
3 软件设计
软件采用 T ornado2 . 0 开发环境 , 可读性好 , 能 够方便移植到其他平台。串口通信程序中包含很多 模块 , 这里 以 SEM /M SP 12 ( A ) 模块多串口中 断服 务程序为例进行介绍, 多串口中断服务程序流程图 如图 2 所示。
sw itch( IP ort & 0x07 ) { case 0x00 : W rk = sysInByte ( Port + 6) ; break ; case 0x02 : Pr= pwk- > TXDR; Pw = pwk- > TXDW; if ( Pr ! = Pw ) { W rk= pw k- > pTXD[ P r]; P r+ + ; pwk- > TXDR= p w k- > TXDS & P r ; if ( Pr= = Pw ) sysOutB yte( Port+ 0x01 , 0x01); sysOutB y te( Po r, t W rk); } break ; case 0x04 :
( 下转第 79页 )
/* 多串口模块 M SP 12( A) 的中断服务程序* / vo id ne w _INTA _Server( vo id) { static char IPor, t W rk ; static in tPor, t PNo , Pr , Pw, B IT; static struct TPWK * p wk ; STA: IPort= sysInByte( B aseAddA + 0x02) ; if ( IPort= = 0) goto Ed A; BI T = 0x01; w hile( ( B I T & IP ort) = = 0) BIT < < = 1 ; sw itch( B IT ) { case 0x80 : PNo= 7 ; break ; case 0x40 : PNo= 6 ; break ; case 0x20 : PNo= 5 ; break ; case 0x10 : PNo= 4 ; break ; case 0x08 : PNo= 3 ; break ; case 0x04 : PNo= 2 ; break ; case 0x02 : PNo= 1 ; break ; case 0x01 : PNo= 0 ; break ; } Port= Port A dd[ PNo]; IPort= sysInByte( Port+ 2); if ( ( IP ort & 0x01) = = 0x01 ) goto STA; /* no IRQ * / p w k= & PWK[ PNo];
Fra Baidu bibliotek
D esign of multi serial comm unication in embedded real ti m e Vx W orks operating system
WANG L i x in, MA Sheng x ian
( National K ey Laboratory of E lectro Op tic Syste m, In for m ation Con tro l Technology, Sanhe 065201, Ch ina)
表 2 宏 FD _ZERO FD _SET FD _CLR FD _ISSET select宏 功能 所有位置零 置相应文件描述符的位 清除指定的位 若指定的位置 1 则返回 1, 否则返回 0
以上这些函数提供了对串口的有效控制 , 使得 嵌入式 VxW orks实时 操作系统具有复 杂的异步串 口处理能力。
1 Vx W orks系统串口通信配置
1 . 1 串口工作模式 VxW orks操作系统 中的串 行设备 ( 终端 tty 设
73
先存储在缓冲区中, 当输入 NEWL INE 字符后 , 整行 字符 ( 包括 NEWL I NE 字符 ) 同时 导入环 形存储区 中。当从一个 tty 设备以线性模式进行读操作时, 根 据用户读操作缓冲区的容量 , 可以从环形存储区中 读取两行的字符信息。 1 . 2 串口参数选择 VxW orks实时操作系统通过 I/O 控制函数 io ctl ( ) 对串口参数进 行选择。串 口控制功能字如 表 1 所示。
应用领域。 Vx W orks实时操作系统具有良好的裁剪能力, 用户可通过交叉开发环境根据需求裁剪 组件 , 选择各种内核组件进行系统内核配置 , 编译系统内核时进行独立的加载和卸载 。 介绍了 基于 x86 平台的嵌入式 VxW orks系统与 PC 机多串口通信的实现方式以及串口通信的编程方法。 关键词: 多串口通信 ; VxW orks ; 实时操作系统
备 ), 属于含 buffer 的连续字节流设备, 每一个设备 各有一个在创建设备室分配的输入和输出环形缓冲 区。从一个 tty 设备读 /写数据实际上是从输入 /输 出环形缓冲期中读 /写数据。一个 tty 设备的工作模 式有两种 : 一种是原始模式 (非缓冲 型 ) ; 二是线性 模式。系统默认状态时是原始模式。 在原始模式下 , 每一个输入的字符一旦从输入 设备中输入, 接收方就立即获得该字符。在原始模 式下用户在 tty 设备上进行读操作时, 可以从输入环 形缓冲区中读取尽可能多的字符 ( 只是受用户输入 环形缓冲区大小 的限制 ) 。输入方式只能由 tty 设 备选项控制字改变。 在线 性 模 式 操 作 中, 首 先 所 有 输 入 的 字 符
表 1 串口控制功能字 功能字 FI O BAUDRA TE FI O CAN CEL FI O FLU S H FI OG ETNAM E FI O GETOPT I ON S FI ONR EAD FI ONW R I TE FI O SETO PTI ON S 功能 设置串口波特率 取消读写操作 清空输入缓冲和输出缓冲 得到文件设备名 返回当前的设备选项字 得到输入缓冲中未读取的字节数 得到输出缓冲中的字节数 设置设备选项字 图 1 多串口初始化流程
2 多串口初始化流程
基于 PC /104 模块的嵌入式系统 , 串行通信是 常用的通信方式之一。通过串行数据端口 , 可以实 现 PC /104 与 PC 机以及 PC /104 模块之间的通信。 本文采用盛博科技有限公司的 SE M /M SP - 12( A ) 嵌入式模块 , 在嵌入式系统中扩展 8 个以上的串行 端口, 实现多串口数据通信扩展设计。 VxW orks系统平台下多串口初始化操作流程如 图 1 所示。 74
中图分类号 : TP332
文献标识码 : A
文章编号 : 1009- 2552( 2010) 08- 0073- 03
实时操作系统 Vx W orks下多串口通讯设计
王立新, 马胜贤
( 光电系统信息控制技术国家级重点实验室 , 三河 065201)
摘
要: VxW orks是一种由 W in dR iv er公司开发的实时操作系统, 广泛地应用于各种嵌入式实时
图 2 多串口中断服务程序流程
RDA: IPort= sysInByte( Port+ 5); if ( IPort& 0x01 ) { W rk= sysInByte( P ort); if (! ( IPort& 0x04 ) ) { P r= pwk - > RXDR; Pw = pwk - > RX DW; p w k- > p RXD[ Pw ] = W rk ; Pw + + ; Pw& = pwk- > RXDS ; if ( Pw! } goto RDA; } AnyRC | = BIT; /* 置当前串口收到数据标志位 * / RCB it| = B I T; /* 置当前串口收到数据标志位 * / break ; case 0x06 : W rk= sysInByte( Port+ 5) ; } goto STA; EdA: sysOutB y te( I NTPTA, 0x20); sysOutB y te( I NTPTC, 0x20) ; }
1 . 3 串口数据读写 VxW orks实时操作系统可通过 se lect( ) 函数使 串口读写任务一直处于阻塞状态, 直到串口设备文 件准备好。通过 select宏实现对串口数据读写的监 测 , 即当在串口上有数据送来时或串口设备准备好 可以发送数据时 , Vx W orks实时操作系统通过 select 宏通知串口数据读写任务。 VxW orks提供的 select ( ) 函数有关宏定义如表 2所示。
Ab stract : VxW orks is a real t i m e operat io n syste m deve lo ped byW indR iver com pany , and is popular in m any e m bedded system s. Vx W orks RTOS has super io r clipping ab ility . User can c lip dow n g roupw are based on require m ents by using the T ornado cross developm en t env ironm en. t U ser con fig ures kernel facilities o f system by se lect ing som e of the K ernel facilit ie s , and all kerne l facilities can be independently conf ig ured in to the system. T he rea liza tio n w ays and prog ra mm in g m ethod of mu lt i serial comm unication bet w een em bedded Vx W orks system o f x86 operat ing platfor m and PC w as in troduced . Key words : m ulti seria l comm un icat ion; VxW orks ; rea l ti m e operatio n system ( RTOS)
0 引言
VxW orks是目前软件工程师采用最多的用于开 发实时嵌入式系统的商用实时操作系统。 Vx W orks 操作系统采用微内核设计 , 具有可伸缩性、 可裁减性 和高可靠性 , 适用于所有流行目标的 CPU 平台, 提 供了超过 1800 个应用编成接口, 用户可以根据自己 的需要对 Vx W orks进行配置。 V x W orks操作系统具 有良好的持续发展能力、 高性能的内核以及友好的 用户开发环境, 广泛地应用于通信、 军事、 航空和航 天等高精尖技术及实时性要求极高的领域中 , 如美 国的 F 16、 FA 18 战斗机、 B 2 隐形轰炸机和爱国者 导弹上 , 甚至在火星探测器上也使用了 V x W orks操 作系统。
实际使用中, CPU 板和串口板通过 PC104 总线 连接。本文仅对与串口相关的模块进行介绍。系统 串口板提供 8 个串行口 ( P1~ P8) , 分别完成不同的 数据通信功能。 SEM /M SP 12( A )串口通信模块, 在 板集成了两个单元高性能的 16C554 控制芯片 ( 相 当于 8 个 16C550) , 可以达到更高的通讯速率而无 需占用过多的 CPU 资源。 SEM /M SP 12( A) 模块中 , J3 、J4 为模 块的串行 端口。该模块 共有 8 个串口 , 每个串口有 16 字节 FI FO, 并且 RS232 /RS422 /RS485 可选 , 光 电隔离输 出, 在标 准 配 置下 可 达 115 . 2kbps ( 460 . 8kbps 可 选 ), 低 功 耗 单 + 5V 供 电 , 工 作 温 度 范 围 较 宽 ( - 55 ~ + 70 ), 串口 的基 地址系 统加 电时 从 EEPROM 中取数据配置 , 上电后可通过软件配置 , 八个串口占用一个系统中断资源。串口通讯模块采 用两块 16C554 芯片 , 每块芯片控制四个串口。 要正确使用每个串行口, 除了硬件跳线设置正 确外 , 还要 对 SEM /M SP 12 ( A ) 模 块 的 在板 EEP ROM 进行软件设置。每个串行口的基地址和中断 号设置均保存在 EEPROM 中 , 上电后模块将从中读 取这些数据, 并且中断号的软件设置要与硬件跳线 设置相一致。在本文中, 通过跳线设定串口通讯模 块的基地址为 0x380 , 中断向量为 IRQ9, 通过编程设 定串口的工作参数 : 波特率为 115200bps。
3 软件设计
软件采用 T ornado2 . 0 开发环境 , 可读性好 , 能 够方便移植到其他平台。串口通信程序中包含很多 模块 , 这里 以 SEM /M SP 12 ( A ) 模块多串口中 断服 务程序为例进行介绍, 多串口中断服务程序流程图 如图 2 所示。
sw itch( IP ort & 0x07 ) { case 0x00 : W rk = sysInByte ( Port + 6) ; break ; case 0x02 : Pr= pwk- > TXDR; Pw = pwk- > TXDW; if ( Pr ! = Pw ) { W rk= pw k- > pTXD[ P r]; P r+ + ; pwk- > TXDR= p w k- > TXDS & P r ; if ( Pr= = Pw ) sysOutB yte( Port+ 0x01 , 0x01); sysOutB y te( Po r, t W rk); } break ; case 0x04 :
( 下转第 79页 )
/* 多串口模块 M SP 12( A) 的中断服务程序* / vo id ne w _INTA _Server( vo id) { static char IPor, t W rk ; static in tPor, t PNo , Pr , Pw, B IT; static struct TPWK * p wk ; STA: IPort= sysInByte( B aseAddA + 0x02) ; if ( IPort= = 0) goto Ed A; BI T = 0x01; w hile( ( B I T & IP ort) = = 0) BIT < < = 1 ; sw itch( B IT ) { case 0x80 : PNo= 7 ; break ; case 0x40 : PNo= 6 ; break ; case 0x20 : PNo= 5 ; break ; case 0x10 : PNo= 4 ; break ; case 0x08 : PNo= 3 ; break ; case 0x04 : PNo= 2 ; break ; case 0x02 : PNo= 1 ; break ; case 0x01 : PNo= 0 ; break ; } Port= Port A dd[ PNo]; IPort= sysInByte( Port+ 2); if ( ( IP ort & 0x01) = = 0x01 ) goto STA; /* no IRQ * / p w k= & PWK[ PNo];
Fra Baidu bibliotek
D esign of multi serial comm unication in embedded real ti m e Vx W orks operating system
WANG L i x in, MA Sheng x ian
( National K ey Laboratory of E lectro Op tic Syste m, In for m ation Con tro l Technology, Sanhe 065201, Ch ina)
表 2 宏 FD _ZERO FD _SET FD _CLR FD _ISSET select宏 功能 所有位置零 置相应文件描述符的位 清除指定的位 若指定的位置 1 则返回 1, 否则返回 0
以上这些函数提供了对串口的有效控制 , 使得 嵌入式 VxW orks实时 操作系统具有复 杂的异步串 口处理能力。