From 84bc401ba4680c1e49dcb3a6f4565de023bdd206 Mon Sep 17 00:00:00 2001 From: JiXieShi Date: Thu, 9 May 2024 14:38:55 +0800 Subject: [PATCH] IIC Demo --- .gitignore | 1 + CMakeLists.txt | 1 + demo/iic/t_iic.h | 10 ++++++++++ demo/iic/test.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ demo/spi/test.c | 10 +++++----- lib/inc/iic/iic.h | 2 +- lib/src/iic/iic.c | 4 ++-- lib/src/tool.c | 1 + main.c | 6 +++++- 9 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 demo/iic/t_iic.h create mode 100644 demo/iic/test.c diff --git a/.gitignore b/.gitignore index ff9047e..ae6b19c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /cmake-build-debug/ +/.idea/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index ef67695..23687ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ include_directories( lib/inc/spi lib/inc/iic demo/spi + demo/iic ) file(GLOB_RECURSE SOURCES diff --git a/demo/iic/t_iic.h b/demo/iic/t_iic.h new file mode 100644 index 0000000..0d2f42d --- /dev/null +++ b/demo/iic/t_iic.h @@ -0,0 +1,10 @@ +// +// Created by lydxh on 2024/5/9. +// + +#ifndef HW_LIB_T_IIC_H +#define HW_LIB_T_IIC_H + +void Test_iic(); + +#endif //HW_LIB_T_IIC_H diff --git a/demo/iic/test.c b/demo/iic/test.c new file mode 100644 index 0000000..839fbf0 --- /dev/null +++ b/demo/iic/test.c @@ -0,0 +1,51 @@ +#include +#include "iic.h" +#include "log.h" +#include "tool.h" + +uint8_t CLK_Pin(uint8_t l) { +// LOGT("CLK", "P:%d", l); + return l; +} + +uint8_t SDA_Set(uint8_t l) { +// LOGT("SDA", "P:%d", l); + return l; +} + +uint8_t SDA_Mode(uint8_t l) { + if (l) { +// LOGT("SDA", "M:IN"); + } else { +// LOGT("SDA", "M:OUT"); + } + return l; +} + +uint8_t SDA_Read() { + uint8_t l = rand() % 2; +// LOGT("SDA", "P:%d", l); + return l; +} + +void Test_iic() { + HW_Dev_IIC dev = { + .CLK_SET = CLK_Pin, + .SDA_SET = SDA_Set, + .SDA = SDA_Read, + .SDA_MODE = SDA_Mode, + .ADD = 0x34 + }; + uint8_t internalAddress = 0x56; + + uint32_t len = 10; + uint8_t writeData[len]; + uint8_t readData[len]; + for (int i = 0; i < len; ++i) { + writeData[i] = rand() % 10; + } + HW_IIC_WL(dev, internalAddress, writeData, len); + BufPrint(" TX", writeData, 8, len, 16); + HW_IIC_RL(dev, internalAddress, readData, len, 1); + BufPrint(" RX", readData, 8, len, 16); +} \ No newline at end of file diff --git a/demo/spi/test.c b/demo/spi/test.c index 173a2a4..410614f 100644 --- a/demo/spi/test.c +++ b/demo/spi/test.c @@ -44,19 +44,19 @@ void Test_spi() { }; uint8_t r, t = rand() % 10; r = HW_SPI_RW(ltl, t); - LOGI("Tx:%d,Rx:%d", t, r); + LOGI(" Tx:%d,Rx:%d", t, r); uint8_t rbuf[64], tbuf[64]; for (int i = 0; i < 64; ++i) { tbuf[i] = rand() % 10; } HW_SPI_RWL(ltl, rbuf, tbuf, 64); - BufPrint("TX", tbuf, 8, 64, 8); - BufPrint("RX", rbuf, 8, 64, 8); + BufPrint(" TX", tbuf, 8, 64, 8); + BufPrint(" RX", rbuf, 8, 64, 8); uint16_t rbuf16[64], tbuf16[64]; for (int i = 0; i < 64; ++i) { tbuf16[i] = rand() % 1000; } HW_SPI_RWL16(ltl, rbuf16, tbuf16, 64); - BufPrint("TX", tbuf16, 16,64, 16); - BufPrint("RX", rbuf16, 16,64, 16); + BufPrint(" TX[16]", tbuf16, 16, 64, 16); + BufPrint(" RX[16]", rbuf16, 16, 64, 16); } \ No newline at end of file diff --git a/lib/inc/iic/iic.h b/lib/inc/iic/iic.h index e7f31d1..e2d3bf8 100644 --- a/lib/inc/iic/iic.h +++ b/lib/inc/iic/iic.h @@ -20,7 +20,7 @@ typedef struct { uint8_t (*CLK_SET)(uint8_t); // 设置时钟引脚状态的函数指针 uint8_t (*SDA_SET)(uint8_t); // 设置数据引脚状态的函数指针 - uint8_t (*SDA); // 读取数据引脚状态的函数指针 + uint8_t (*SDA)(); // 读取数据引脚状态的函数指针 uint8_t (*SDA_MODE)(uint8_t); // 设置数据引脚模式的函数指针 uint8_t ADD; // IIC设备地址 } HW_Dev_IIC; diff --git a/lib/src/iic/iic.c b/lib/src/iic/iic.c index b9c15c0..7fde9f7 100644 --- a/lib/src/iic/iic.c +++ b/lib/src/iic/iic.c @@ -23,7 +23,7 @@ static inline uint8_t iic_WaitAck(HW_Dev_IIC dev, uint16_t timeout) { dev.SDA_MODE(IN); dev.SDA_SET(HIGH);DELAY1US(); dev.CLK_SET(HIGH);DELAY1US(); - while (dev.SDA) { + while (dev.SDA()) { time++;DELAY1US(); if (time > timeout) { iic_Stop(dev); @@ -74,7 +74,7 @@ static inline uint8_t iic_R(HW_Dev_IIC dev, uint8_t ack) { dev.CLK_SET(LOW);DELAY1US();DELAY1US(); dev.CLK_SET(HIGH); read <<= 1; - if (dev.SDA)read++;DELAY1US(); + if (dev.SDA())read++;DELAY1US(); } if (ack) iic_Ack(dev); //发送ACK diff --git a/lib/src/tool.c b/lib/src/tool.c index cff585d..6dc5d5b 100644 --- a/lib/src/tool.c +++ b/lib/src/tool.c @@ -27,4 +27,5 @@ void BufPrint(char *name,void *buf,unsigned char size,unsigned int len,unsigned printf("未指定类型大小"); } } + printf("\n"); } \ No newline at end of file diff --git a/main.c b/main.c index 48b43f6..609b204 100644 --- a/main.c +++ b/main.c @@ -2,9 +2,13 @@ #include #include #include "t_spi.h" +#include "t_iic.h" + int main() { srand((unsigned)time(NULL)); - printf("Hello, World!\n"); + printf("\nSPI TEST\n"); Test_spi(); + printf("\nIIC TEST\n"); + Test_iic(); return 0; }