《STM3通信外设应用级库函数_CPAL_I2C库_中文说明(PDF57页).pdf》由会员分享,可在线阅读,更多相关《STM3通信外设应用级库函数_CPAL_I2C库_中文说明(PDF57页).pdf(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 1UM1029 用户手册用户手册 通讯外设应用库(CPAL)介绍介绍 本文的作用是为了解释 CPAL 的体系结构和执行(通讯外设应用库).CPAL 是一个为 STM32 通讯外设(I2C)提供高层 API 接口的库。它为每个设备提供了一个CPAL 驱动,用户可以通过对工程模板进行剪裁建立一个新的工程,其中的例子用于告诉用户如何使用和配置 CPAL 的驱动。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347
2、949,深圳龙华 2 目录目录 1、CPAL 概述.6 2 CPAL 结构体系描述.7 2.1 CPAL 应用层次.7 2.2 通信层.9 2.2.1 CPAL 主要结构(cpal.h).10 2.2.2 CPAL 通信函数(cpal_ppp.c/.h).16 2.3 用户应用接口.18 2.3.1 配置接口(cpal_conf.h).18 2.3.2 用户回调接口(cpal_usercallback.c).22 3 CPAL 函数描述.27 3.1 结构.27 3.1.1 CPAL_PPP_Init()功能描述.27 3,1,2 CPAL_PPP_DeInit()功能描述.28 3.1.3
3、CPAL_PPP_StructInit()功能描述.29 3.2 通信.30 3.2.2 CPAL_PPP_Write()功能描述.32 3.2.3 CPAL_PPP_IsDeviceReady()功能描述.32 3.2.4 CPAL 中断和 DMA 管理.33 3.3 事件和错误管理(用户回调函数).34 3.3.1 超时管理.36 4 如何逐步的使用和配置 CPAL 库.38 4.1 基本配置.38 4.1.1 选择要使用的外设.38 4.1.2 配置传输选项.39 4.1.3 选择和配置用户和错误回调.39 4.1.4 配置超时管理.39 4.1.5 设置事件,错误,DMA 中断优先级.
4、40 4.1.6 配置日志宏.40 4.2 结构初始化.41 4.3 通信.41 4.4 错误管理.42 4.5 高级配置.43 4.5.1 选择外设 IO 口.43 4.5.2 选择 TX 和 RX DMA 通道.43 4.5.3 设置事件,错误,DMA 中断优先级.43 5 CPAL 应用举例(逐步的).44 5.1 起点.44 5.2 cpal_conf.h.44 5.3 cpal_usercallback.c.46 5.4 main.c.47 6 CPAL 例子.49 6.1 基本 EEPROM 例子.50 控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结
5、构设计,联系方式:QQ394347949,深圳龙华 36.2 双板通信的例子.51 6.3 高级通信的例子.52 7 CPAL 组件的内存分布.53 8 常问的问题.54 9 版本历史.56 免责声明.57 控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 4 表单表单 Table 1.CPAL 文件描述.9 Table 2.CPAL_InitTypeDefstructure.11 Table 3.CPAL_Dev field values(CPAL_Dev 字段值).12 Table 4.CPAL_Directi
6、on field values.12 Table 5.CPAL_Mode field values.12 Table 6.CPAL_ProgModel field values.12 Table 7.CPA_TransferTypeDef structure fields.13 Table 8.CPAL_State field values.13 Table 9.wCPAL_DevError field values(for I2C peripherals).14 Table 10.wCPAL_Options field values.15 Table 11.CPAL 通信层架构.16 Tab
7、le 12.CPAL 通信层功能列表.17 Table 13.CPAL 配置部分.18 Table 14.CPAL 配置部分.23 Table 15.HAL 配置部分.24 Table 16.CPAL 底层接口功能说明.25 Table 17.CPAL_PPP_Struct_Init()默认值.30 Table 18.I2C 中断管理秩序.34 Table 19.DMA 中断管理秩序.35 Table 20.CPAL I2C 用户回调列表.36 Table 21.CPAL 例子里使用的硬件资源.51 Table 22.CPAL 单元的内存分配.54 Table 23.常见问题.55 Table
8、 24.历史版本.57 控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 5图表图表 Figure 1.CPAL 库架构.7 Figure 2.CPAL 库结构层次.8 Figure 3.CPAL 选项.16 Figure 4.CPAL_PPP_Init()流程图.28 Figure 5.CPAL_PPP_DeInit()流程图.29 Figure 6.CPAL_PPP_Read()流程图.32 Figure 7.CPAL_I2C_Write()流程图.33 Figure 8.CPAL PPP 超时管理流程图.38
9、 Figure 9.基于 EEPROM 例子的流程图.52 Figure 10.双板通信例子的流程图.52 Figure 11.高级通信例子的流程图.53 控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 61、CPAL 概述概述 编制 CPAL 的目的是:提供一个直观的,易于使用和实用的 API(INIT,Deinit,Read,Write):CPAL 内部的底层驱动程序负责管理通信所需的所有外设(I/O 引脚,时钟,中断向量表,DMA 通道.)通信的执行也是由 CPAL 内部驱动管理(通信头,地址发送,中断和
10、DMA 控制,出错管理)。所有的应用都是通过一个配置结构进行操作和监控(每个外设都使用单独的结构实例),它保持所有必要的配置参数(外围配置,缓存地址和大小),以及当前通信状态和错误状态。为外设提供了一个高效的完善的通信和容错管理单元。外围事件及错误由底层驱动进行管理,同时允许用户加入自定义代码对事件和错误进行处理。各种通信错误还可被超时机制管理,用户可以配置这个应用。提供高层次的定制和集成功能:使用独立的静态配置,使得当某些选项不被使用时可以缩小代码量(比如控制使用外设的数量,管理模式:禁用 10 位寻址,通用调用.)。通过一个独立的控制结构可以动态的、简单的实现对外设及通信的使能和失能。若干
11、个用户回调函数:CPAL 驱动对函数作为声明和调用,用户应用程序在需要的时候可以调用它们。这些功能允许用户应用程序执行特定的与通信、事件、错误相关的操作。提供一个设备抽象层。CPAL 库支持 STM32 系列芯片。通过 CPAL 的调试选项 CPAL_DEBUG 提供了一个高效简单的调试功能:通过自定义宏调试消息发送。日志消息在每个操作完成的时候可以被 CPAL 驱动发送出来(这个自定义宏可被定义为消息通过串口发送,通过 IDE 接口发送,显示到 LCD 屏幕)。为了最优化 CPAL 驱动的性能,所有的操作,除了设置初始化,其余的都是直接对寄存器进行访问。控制系统硬件设计、软件编程(51,PI
12、C,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 72 CPAL 结构体系描述结构体系描述 2.1 CPAL 应用层次应用层次 CPAL 库包含三个层 用户应用层:允许用户定制 CPAL 库和使用回调函数。该层包含了用户可根据需要进行修改的文件。通信层:包含了每个外设(I2C)的通信 API 接口。HAL 层:硬件抽象层(HAL),它允许不同的控制寄存器对外设进行独立的控制。后面的章节将对每一个层进行详细介绍。注:CPAL库里的模板文件用于提供用户接口。你可以根据需要对其作修改。CPAL 库的软件包包含 3 个主要的文件夹:STM32_CPAL_Dri
13、ver:位于与CMSIS文件夹和STM32标准外设驱动文件夹同层的目录内。此 文 件 夹 包 含 所 有 的 CPAL 驱 动 文 件 和 头 文 件,以 及 用 户 的 模 板 文 件(cpal_conf_template.h 和 cpal_usercallback.c)。STM32_CPAL_Examples:位于项目文件夹内。这个文件夹包含了 STMicroelectronics为用户提供的通过使用 CPAL 库实现每个外设通信应用的例子。STM32_CPAL_Template:位于项目文件夹中。此文件夹包含一个模板(空)项目,可让你使用 CPAL 库驱动程序开始一个新的项目。控制系统硬
14、件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 8 Figure 2.CPAL 库结构层次 控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 9下表中列出了库里的文件。在后续的章节中有详细的描述。Table1.CPAL 文件描述文件描述 层 文件名 描述 用户应用层 cpal_conf.h 用户文件,用户可修改、定制、配置 CPAL 库驱动。在 Project/STM32_CPAL_Template project 内在一个它的模板,在每个 C
15、PAL 的例子里有说明。cpal_usercallback.c 包含了用户需要的回调应用程序。如果不需要回调功能,这个文件就没用(注释掉未使用的功能)。通信层 cpal.h 它包含了结构体定义和全局结构体定义(作为外部变量)。它也包含了所有选项的定义。cpal_ppp.c 其中 PPP 被替换为”I2C”。这个文件包含了对外设的主要操作功能(初始化,恢复默认,读,写)。它也包含所有相关的外设的中断处理程序(外设和 DMA中断)及错误管理功能。cpal_ppp_.h 其中 PPP 被替换为”I2C”。这个是 cpal_ppp.c 程序的头文件。它包含了外围设备的错误定义。硬件抽象层 cpal_h
16、al.c 包含外设的所有底层驱动。cpal_ppp_hal_stm32xxxx.c其中 PPP 被替换为”I2C”。其中 xxxx 是该器件系列标识符(例如 stm32f10 x),。此文件提供了底层功能,为控制 PPP 系列器件的外设。cpal_ppp_hal_stm32xxxx.hPPP 可以被替换为“I2C”,其中 xxxx 是该器件系列标识符(例如 stm32f10 x)。该文件提供了底层的配置选项(IO 选择,DMA 通道选择,中断配置),以及用于底层外设控制的宏定义。此文件可根据需要进行修改,以便使用不同的 IO 脚,DMA 通道 2.2 通信层通信层 CPAL 通信层包含了用户程
17、序可调用的所有功能的接口(APIs)。它被包含在下列文件内(PPP可以被替换为“I2C”):cpal.h cpal_ppp.c cpal_ppp.h 重要注意事项:所有 PPP(I2C)的中断处理程序和所有相关的 DMA 中断处理程序在 CPAL 库内已被声明和管理。用户程序不必也不能再次声明这些中断程序。如果这些处理程序需要用于其它目的(例如一个 DMA 中断被多个外设使用)用户程序需要使用相关的回调程序。中断优先级和抢占规则也由 CPAL 驱动管理。要配置这些参数,请修改 cpal_conf.h 文件。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联
18、系方式:QQ394347949,深圳龙华 102.2.1 CPAL 主要结构主要结构(cpal.h)CPAL 库提供了一个唯一的结构来包含所有需要的参数:配置外设 用它来通信 监视 CPAL 驱动和外设状态 这个结构的声明是在 cpal.h 文件里,它是所有驱动功能的唯一参数。每个外设都有一个独立的结构用于保持它的配置参数以及相关的传输参数和状态。这此结构被声明在驱动文件内,同时在 capl.h 文件内声明为外部结构(因此,在你的应用程序文件内要在它们声明)。例子:#ifdef CPAL_USE_I2C1 extern CPAL_InitTypeDef I2C1_DevStructure;#e
19、ndif/*CPAL_USE_I2C1*/#ifdef CPAL_USE_I2C2 extern CPAL_InitTypeDef I2C2_DevStructure;#endif/*CPAL_USE_I2C2*/CPAL 配置结构如下:typedef struct CPAL_DevTypeDef CPAL_Dev;CPAL_DirectionTypeDef CPAL_Direction;CPAL_ModeTypeDef CPAL_Mode;CPAL_ProgModelTypeDef CPAL_ProgModel;CPAL_TransferTypeDef*pCPAL_TransferTx;CP
20、AL_TransferTypeDef*pCPAL_TransferRx;_IO CPAL_StateTypeDef CPAL_State;_IO uint32_t wCPAL_DevError;uint32_t wCPAL_Options;_IO uint32_t wCPAL_Timeout;I2C_InitTypeDef*pCPAL_I2C_Struct;CPAL_InitTypeDef;Table2 给出了结构字段的详细介绍.控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 11Table 2.CPAL_Ini
21、tTypeDef structure 字段类型 字段名 描述 CPAL_DevTypeDef CPAL_Dev 此字段定义了受此结构体配置和控制的外设。CPAL_DirectionTypeDef CPAL_Direction 此字段定义了相关外设支持的传输方向(只发送,只接收,双向)。此参数不指示当前传输器的传输方向,只定义了外设支持的方向。Table4 列出了该字段可设置的值。CPAL_ModeTypeDef CPAL_Mode 选择外设的工作模式:主模式或从模式。这个定义了相关外设是否发送或等待直到接收到另一个主模式端发来的数据。Table5 列出了该字段可设置的值。CPAL_ProgMo
22、delTypeDef CPAL_ProgModel 选择下一次传输的工作模式:中断(外设传输中断将管理所有传输和外设以及驱动状态)或者 DMA(所有数据传输均通过 DMA 通道完成,CPU 被释放,可用于执行其它任务)。Table6 列出了该字段可设置的值。注意:对于 I2C,当启用 DMA 模式时,其地址取址不受 DMA 管理,仅由中断管理。CPAL_TransferTypeDef*pCPAL_TransferTx此字段指向一个用于保存传输器的发送参数(缓存地址和数据字节数)Table7 列出了该字段可设置的值。CPAL_TransferTypeDef*pCPAL_TransferRx此字段
23、指向一个用于保存传输器的接收参数(缓存地址和数据字节数)Table7 列出了该字段可设置的值。_IO CPAL_StateTypeDef CPAL_State 此字段保存了由 CPAL_Dev 字段字义的外设的当前状态。第 3.3 节有更详细的描述。Table8 列出了该字段可设置的值。注意:在处理了外设错误(清除标志并使外设返回正常状态)之后,要更新这个字段,以便外设能够继续正常工作。_IO uint32_t wCPAL_DevError 此字段保存了由 CPAL_Dev 字段字义的外设的的错误码。Table9 列出了该字段可设置的值。注意:在处理了外设错误(清除标志并使外设返回正常状态)之
24、后,要更新这个字段,设置成 CPAL_I2C_ERR_NONE 以便外设能够继续正常工作。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 12uint32_t wCPAL_Options 此字段用于配置传输器配置的附加选项。Table10 列出了这些选项。这些值的任何组合都可以用于这一字段(相对于每个选项有关的条件)_IO uint32_t wCPAL_Timeout 此字段用于超时检测。它保存了超时计数值。I2C_InitTypeDef*pCPAL_I2C_Struct此字段指向一个标准外设库里定义的外设配置结
25、构。它只能设置一个值。下表描述了每个字段可以赋的值。Table 3.CPAL_Dev 字段的值 字段值 描述 CPAL_PPPx-PPP=外设类型(I2C)-x=外设实例(1 or 2 or 3)此字段的值信赖于可用的外设微控制器和 cpal_conf.h 文件里CPAL_USE_PPPx 的功能定义。Table4.CPAL_Direction 字段的值 字段值 描述 CPAL_DIRECTION_TX 所选外设只允许发送 CPAL_DIRECTION_RX 所选外设只允许接收 CPAL_DIRECTION_TXRX 所选外设为双向的 Table5.CPAL_Mode 字段的值 字段值 描述
26、CPAL_MODE_MASTER 被设为此值时,外设被配置为主模式,它将负责启动传输(例如,产生通信时钟,发送从机地址)。CPAL_MODE_SLAVE 被设为此值时,外设被配置为从模式,它将一直等待,直到主发起的传输。Table6.CPAL_ProgModel 字段的值 字段值 描述 CPAL_PROGMODEL_ INTERRUPT 如果被设置成此值,外设所有数据的传输管理都由中断 IRQ程序处理(在 CPAL 库里实现)。用户应用程序,只需要监控传输状态位。CPAL_PROGMODEL_DMA 当外设被选择为该值时,所有的数据传输是由外设相关的DMA 通道管理。这是最优化的传输模式,允许
27、高传输速率,并释放 CPU 执行用户的其它应用程序任务。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 13 Table7.CPA_TransferTypeDef 结构字段 字段值 描述 uint8_t*pbBuffer 此字段包含了读写缓存的指针。即使当传输器缓存格式不是字节格式,这个指针也将其转换为字节格式。用户必须在每次传输开始的时候设置这个字段的值。然后 CPAL 驱动会根据当前传输状态更新这个字段值。在中断模式下:这个字段在每个数据发送或接收完时更新(递增)。在 DMA 模式下:这个字段只在所有数据传输
28、完时才更新。uint32_t wNumData 这个字段包含了要传输的数据的数量(无论其格式为字节或半字或字)。要传输的数据的数量只与外设的配置有关(8 位、16 位或 32 位)。在每次发送的开始,用户必须设置这个字段。CPAL 驱动会根据当前的执行情况更新该字段。用户可通过检查这个值来判断已经发送了多少个数据。在中断模式下:这个字段在每个数据发送或接收完时更新(递减)。在 DMA 模式下:这个字段只在所有数据传输完时才更新。uint32_t*wAddr1 在主模式下:该字段定义了从机接收地址。在从模式下:此字段没用。uint32_t*wAddr2 在主模式下:该字段定义了向从机读写数据时用
29、的物理寄存器地址(比如对于存储设备)。在从模式下:这个字段没用。Table8.CPAL_State 字段值 字段值 描述 CPAL_STATE_DISABLED 这个状态是 CPAL 驱动程序的默认状态。它表示相关的外设被禁用(未初始化)和所有相关的资源都是空闲的。CPAL_STATE_READY 相关外设被初始化,所有资源被分配时被设置为此状态。CPAL_STATE_READY_TX 表示相关的外设触发了通信的发送过程。CPAL_STATE_READY_RX 表示相关的外设触发了通信的接收过程。CPAL_STATE_BUSY 当读操作或写操作开始时被设置为此状态(但外设还未真正开始传输数据)
30、。CPAL_STATE_BUSY_TX 相关外设正进行发送数据时设置为此状态。CPAL_STATE_BUSY_RX 相关外设正在接收数据时设置为此状态。CPAL_STATE_ERROR 当相关外设发生错误或 CPAL 驱动发生错误时,会设置成此值。当被设置成此值时,可以通过检查 wCPAL_DevError 字段知道出错的原因。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 14Table9.wCPAL_DevError 字段的值(对于 I2C 外设)字段值 描述 CPAL_I2C_ERR_NONE 该字段的默认
31、值,表示没有发生外设错误。CPAL_I2C_ERR_TIMEOUT 该值表示在通信过程或配置过程发生了超时。因为一段指定的时间已经过去了,外设却没有正确的响应事件或从机没有响应(主模式时)。CPAL_I2C_ERR_BERR 总线错误:当 I2C 外设在发送地址或数据时有额外的开始或停止信号就会发生此错误。在这种情况下,BERR 位就会被设置,同时产生一个中断(如果 ITERREN 位被使能)。在从模式下:在从模式下:数据将被丢弃,总线被硬件释放。发出一个错误的开始信号后,从机会认为是新的开始而等待一个地址数据或停止信号。发出一个错误的停止信号后,从机停止接收,同时硬件释放总线。在主模式下:在
32、主模式下:总线不会被释放,当前的传输状态不会受影响。它是由软件中止而不是当前传输。CPAL_I2C_ERR_ARLO 仲裁丢失错误:当 I2C 接口发现一个仲裁丢失时就会发生此错误。比如:如果 ITERREN 被设置时,AF 位被设置并产生了一个中断。一个发射机接到一个 NACK 时必须重置通信。I2C 接口自动进入从模式(M/SL 位被清除)。当 I2C 丢失仲裁时,在同一条传输里它将不能够对地址数据做出响应,但它在主机重启动成功后可以响应它,总路线被硬件释放。软件把 ARLO bit9 清 0。CPAL_I2C_ERR_AF 响应错误:当接口发现没有接到响应信号时发生此错误。比如:当ITE
33、RREN被设为1,而AF位被置1并产生了一个中断。发射机收到一个 NACK 后必须复位通信:在从模式下:总线被硬件释放。在主模式下:要用软件产生一个停止信号或重新发出一个开始信号。软件清除 ARLO bit 10(设置为 0)。CPAL_I2C_ERR_OVR 上溢出/下溢出错误:在从模式下,当时钟延长被禁止,同时I2C 总线在接收数据时会发生上溢出错误。在接口收到第二个字节前,接口收到的前一个字节(RxNE=1),数据在 DR 里还没被读出来。这种情况下,最后接收的字节丢失。发生溢出错误时,软件须清除 RxNE 位,同时发送方要重新发送最后一个字节。在从模式下,当时钟延长被禁止,同时 I2C
34、 总线在发送数据时会发生下溢出错误。在产生下一个字节发送的时钟前,接口没有使用第二个数据字节更新 DR 寄存器(TxE=1)。比如:相同的数据在 DR 里被再一次发送。用户应该确保在发生下溢出时,接收端接收到的数据应该被丢弃,同时确保下一个数据应该在指定的时间里被写到 DR 寄存器内。当第一个字节被传输完,DR 寄存器必须在 ADDR 被控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 15清 0 第一个 SCL 产生上升沿之前被写入新值。如果不可能的话,接收方要丢弃第一个字节。软件清除 ARLO bit 11(写
35、 0).在 CPAL 驱动结构 wCPAL_Options 字段可以作为外设初始化和通信时的附加配置选项。这些选项都是位值(每个选项被编到一个 32 位的 wCPAL_Options 中)。相同时间里可以配置多个选项。下表描述了每一位的定义 当某一位被设为 1 的时候,表示该项功能被使能。如果复位,相关的选项为失能(除了 bits1.7,它是保存 7 位地址的)。Table 10.wCPAL_Options 字段值 字段值 描述 CPAL_OPT_I2C_DUALADDR 启用 I2C 相关外设的双寻址模式。(1)7 Bit Address 这 是 自 身 地 址2的 值。该 值 只 有 当C
36、PAL_OPT_I2C_DUALADDR 选项被使能时才使用。CPAL_OPT_DMATX_TCIT 启用当 DMA 传输结束时产生一个外设中断。(2)CPAL_OPT_DMATX_HTIT 启用当 DMA 半双工发送完成时产生一个外设中断。(2)CPAL_OPT_DMATX_TEIT 启用当 DMA 发生传输错误时产生外设中断。(2)CPAL_OPT_DMARX_TCIT 启用当 DMA 接收结束时产生一个外设中断。(2)CPAL_OPT_DMARX_HTIT 启用当 DMA 半双工接收完成时产生一个外设中断。(2)CPAL_OPT_DMARX_TEIT 启用当 DMA 发生接收错误时产生外
37、设中断。(2)CPAL_OPT_DMATX_CIRCULAR 启用相关外设 Tx DMA 发送使用循环模式。(2)CPAL_OPT_DMARX_CIRCULAR 启用相关外设 Rx DMA 接收使用循环模式。(2)CPAL_OPT_NO_MEM_ADDR I2C 相关外设使用无内存寻址模式。意味着主机只发送从机地址(没有存储地址发送到从机,这个是指没有对 I2C 芯片内部进行寻址)。(3)控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 16 CPAL_OPT_16BIT_REG 启用 16 位寄存器寻址模式。此时
38、,寄存器/物理地址(在从地址发送完后)会被视为 2 个字节的地址。CPAL_OPT_I2C_GENCALL I2C 外设使用全呼模式。CPAL_DMA_1BYTE_CASE 该项为只读(启用/禁用使用内部 CPAL 驱动程序)。它可以被用户应用程序读取以便监视当前通信状态。当 DMA 模式被选择且缓存大小被设置为 1 时该位会被置 1.在这种情况下 DMA 还没被启动,发送是通过中断模式来进行。在发送结束后,DMA 模式再次被启动,整个发送过程完成回调程序被调用。CPAL_OPT_I2C_ERRIT_DISABLE禁用 I2C 错误中断(总线错误,仲裁丢失,无响应,上溢出/下溢出错误)。默认情
39、况是使用的。CPAL_OPT_I2C_NOSTOP 当前缓存数据发送完时禁止发送停止信号。当连续发送多个数据包时可以启用此选项。CPAL_OPT_I2C_NOSTOP_MODE 如果最后的数据发送完成而不发送停止信号,则必须启用此选项。Reserved 所有保留位的值将被忽略,它的使用是保留给未来的需求。1.为了启用此选项,接下来要设置 Own Address 2 和启用其它选项:wCPAL_Options=Own_Address_2_Value|CPAL_OPT_I2C_DUALADDR|Other Options 2.此选项仅当外设使用 DMA 模式(CPAL_PROGMODEL_DMA)
40、时有效。否则没有任务效果。3.此选项仅当 I2C 外设在主模式时有效。其物理地址是一个传输给从机外设进行读写操作用的(它是存储芯片地址/物理寄存器地址)。4.此选项仅当CPAL_OPT_NO_MEM_ADDR失能时有效,如果CPAL_OPT_NO_MEM_ADDR 被使能,该选项被忽略。2.2.2 CPAL 通信函数通信函数(cpal_ppp.c/.h)所有的通信层接口函数是按下表方案安排的。Table 11 CPAL 通信层函数的结构体系 返回值类型 名称 参数类型 uint32_t 操作结果(操作成功时返回 CPAL_PASS,返回其它值为操作失败)CPAL_PPP_Xxxx Ppp 是外
41、设类型(如 I2C)Xxxx 是操作名称(如 Init,Read,Write)CPAL_InitTypeDef*pDevInitStruct 函数接受的一个参数:一个指向外设参数结构体的指针。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 17下单描述了 CPAL 通信层函数 Table 12.CPAL 通信层函数表单 函数名 描述 CPAL_PPP_Init()这个函数根据 pDevInitStructure 指向的配置参数结构指针里的参数,初始化相关外围设备和所有需要的资源(GPIOs,时钟,DMA和中断)C
42、PAL_PPP_DeInit()这个函数释放相关外设的资源(GPIOs,时钟,DMA,中断)失能并初始化外设。因此,每个资源被初始化为它们的默认状态。如果资源没有被用于外设,将不被初始化为默认。因此,如果某个外设被配置为 DMA 模式,然后想重新配置在中断模式,调用这个函数时,它仅对中断的相关资源进行初始化为默认,(DMA资源的配置会保持不变)。注意:当调用这个函数时,应确保所有在多个外设之间共享的资源在初始化为默认后被正确配置(比如一个 DMA 通道的 TC 中断 被 用 于 I2C 和 一 个其 它 的 外 设,就 得 确 保 在 调 用 了CPAL_PPP_DeInit 函数之后,重新启
43、用这个通道和它的中断。CPAL_PPP_StructInit()该函数初始化相关外设结构(pDevInitStruct 指向的结构)把所有字段设置为默认值。注意:指针指向的是充满 CPAL 局部变量的指针。为了避免任何风险,建议应用局部/全局变量声明,并用指针来填写这些字段。CPAL_PPP_Read()此函数从外设缓存里读取/接收一个数据。所有有关读传输器的控制参数和当前状态来自Table7描述的pCPAL_TransferRx字段。每步通信时,CPAL_State 字段都会被结构指针 pDevInitStruct 指向的值更新,进行可以报告当前状态和可能的错误。CPAL_PPP_Write
44、()此函数往外设写/发送一个数据到缓存。所有有关读传输器的控制参数和当前状态来自 Table7 描述的 pCPAL_TransferTx 字段。每步通信时,CPAL_State 字段都会被结构指针 pDevInitStruct 指向的值更新,进行可以报告当前状态和可能的错误。(1)CPAL_PPP_IsDeviceReady()此函数可用于:一直等待直到外设准备好通信(比如存储芯片完成写操作后)。验证从机是否被连接到总线(使用它的地址)。此函数使外设在总线上发送一个从机的地址然后等待直到从机响应这个地址(意味着之前的操作已成功完成,同时外设已经连接到总线)。如果在指定的时长内没有被响应,函数退
45、出并返回CPAL_FAIL 结果。如果外设成功响应,函数退出并返回CPAL_PASS 结果。可通过调用一次该函数来确认从机是否连接到总线,或者循环等待直到从机正确响应。1.当 CPAL_PPP_Read()或 CPAL_PPP_Write()函数被调用后,数据在传输时用户程序可以去执行其它任务。为了确认通信是否完成,程序可以监视状态字段 CPAL_State 或当使用 DMA模式时使用 DMA Tx/Rx 传输完成中断。注意:有可能用户需要配置和使用多个外设,因此每个外设都应有他们各自的控制状态。控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:Q
46、Q394347949,深圳龙华 182.3 用户应用接口用户应用接口 用户应用接口包含两个文件(cpal_conf.h 和 cpal_usercallback.c),下面的章节将会对他们进行说明。这些文件用户可以根据需要作修改。CPAL 库仅提供了这些文件的模板,用户需要把这些模板文件复制到他们的工程里,然后根据实际需要修改它们。重要注意事项:重要注意事项:所有 PPP(I2C)中断处理程序和 DMA 相关的中断处理程序,已由 CPAL 库声明并管理。用户程序不必也不能再对它们作声明。如果这些处理程序需要用于其它目的(比如 DMA中断被用于多个任务),用户程序须使用相关的回调函数。中断优先级和
47、抢占顺序同样由 CPAL 驱动管理。要配置这些参数,请修改文件cpal_conf.h。2.3.1 配置接口(配置接口(cpal_conf.h)配置接口允许用户根据需要来配置 CPAL 库。这个文件不是一定要修改的:默认设置也可能使用,无须任何修改。只有一些参数可以被修改。配置 cpal_conf.h 文件,通过启用、禁用、注释或修改 cpal_conf.h 文件里相关的定义值。CPAL 的配置步骤被分为以下几个部分,下面将对它们作说明:第一部分:外设的选择 第二部分:传输选项的配置 第三部分:用户回调的配置 第四部分:超时配置 第五部分:中断优先级选择 第六部分:CPAL 调试配置 Table
48、 13.CPAL 配置部分配置部分 部分 选项 描述 第一部分:外设的选择 CPAL_USE_PPPX 其中 PPP 是外设名称,X 是外设实例(1,2 或 3)取消注释定义,以启用相关外设。当被注释时,外设不被启用,所有相关资源不被CPAL 库声明。因此,占用的存储空间会相应减少。第二部分:传输选项的配置 下面的选项是静态的配置,当某些功能不被使用时可以减小代码量。CPAL_I2C_MASTER_MODE 解除注释把 I2C 外设定义为启用主模式。当它被注释时,没有主模式功能,相关的操作也不能被调用。CPAL_I2C_SLAVE_MODE 解除注释把 I2C 定义为启用从模式。当它被注释时,
49、被没有从模式的功能,相关的控制系统硬件设计、软件编程(51,PIC,STC,STM32,GPS)、机械结构设计,联系方式:QQ394347949,深圳龙华 19操作也不能被调用。Table 13.CPAL 配置部分(续上)配置部分(续上)部分 选项 描述 第二部分:传输选项的配置(续上)CPAL_I2C_DMA_PROGMODEL 解除注释将启用 DMA 模式传输数据。当被注释时,DMA 模式不可用。CPAL_I2C_DMA_1BYTE_CASE 解除注释,当 DMA 模式使能时,将启用1 个字节传输模式。对于有些外围设备,DMA 不能使用 I2C 进行 1 字节传输。因此,CPAL 库就单独
50、处理这种情况。如果用户程序不需要 1 字节传输(所有的传输大于 1 个字节),那么把它注释掉以减少代码量。如果CPAL_I2C_DMA_PROGMODEL 被注释则这部分定义将被忽略。CPAL_I2C_IT_PROGMODEL 解除注释时,将启用数据翻转(data turnovers 数据错误?)时的中断模式。当它被注释时,所有中断管理代码失能,除了事件和错误管理。CPAL_I2C_10BIT_ADDR_MODE 该选项允许使用 10 位地址模式。当它被启用时,并不意味着所有的 I2C 外设通信都工作在 10 位寻址模式:为一个 I2C 外设选择此模式,用户需要 CPAL 结构字段里的相关选项