的串口通信软件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无 返回值
1
发送信息包 如果已经有一个信息包正在发送 函数会锁住直到信息包发送完毕 否则 函 数会立即返回 参数
send_buffer—包含要传送的信息包的缓冲区 buffer_length—发送缓冲区的长度 delay—在发送信息包之前要等待的字节时间
函数 pktXsend 的 cofunction 形式 当给定的信息包发送完毕以后函数将返回 参数
两种串口的支持软件可以应用在 Rabbit 上 循环缓冲程序或者是信息包驱动 所有 4 个 Rabbit 串口的循环缓冲区程序包含在所有的 Dynamic C 的版本中 当处于写的模式时 只有串口 D 采用信息包驱动程序而且驱动程序只有 版本 但是它将很快就能应用于所有常规 Dynamic C 的版本中的所有串口中 可以在本技术解答中的压缩文件中得到使用的信息包驱动库和例 题程序
信息包库的实现 对于 Dynamic C 7.03 信息包驱动功能只对串口 D 是可用的 而且只能在 模式下 这个 技术解答的压缩文件中能找到程序代码 要使用信息包驱动库 必须在文件 LIB.DIR 列出 PACKET.LIB
Rabbit 的信息包驱动处理在半双工和全双工的通道上传送和接收不同的信息包格式 驱动器 可以利用写入用户程序容易的调整使用各种形式的收发器硬件装置来处理传送和接收模式 之间的切换 下面是库能处理的 3 种信息包的基本类型
pktXinit( ) 初始化通信硬件 调用内部函数pktXopen
这个函数可以用C语言写成
pktXrx( ) 设置硬件为接收模式 这个函数必须由汇编语言来写 累加器A内部的所有寄
存器必须在最开始保留 在返回前存储
pktXtx( ) 设置硬件为发送模式 这个函数必须由汇编语言来写 寄存器使用的规则与
send_buffer—包含要传送的信息包的缓冲区 buffer_length—发送缓冲区的长度 delay—在发送信息包之前要等待的字节时间
准备驱动器来接收信息包 这个函数总是立即返回 然而只有当pktXreceiveDone( )函数的返 回值是真的时候系统才能使用缓冲区 参数
以下是模式配置函数的列表 它们完整的描述可以在 Dynamic C Premier User’s Manual 中找 到 • serXparity • serXdatabits
流量控制 经常有这种情况 系统不能以接收数据的速率来处理到达的数据 在处理能力上缓冲区能够
处理较短的失误 但是如果接收端不能一直持续接收数据缓冲区会被填满 当接收端能够 处理接收数据时它对信号的处理方法被称为流量控制 流量控制的两个基本方法是 XON/XOFF 方法和硬件方法 XON/XOFF 方法指定了两个字节值 它们分别为 XON 信号 和 XOFF 当接受端不能处理多余的数据时 它会发送一个 XOFF 控制字节 当接收端再次
读入函数返回 0 在间隙模式下 测试函数不使用 此项应该置 NULL 返回值
1 Rabbit2000 的波特率设置与输入波特率相同 0 Rabbit2000 波特率设置与输入波特率不匹配
设置驱动器使用第 9 位既可以作为校验位也可以作为第二个停止位 这只能用在 间隙 信 息包或者 开始字符 信息包里 参数
能够接收数据时 它发送一个 XON 字节 显然 发送的数据不能包含在控制字节种 硬件 流量控制依赖于附加的信号行 RTS 和 CTS 当数据发送时这些信号行位于两个系统中进 行标示
流量控制的实现 Rabbit 的串口驱动实现串口流量控制 驱动器被设定为 DTE data terminal equipment 数据 终端设备 意味着当准备好发送数据时 RTS 被 Rabbit 声称为输出量 而 CTS 则是输入量 负责监视当 Rabbit 连接上以后系统的准备状态 流量控制线 RTS/CTS 通常用宏定义#define 进行配置以此来指定那个端口和具体的那个位要使用 下面是对串口 D 进行 RTS/CTS 配置 的例子
电路缓冲区实现 电路缓冲串口程序最好的应用是 RS 232 串口驱动中断服务要求的中断时间在发送一个字 节时是 500 个周期 在接收一个字节时是 400 周期 串口驱动需要线路的缓冲区来临时放置 准备发送的数据以及已经接收但没有处理的数据 缓冲区的默认大小设定为 31 字节 这个 大小可以由宏定义 XINBUFSIZE 和 XOUTBUFSIZE 来改变 这里 X 代表串口 A B C 或者 D 有效的缓冲区大小是 2n – 1(比如 15 31 63 127)
用户定义函数 既然信息包驱动库可以由各种发送器的硬件使用 一些特定的函数必须由用户来定义 这些 函数包括 pktXinit( ), pktXrx( ), 和 pktXtx( ) 这里X代表A B C或者D 每个函数 都没有参数和返回值 这篇技术解答所带的例题代码可以实现pktXinit( ), pktXrx( ),和 pktXtx( )这些函数 这些程 序可以工作在JACKrabbit或Rabbit的核心模件RCM2000上
#define #define #define #define #define
SERD_RTS_PORT SERD_RTS_SHADOW SERD_RTS_BIT SERD_CTS_PORT SERD_CTS_BIT
PDBR PBDRShadow 6 PBDR 5
可实现的波特率 附录 波特率的速度测试 表示了两种不同速度的 Rabbit 底板在不同的情况下速度测试的 结果 最高的实际标准波特率依赖于一些因素 比如中断的等待时间影响其他中断驱动的执 行
mode 第 9 位比特特殊使用方法 PKT_NOPARITY—不使用第9位作任何特殊用途 8N1 模式 PKT_OPARITY—偶校验位 (8O1 模式) PKT_EPARITY—奇校验位(8E1 模式) PKT_TWOSTOP—使用第9位作为附加的停止位(8N2 模式)
返回值 无
使串口的中断服务程序不能工作 参数
• serXread • serXpeek • serXputc • serXputs • serXwrite
上述每个函数中 X 代表 A B C 或者 D 对应于指定的串口
使用 Cofunction 程序 完整的 Cofunction 设置存在于串口发送和接收程序中 当等待一个操作完成时这些程序会让 步于其他的程序 在一个设定的时间后如果没有接收到任何字符 则接收函数利用超时来退 出程序 关于优先多任务系统 这些函数也被认为是不可重入的 所以在一个特定的串口只 能有一个任务可以访问 下面是 Cofunction 发送和接收程序的列表 它们完整的描述可以在 Dynamic C Premier User’s Manual 中找到 • cof_serXgetc • cof_serXgets • cof_serXread • cof_serXputc • cof_serXputs • cof_serXwrite
有间隙的信息包 通过对于发送设置一定的长度形成间隙 以此来分隔信息包 第 9 位信息包 使用带有第 9 位的信息包来标示信息包的第一个字节 有开始字符的信息包 使用一个特殊的字节来标示信息包起始的信息包
有间隙的信息包和特殊字符模式的信息包都可以设定使用第 9 位作奇偶校验位或是附加的 停止位 半双工限制的优点在于能够在模拟高位第 9 位数据时驱动器的中断服务要求能暂时 提高波特率 这就允许了停止位接近一个数据位的真实时间而不是整个字节的长度 既然发 送器和接收器的逻辑电路都使用相同的波特率计数器 当字节出现的时候它们不能被正确传 送 因此只能允许使用半双工方式的通信
溢出缓冲区 溢出缓冲区是一个字节的数组 由信息包驱动使用 当没有用户提供的接收缓冲区可用时它 可以用来存储字节 一旦接收到完整的数据包 就不能将更多的字节写入到当前接收缓冲区
里 这时系统就将它们放入溢出缓冲区内 当下一次调用函数pktXreceive时 溢出缓冲区的 内容将复制到新的接收缓冲区内 溢出缓冲区的大小在编译时由宏定义XPKTBUFSIZE来设 置 这里X代表指定的串口(A,B,C,或者D).
wenku.baidu.com
pktXrx( )函数相同
函数列表 在这些函数中 X 是 A B C 或 D 中的任一个 对于 Dynamic C 来说 这些函数只对串口 D 可用 而且只在 模式下 本篇技术解答的压缩文件里有这些函数的代码
最大的波特率是 PCLK/32 低于 PCLK/32/256 的波特率 如果晶振频率是 7.373MHz 而双 倍时钟频率 PCLK 14.744MHz 那么波特率低于 1800 将改变 A1 定时器 影响 B 定时器 参数 baud 需要的波特率即每秒传送多少比特 mode 所用的信息报类型 有效的选项为
使用非 Cofunction 程序 在串口的库里 标准的发送和接收程序直到完成才能返回 或者在接收程序中当延时发生时 程序才能返回 这些函数依靠全局变量 它们都是不可重入的 因此 当在 uC/OS-II 或其 他的优先多任务系统中使用这些函数时 一个时间只有一个进程能在特定的串口使用 另外 串口的库和 uC/OS-II 是兼容的 下面是非 Cofunction 发送和接收程序的列表 它们完整的 描述可以在 Dynamic C Premier User’s Manual 中找到 • serXgetc
Rabbit 2000 的串口通信软件
介绍 串口通信是机器通信中应用最早也是最广泛的一种方式 它的基本概念是把一组数据分成单 个的比特位 然后通过一个单独的数字通道把比特一位一位发出去 许多串口依靠时钟通道 来协调每个比特的发送 这些接口称为同步接口 然而 大多数串口只是在固定的时间断发 送比特 接收端可以在同样的时间断对这些发送序列进行采样并重新得到这些比特 这些串 口称为异步串口 最常见的异步串口是 RS 232 和 RS 485 所有的这些串口使用同演的 数据格式仅仅只在电气说明上有所不同 数据格式我们称为 SPI serial peripheral interface 串口外围接口 由一个开始位 后面跟着的 7 到 9 位比特以及一位和 2 位停止位 高 1 组成 当通信线路空闲时 它处于高 1 的状态 因此 停止位可以被认为是要传送字节 间最短的空闲时间 在大多数情况下 只有 7 到 8 位的数据比特包含实际的数据 如果存在 附加位的话 被用来作校验位或者用来在信息包协议中作一帧的信号位 Rabbit 的串口驱动 可以被设定成能够使用大多数的选项
PKT_GAPMODE PKT_9BITMODE PKT_CHARMODE Options 信息包方案的更高级说明 它的值依赖于所用的模式; 间隙模式 最小的间隙大小 字节时间内 第 9 位模式 具有第 9 位协议类型 PKT_RABBITSTARTBYTE 信息包的第一个字节有低位第 9 位 其他字节是 8 位 PKT_LOWSTARTBYTE 信息包的第一个字节有低位第 9 位 其他字节有高位第 9 位 PKT_HIGHSTARTBYTE 信息包的第一个字节有高位第 9 位 其他字节有低位第 9 位 字符模式 由字符表示信息包的开始 test_packet 函数指针来检测信息包的结束 如果信息包结束函数返回 1 如果有新的数据
奇偶校验位和停止位 串口驱动可以被设置成下面 3 种形式的任意组合
7 或 8 位数据格式 奇校验 偶校验或者没有校验 1 或 2 位停止位 默认的格式是 8 位数据位和一个停止位 这就总共有 9 位 如果需要第 10 位 那么传送它 的时候需要一些特殊的处理 如果第 9 位是低位 第 10 位要用硬件进行处理 处理方法是 将一个字节写入特定的交换端口 如果第 9 位是高位 要采用一个个特殊的延迟方法 通常 停止位用于第 9 位高位数据位 一旦这个字节发送完毕为另一个字节创建了一个空闲状态后 发送器变得无效 这样在长的停止位后就创建了一个高位第 9 位 不幸的是 这就降低了数 据的吞吐量 会引起硬件问题 而这对于数据流之间的间隙是非常敏感的 接下来要描述的 串口库为半双工的通信提供了关于这个问题的解决方案
1
发送信息包 如果已经有一个信息包正在发送 函数会锁住直到信息包发送完毕 否则 函 数会立即返回 参数
send_buffer—包含要传送的信息包的缓冲区 buffer_length—发送缓冲区的长度 delay—在发送信息包之前要等待的字节时间
函数 pktXsend 的 cofunction 形式 当给定的信息包发送完毕以后函数将返回 参数
两种串口的支持软件可以应用在 Rabbit 上 循环缓冲程序或者是信息包驱动 所有 4 个 Rabbit 串口的循环缓冲区程序包含在所有的 Dynamic C 的版本中 当处于写的模式时 只有串口 D 采用信息包驱动程序而且驱动程序只有 版本 但是它将很快就能应用于所有常规 Dynamic C 的版本中的所有串口中 可以在本技术解答中的压缩文件中得到使用的信息包驱动库和例 题程序
信息包库的实现 对于 Dynamic C 7.03 信息包驱动功能只对串口 D 是可用的 而且只能在 模式下 这个 技术解答的压缩文件中能找到程序代码 要使用信息包驱动库 必须在文件 LIB.DIR 列出 PACKET.LIB
Rabbit 的信息包驱动处理在半双工和全双工的通道上传送和接收不同的信息包格式 驱动器 可以利用写入用户程序容易的调整使用各种形式的收发器硬件装置来处理传送和接收模式 之间的切换 下面是库能处理的 3 种信息包的基本类型
pktXinit( ) 初始化通信硬件 调用内部函数pktXopen
这个函数可以用C语言写成
pktXrx( ) 设置硬件为接收模式 这个函数必须由汇编语言来写 累加器A内部的所有寄
存器必须在最开始保留 在返回前存储
pktXtx( ) 设置硬件为发送模式 这个函数必须由汇编语言来写 寄存器使用的规则与
send_buffer—包含要传送的信息包的缓冲区 buffer_length—发送缓冲区的长度 delay—在发送信息包之前要等待的字节时间
准备驱动器来接收信息包 这个函数总是立即返回 然而只有当pktXreceiveDone( )函数的返 回值是真的时候系统才能使用缓冲区 参数
以下是模式配置函数的列表 它们完整的描述可以在 Dynamic C Premier User’s Manual 中找 到 • serXparity • serXdatabits
流量控制 经常有这种情况 系统不能以接收数据的速率来处理到达的数据 在处理能力上缓冲区能够
处理较短的失误 但是如果接收端不能一直持续接收数据缓冲区会被填满 当接收端能够 处理接收数据时它对信号的处理方法被称为流量控制 流量控制的两个基本方法是 XON/XOFF 方法和硬件方法 XON/XOFF 方法指定了两个字节值 它们分别为 XON 信号 和 XOFF 当接受端不能处理多余的数据时 它会发送一个 XOFF 控制字节 当接收端再次
读入函数返回 0 在间隙模式下 测试函数不使用 此项应该置 NULL 返回值
1 Rabbit2000 的波特率设置与输入波特率相同 0 Rabbit2000 波特率设置与输入波特率不匹配
设置驱动器使用第 9 位既可以作为校验位也可以作为第二个停止位 这只能用在 间隙 信 息包或者 开始字符 信息包里 参数
能够接收数据时 它发送一个 XON 字节 显然 发送的数据不能包含在控制字节种 硬件 流量控制依赖于附加的信号行 RTS 和 CTS 当数据发送时这些信号行位于两个系统中进 行标示
流量控制的实现 Rabbit 的串口驱动实现串口流量控制 驱动器被设定为 DTE data terminal equipment 数据 终端设备 意味着当准备好发送数据时 RTS 被 Rabbit 声称为输出量 而 CTS 则是输入量 负责监视当 Rabbit 连接上以后系统的准备状态 流量控制线 RTS/CTS 通常用宏定义#define 进行配置以此来指定那个端口和具体的那个位要使用 下面是对串口 D 进行 RTS/CTS 配置 的例子
电路缓冲区实现 电路缓冲串口程序最好的应用是 RS 232 串口驱动中断服务要求的中断时间在发送一个字 节时是 500 个周期 在接收一个字节时是 400 周期 串口驱动需要线路的缓冲区来临时放置 准备发送的数据以及已经接收但没有处理的数据 缓冲区的默认大小设定为 31 字节 这个 大小可以由宏定义 XINBUFSIZE 和 XOUTBUFSIZE 来改变 这里 X 代表串口 A B C 或者 D 有效的缓冲区大小是 2n – 1(比如 15 31 63 127)
用户定义函数 既然信息包驱动库可以由各种发送器的硬件使用 一些特定的函数必须由用户来定义 这些 函数包括 pktXinit( ), pktXrx( ), 和 pktXtx( ) 这里X代表A B C或者D 每个函数 都没有参数和返回值 这篇技术解答所带的例题代码可以实现pktXinit( ), pktXrx( ),和 pktXtx( )这些函数 这些程 序可以工作在JACKrabbit或Rabbit的核心模件RCM2000上
#define #define #define #define #define
SERD_RTS_PORT SERD_RTS_SHADOW SERD_RTS_BIT SERD_CTS_PORT SERD_CTS_BIT
PDBR PBDRShadow 6 PBDR 5
可实现的波特率 附录 波特率的速度测试 表示了两种不同速度的 Rabbit 底板在不同的情况下速度测试的 结果 最高的实际标准波特率依赖于一些因素 比如中断的等待时间影响其他中断驱动的执 行
mode 第 9 位比特特殊使用方法 PKT_NOPARITY—不使用第9位作任何特殊用途 8N1 模式 PKT_OPARITY—偶校验位 (8O1 模式) PKT_EPARITY—奇校验位(8E1 模式) PKT_TWOSTOP—使用第9位作为附加的停止位(8N2 模式)
返回值 无
使串口的中断服务程序不能工作 参数
• serXread • serXpeek • serXputc • serXputs • serXwrite
上述每个函数中 X 代表 A B C 或者 D 对应于指定的串口
使用 Cofunction 程序 完整的 Cofunction 设置存在于串口发送和接收程序中 当等待一个操作完成时这些程序会让 步于其他的程序 在一个设定的时间后如果没有接收到任何字符 则接收函数利用超时来退 出程序 关于优先多任务系统 这些函数也被认为是不可重入的 所以在一个特定的串口只 能有一个任务可以访问 下面是 Cofunction 发送和接收程序的列表 它们完整的描述可以在 Dynamic C Premier User’s Manual 中找到 • cof_serXgetc • cof_serXgets • cof_serXread • cof_serXputc • cof_serXputs • cof_serXwrite
有间隙的信息包 通过对于发送设置一定的长度形成间隙 以此来分隔信息包 第 9 位信息包 使用带有第 9 位的信息包来标示信息包的第一个字节 有开始字符的信息包 使用一个特殊的字节来标示信息包起始的信息包
有间隙的信息包和特殊字符模式的信息包都可以设定使用第 9 位作奇偶校验位或是附加的 停止位 半双工限制的优点在于能够在模拟高位第 9 位数据时驱动器的中断服务要求能暂时 提高波特率 这就允许了停止位接近一个数据位的真实时间而不是整个字节的长度 既然发 送器和接收器的逻辑电路都使用相同的波特率计数器 当字节出现的时候它们不能被正确传 送 因此只能允许使用半双工方式的通信
溢出缓冲区 溢出缓冲区是一个字节的数组 由信息包驱动使用 当没有用户提供的接收缓冲区可用时它 可以用来存储字节 一旦接收到完整的数据包 就不能将更多的字节写入到当前接收缓冲区
里 这时系统就将它们放入溢出缓冲区内 当下一次调用函数pktXreceive时 溢出缓冲区的 内容将复制到新的接收缓冲区内 溢出缓冲区的大小在编译时由宏定义XPKTBUFSIZE来设 置 这里X代表指定的串口(A,B,C,或者D).
wenku.baidu.com
pktXrx( )函数相同
函数列表 在这些函数中 X 是 A B C 或 D 中的任一个 对于 Dynamic C 来说 这些函数只对串口 D 可用 而且只在 模式下 本篇技术解答的压缩文件里有这些函数的代码
最大的波特率是 PCLK/32 低于 PCLK/32/256 的波特率 如果晶振频率是 7.373MHz 而双 倍时钟频率 PCLK 14.744MHz 那么波特率低于 1800 将改变 A1 定时器 影响 B 定时器 参数 baud 需要的波特率即每秒传送多少比特 mode 所用的信息报类型 有效的选项为
使用非 Cofunction 程序 在串口的库里 标准的发送和接收程序直到完成才能返回 或者在接收程序中当延时发生时 程序才能返回 这些函数依靠全局变量 它们都是不可重入的 因此 当在 uC/OS-II 或其 他的优先多任务系统中使用这些函数时 一个时间只有一个进程能在特定的串口使用 另外 串口的库和 uC/OS-II 是兼容的 下面是非 Cofunction 发送和接收程序的列表 它们完整的 描述可以在 Dynamic C Premier User’s Manual 中找到 • serXgetc
Rabbit 2000 的串口通信软件
介绍 串口通信是机器通信中应用最早也是最广泛的一种方式 它的基本概念是把一组数据分成单 个的比特位 然后通过一个单独的数字通道把比特一位一位发出去 许多串口依靠时钟通道 来协调每个比特的发送 这些接口称为同步接口 然而 大多数串口只是在固定的时间断发 送比特 接收端可以在同样的时间断对这些发送序列进行采样并重新得到这些比特 这些串 口称为异步串口 最常见的异步串口是 RS 232 和 RS 485 所有的这些串口使用同演的 数据格式仅仅只在电气说明上有所不同 数据格式我们称为 SPI serial peripheral interface 串口外围接口 由一个开始位 后面跟着的 7 到 9 位比特以及一位和 2 位停止位 高 1 组成 当通信线路空闲时 它处于高 1 的状态 因此 停止位可以被认为是要传送字节 间最短的空闲时间 在大多数情况下 只有 7 到 8 位的数据比特包含实际的数据 如果存在 附加位的话 被用来作校验位或者用来在信息包协议中作一帧的信号位 Rabbit 的串口驱动 可以被设定成能够使用大多数的选项
PKT_GAPMODE PKT_9BITMODE PKT_CHARMODE Options 信息包方案的更高级说明 它的值依赖于所用的模式; 间隙模式 最小的间隙大小 字节时间内 第 9 位模式 具有第 9 位协议类型 PKT_RABBITSTARTBYTE 信息包的第一个字节有低位第 9 位 其他字节是 8 位 PKT_LOWSTARTBYTE 信息包的第一个字节有低位第 9 位 其他字节有高位第 9 位 PKT_HIGHSTARTBYTE 信息包的第一个字节有高位第 9 位 其他字节有低位第 9 位 字符模式 由字符表示信息包的开始 test_packet 函数指针来检测信息包的结束 如果信息包结束函数返回 1 如果有新的数据
奇偶校验位和停止位 串口驱动可以被设置成下面 3 种形式的任意组合
7 或 8 位数据格式 奇校验 偶校验或者没有校验 1 或 2 位停止位 默认的格式是 8 位数据位和一个停止位 这就总共有 9 位 如果需要第 10 位 那么传送它 的时候需要一些特殊的处理 如果第 9 位是低位 第 10 位要用硬件进行处理 处理方法是 将一个字节写入特定的交换端口 如果第 9 位是高位 要采用一个个特殊的延迟方法 通常 停止位用于第 9 位高位数据位 一旦这个字节发送完毕为另一个字节创建了一个空闲状态后 发送器变得无效 这样在长的停止位后就创建了一个高位第 9 位 不幸的是 这就降低了数 据的吞吐量 会引起硬件问题 而这对于数据流之间的间隙是非常敏感的 接下来要描述的 串口库为半双工的通信提供了关于这个问题的解决方案