|
|
|
|
#ifndef OWI_H
|
|
|
|
|
#define OWI_H
|
|
|
|
|
|
|
|
|
|
#include "r_cg_macrodriver.h"
|
|
|
|
|
#include "r_cg_serial.h"
|
|
|
|
|
#include "r_cg_port.h"
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
/* =========================================================
|
|
|
|
|
* OWI GPIO: P70 (P7.0) + HW Open-Drain (POM7.0)
|
|
|
|
|
* ========================================================= */
|
|
|
|
|
#define OWI_PORT_P P7
|
|
|
|
|
#define OWI_PORT_PM PM7
|
|
|
|
|
#define OWI_PORT_PU PU7
|
|
|
|
|
#define OWI_PORT_POM POM7
|
|
|
|
|
|
|
|
|
|
#define OWI_PIN_MASK (1u << 0)
|
|
|
|
|
|
|
|
|
|
/* =========================================================
|
|
|
|
|
* Timing
|
|
|
|
|
* - 기존 값 유지
|
|
|
|
|
* - 시퀀스/파형 형태 유지
|
|
|
|
|
* ========================================================= */
|
|
|
|
|
#define OWI_BIT_PERIOD_US 1200u
|
|
|
|
|
#define TBIT OWI_BIT_PERIOD_US
|
|
|
|
|
#define TLOW_0 ((TBIT * 3u) / 4u)
|
|
|
|
|
#define TLOW_1 ((TBIT * 1u) / 4u)
|
|
|
|
|
#define TSTOP_LOW (TBIT * 2u)
|
|
|
|
|
#define TIDLE (TBIT * 3u)
|
|
|
|
|
#define TSTART_HOLD 50u
|
|
|
|
|
#define SECURE_HIGH (2u * TBIT)
|
|
|
|
|
#define SECURE_TOGGLE_COUNT 3u
|
|
|
|
|
#define SECURE_TOGGLE_LOW (TBIT / 4u)
|
|
|
|
|
#define SECURE_TOGGLE_HIGH (TBIT / 5u)
|
|
|
|
|
|
|
|
|
|
#define OWI_STRONG_HIGH_US 5u
|
|
|
|
|
|
|
|
|
|
/* =========================================================
|
|
|
|
|
* Strong kick policy
|
|
|
|
|
* - 시퀀스는 유지하고 strong만 선택적으로 사용
|
|
|
|
|
* ========================================================= */
|
|
|
|
|
#define OWI_USE_STRONG_IN_START 0u
|
|
|
|
|
#define OWI_USE_STRONG_IN_WRITEBIT 0u
|
|
|
|
|
#define OWI_USE_STRONG_IN_SECURE_LASTHIGH 0u
|
|
|
|
|
|
|
|
|
|
#ifndef RAM_BYTES
|
|
|
|
|
#define RAM_BYTES 3
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void GPIO_Clear(void);
|
|
|
|
|
void GPIO_Input(void);
|
|
|
|
|
int GPIO_Read(void);
|
|
|
|
|
|
|
|
|
|
void OWI_Init(uint32_t bit_time_us);
|
|
|
|
|
void OWI_Start(void);
|
|
|
|
|
void OWI_Stop(void);
|
|
|
|
|
void OWI_SecureStop(void);
|
|
|
|
|
|
|
|
|
|
void OWI_WriteBit(int bit);
|
|
|
|
|
void OWI_WriteByte(uint8_t data);
|
|
|
|
|
uint8_t OWI_ReadBit(void);
|
|
|
|
|
uint8_t OWI_ReadByte(void);
|
|
|
|
|
|
|
|
|
|
void OWI_T_ReadBytesAndPrint(int length);
|
|
|
|
|
void OWI_ReadBytesAndPrint(int length, uint8_t id);
|
|
|
|
|
|
|
|
|
|
void OWI_T_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
|
|
|
|
|
void OWI_CommandMode (const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
|
|
|
|
|
void OWI_A_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
|
|
|
|
|
|
|
|
|
|
void OWI_disable(void);
|
|
|
|
|
void GPIO_ForceHighKick(void);
|
|
|
|
|
|
|
|
|
|
uint8_t OWI_HasTimeout(void);
|
|
|
|
|
void OWI_ClearTimeout(void);
|
|
|
|
|
uint16_t OWI_GetLastTimeoutByteIndex(void);
|
|
|
|
|
uint8_t OWI_GetLastTimeoutBitIndex(void);
|
|
|
|
|
|
|
|
|
|
#endif /* OWI_H */
|