配置
General
Dio Development Error Detect开发者错误检测
Dio Flip Channel Api翻转通道电平接口Dio_FlipChannel是否启用
Dio Version Info Api决定Dio_GetVersionInfo接口是否启用,一般打开就行。
Dio Reverse Port Bits让端口的位(通道)进行翻转,这个操作很奇特,如果将3写进去失能就会作用于14和15通道,如果写进去使能使能就会作用于0和1通道。因为使用的时候不太符合大多数人的习惯一般不勾选。
Dio Masked Write Port Api接口Dio_MaskedWritePort使能,通过掩码控制通道里面的pin的电平
Dio Read Zero For Undefined Port Pins启用Dio_ReadPort接口将未定义的端口通道读取为0
DioConfig
一般只需要一个容器即可,里面根据Port来分组,每个组右边是自己编写的序号。
在任意一组PORT里面能看到里面有使用为GPIO的PIN,官方的叫法是DIO独立通道,右边的ID是PIN在这一组里面的ID。默认电平,输入输出方式的配置在port模块。在这里建议个习惯,在这里起名字的时候,除了功能名称,最好可以加上端口和PIN名字,这样出了硬件问题也好排查。
DioChannelGroup
在同一个PORT里面一个或者多个相邻PIN组成的通道组,offset是起始通道,mask掩码对应连续的几个通道。
静态代码
Dio_FlipChannel翻转DIO输出PIN电平,其实就是调用Dio_SIUL_FlipChannel接口读出SIUL_GPDO寄存器的值,解析出当前PIN电平,对控制电平的位翻转之后再写回去。
Dio_GetVersionInfo获取版本信息,需要传入一个Port_GetVersionInfo类型的结构体指针,接口会把版本信息赋值到传入的结构体里面。
Dio_Init初始化的时候需要调用,入参是Dio_ConfigType类型的结构体指针,接口会把入参的结构体或者Dio_ConfigPC结构体里面的内容赋值给全局结构体Dio_CurrentConfigPtr,但是这个Dio_ConfigPC结构体全是0,全局结构体Dio_CurrentConfigPtr也在其他地方没用上,相当于啥也没干,所以你发现初始化的时候其实不调用这个接口也是可以的,并且规范里面DIO所有操作接口都没有对是否初始化进行检查。
Dio_ReadChannel读取DIO通道的值,实际上就是调用Dio_SIUL_ReadChannel接口,读取SIUL_MSCR接口判断该引脚配置的方向是输入还是输出。如果是输入,就从SIUL_GPDI寄存器里面读取。如果是输出,就从SIUL_GPDO寄存器里面读取。
Dio_ReadChannelGroup读取DIO的PIN组的值,这里的入参是生成的动态代码里面PIN组的结构体名称取地址。实际上是调用Dio_SIUL_ReadChannelGroup接口读取对应每个PIN口SIUL_PGPDI寄存器的数值,并且以掩码的方式返回回去。
Dio_ReadPort读取一整个PORT里面所有PIN的值,其实就是调用Dio_SIUL_ReadPort接口读取对应每个PIN口SIUL_PGPDI寄存器的数值,并且以掩码的方式返回回去。
Dio_WriteChannel写入DIO输出通道的值,其实就是调用Dio_SIUL_WriteChannel接口设置SIUL_GPDO寄存器。
Dio_WriteChannelGroup写入DIO通道组的值,其实就是调用SIUL_MPGPDO接口根据掩码设置每个PIN口SIUL_GPDO寄存器的数值。
Dio_WritePort写入一整个PORT里面所有PIN口的值,这里的入参是生成的动态代码里面PIN组的结构体名称取地址和需要设置的对应掩码。其实就是调用SIUL_MPGPDO接口根据掩码设置每个PIN口SIUL_GPDO寄存器的数值。
Dio_MaskedWritePort根据掩码写入单个PORT里面指定的一个或者多个PIN的电平,其实就是调用Dio_SIUL_MaskedWritePort接口根据掩码设置每个PIN口SIUL_GPDO寄存器的数值。
动态代码
Dio_ChannelType类型定义的通道ID,高8位为PORT的ID,低8位为通道在PORT的ID。
undefined_portmask里面没有定义的通道为0
Dio_ChannelGroupType是同一个PORT里面一个或者多个相邻PIN组成的通道组结构体