123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #ifndef __FML_SINGLE_LINE_SIMPLEX_H__
- #define __FML_SINGLE_LINE_SIMPLEX_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /*Includes ------------------------------------------------------*/
- #include <stdint.h>
- #include <stdio.h>
- #include <stdbool.h>
- #include <string.h>
- #include "nrf_drv_gpiote.h"
- #include "app_error.h"
- #include "SEGGER_RTT.h"
- #include "usr_config.h"
- /*Private macro ------------------------------------------------*/
- #define FML_SINGLE_LINE_SIMPLEX_PIN PIN_CHARGING //IO引脚
- #define FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS 20000 //发送一位的等待时间 单位:us //一个字节4.3-4.8ms
-
- #define FML_SINGLE_LINE_SIMPLEX_BASICS_T FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS //基础时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T (1*FML_SINGLE_LINE_SIMPLEX_BASICS_T) //校准码时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T (4*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //引导码时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_LOW_LEVEL_T (1*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //低电平时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T (2*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //高电平时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_END_CODE_T (3*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T) //结束码时间 单位:us
- #define FML_SINGLE_LINE_SIMPLEX_PWM_SEQ_VALUES_LEN ((FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T + \
- 2*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + \
- 8*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + 8*FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_END_CODE_T*2) / FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS \
- ) //PWM发送一个字节的序列大小,END_CODE*2是为了余量。
-
- /**最大字节255的传输时间为:37单位
- ((FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T + \
- 2*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + \
- 8*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + 8*FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_HIGHT_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_END_CODE_T) / FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS \
- )
- */
- /**最小字节0的传输时间为:28个单位
- ((FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_BOOT_CODE_T + \
- 2*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + \
- 8*FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + 8*FML_SINGLE_LINE_SIMPLEX_LOW_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_CALIBRATION_CODE_T + FML_SINGLE_LINE_SIMPLEX_LOW_LEVEL_T + \
- FML_SINGLE_LINE_SIMPLEX_END_CODE_T) / FML_SINGLE_LINE_SIMPLEX_SEND_ONE_BIT_TIEMS \
- )
- */
- /*STRUCTION -----------------------------------------------------*/
- typedef enum
- {
- FML_SINGLE_LINE_SIMPLEX_ROLE_HOST = 1, //角色 —— 主机
-
- FML_SINGLE_LINE_SIMPLEX_ROLE_SLAVE = 0 //角色 —— 从机
-
- } FML_SINGLE_LINE_SIMPLEX_ROLE_e;
- typedef void (*fml_single_line_half_duplex_receive_cb)(void);
- /*API -------------------------------------------------------*/
- /**
- @brief 初始化单线单工驱动
- @param role - [in] 角色
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_Init(FML_SINGLE_LINE_SIMPLEX_ROLE_e role);
- /**
- @brief 取消初始化单线单工驱动
- @param 无
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_UnInit(void);
- /**
- @brief 单线单工阻塞IO传输 —— 发送
- @param p_send - [in] 需要发送数据的指向地址
- @param len - [in] 数据长度
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_transfer(uint8_t *p_send, int len);
- /**
- @brief 单线单工PWM传输 —— 发送
- @param byte - [in] 发送的字节
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_pwm_transfer_onebyte(uint8_t byte);
- /**
- @brief 单线单工PWM传输是否完成 —— 发送
- @param 无
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_pwm_transfer_is_done(void);
- /**
- @brief 单线单工传输 —— 接收
- @param p_receive - [in] 需要接收数据的指向地址
- @param len - [in] 数据长度
- @return 返回的长度
- */
- int fml_single_line_simplex_receive(uint8_t *p_receive, uint32_t len);
- /**
- @brief 单线单工传输 —— 接收回调
- @param cb - [in] 回调地址
- @return 错误代码 - [out] -1失败,0成功
- */
- int fml_single_line_simplex_receive_time_callback(fml_single_line_half_duplex_receive_cb cb);
-
- #ifdef __cplusplus
- }
- #endif
- #endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|