From 135b10aca10e49c4f62a9eea7cca73c12f6ada43 Mon Sep 17 00:00:00 2001 From: ElicMagus Date: Thu, 2 May 2024 08:48:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D1=80?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .settings/org.eclipse.core.resources.prefs | 13 +++ PELT_1005_WCH_FW.launch | 118 ++++++++++----------- Peripheral/src/ch32v00x_spi.c | 2 +- User/i2c_slave.c | 50 +++++++++ User/i2c_slave.h | 16 +++ User/main.c | 65 ++++++++---- User/spi.c | 44 ++++++++ User/spi.h | 9 +- 9 files changed, 235 insertions(+), 84 deletions(-) create mode 100644 .gitignore create mode 100644 User/i2c_slave.c create mode 100644 User/i2c_slave.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2543508 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/obj/ +/obj/* \ No newline at end of file diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index f27d23b..18a9da4 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,13 +1,26 @@ eclipse.preferences.version=1 encoding//.settings/org.eclipse.core.resources.prefs=GBK +encoding//Core/core_riscv.c=GBK +encoding//Core/core_riscv.h=GBK +encoding//Debug/debug.c=GBK encoding//Debug/debug.h=GBK encoding//Peripheral/inc/ch32v00x.h=GBK +encoding//Peripheral/inc/ch32v00x_gpio.h=GBK +encoding//Peripheral/inc/ch32v00x_i2c.h=GBK +encoding//Peripheral/inc/ch32v00x_misc.h=GBK +encoding//Peripheral/inc/ch32v00x_rcc.h=GBK encoding//Peripheral/inc/ch32v00x_spi.h=GBK +encoding//Peripheral/src/ch32v00x_gpio.c=GBK +encoding//Peripheral/src/ch32v00x_i2c.c=GBK +encoding//Peripheral/src/ch32v00x_misc.c=GBK +encoding//Peripheral/src/ch32v00x_rcc.c=GBK encoding//Peripheral/src/ch32v00x_spi.c=GBK encoding//Startup/startup_ch32v00x.S=GBK encoding//User/ch32v00x_conf.h=GBK encoding//User/ch32v00x_it.c=GBK encoding//User/ch32v00x_it.h=GBK +encoding//User/i2c_slave.c=GBK +encoding//User/i2c_slave.h=GBK encoding//User/main.c=GBK encoding//User/spi.c=GBK encoding//User/spi.h=GBK diff --git a/PELT_1005_WCH_FW.launch b/PELT_1005_WCH_FW.launch index e9cc2c5..c1ca1a9 100644 --- a/PELT_1005_WCH_FW.launch +++ b/PELT_1005_WCH_FW.launch @@ -1,61 +1,61 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Peripheral/src/ch32v00x_spi.c b/Peripheral/src/ch32v00x_spi.c index 6b85d8a..57b5d79 100644 --- a/Peripheral/src/ch32v00x_spi.c +++ b/Peripheral/src/ch32v00x_spi.c @@ -89,7 +89,7 @@ void SPI_Init(SPI_TypeDef *SPIx, SPI_InitTypeDef *SPI_InitStruct) */ void SPI_StructInit(SPI_InitTypeDef *SPI_InitStruct) { - SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; + SPI_InitStruct->SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; diff --git a/User/i2c_slave.c b/User/i2c_slave.c new file mode 100644 index 0000000..c295c65 --- /dev/null +++ b/User/i2c_slave.c @@ -0,0 +1,50 @@ +/* + * i2c_slave.c + * + * Created on: Apr 19, 2024 + * Author: NikmaOS-W + */ + +#include "i2c_slave.h" +#define CTLR1_SWRST_Set ((uint16_t)0x8000) + +void I2C_Slave_Init(void){ + //扭抉技快投忘找抆 扭抉扼抖快 我扶我扯我忘抖我戒忘扯我我 SPI 找忘抗 抗忘抗 找忘技 批忪快 志抗抖攻折快扶 扭抉把找 GPIO + GPIO_InitTypeDef GPIO_InitStructure={0}; + I2C_InitTypeDef I2C_InitStruct={0}; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + I2C_InitStruct.I2C_ClockSpeed = 100000; + I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; + I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStruct.I2C_OwnAddress1 = 96; + I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; + I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; + + I2C_Init(I2C1,&I2C_InitStruct); + + I2C_Cmd(I2C1, ENABLE); + + I2C_AcknowledgeConfig( I2C1, ENABLE ); +} + +void I2C_slave_rcv(I2C_TypeDef * I2Cx,u8 * buf, u8 size){ + while( I2C_CheckEvent(I2Cx, I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED)!=READY){ + __NOP(); + }; + __NOP(); + for (u8 i=0;i +void DAC_SPI_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure={0}; + SPI_InitTypeDef SPI_InitStruct={0}; + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC|RCC_APB2Periph_SPI1,ENABLE); + +// GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + SPI_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx; + SPI_InitStruct.SPI_Mode = SPI_Mode_Master; + SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; + SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; + SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; + SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; + SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; + SPI_InitStruct.SPI_CRCPolynomial = 7; + SPI_Init(SPI1, &SPI_InitStruct); + + SPI_Cmd(SPI1, ENABLE); +} + +void DAC_Transmit(SPI_TypeDef *SPIx, uint8_t * Data, uint16_t Size) +{ + for (uint16_t i=0; i < Size;i++){ + SPI_I2S_SendData(SPIx,(uint16_t*)Data[i]); + while(SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_BSY ) == SET ){ +//Nothing + }; + + } +} + diff --git a/User/spi.h b/User/spi.h index 6b26cf7..8f2c036 100644 --- a/User/spi.h +++ b/User/spi.h @@ -5,12 +5,17 @@ * Author: NikmaOS-W */ + #ifndef USER_SPI_H_ #define USER_SPI_H_ -SPI_InitTypeDef DAC_spi; -void DAC_spi_Init +#include "ch32v00x.h" + +#define DAC_CHIP_SELECT_LOW {GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_RESET);} +#define DAC_CHIP_SELECT_HIGH {GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_SET);} +void DAC_SPI_Init(void); +void DAC_Transmit(SPI_TypeDef *SPIx, uint8_t * Data, uint16_t Size); #endif /* USER_SPI_H_ */