Kaynağa Gözat

提交中间代码

guoqiang 1 yıl önce
ebeveyn
işleme
7bda1d3d7d

+ 245 - 0
Device/PressureSensor.c

@@ -0,0 +1,245 @@
+#include "PressureSensor.h"
+#include "string.h"
+#include "gpio.h"
+#include "stdio.h"
+#include "ac780x.h"
+
+
+#define CPS135B_ADDR     (0x6D)
+/**
+* @prototype I2C_ParaInit(void)
+*
+* @param[in] void
+* @return	 void
+*
+* @brief  	 初始化I2C0.
+*/
+void I2C0_ParaInit(void)
+{
+	I2C_ConfigType i2cConfig;
+	
+	/*初始化引脚功能为I2C.*/
+	//GPIO_SetFunc(I2C0_SCL_PORT, I2C0_SCL_PIN, GPIO_FUN3);
+	//GPIO_SetFunc(I2C0_SDA_PORT, I2C0_SDA_PIN, GPIO_FUN3);
+	
+	/*清零结构体变量.*/
+	memset(&i2cConfig, 0x00, sizeof(i2cConfig));
+	
+	/*无论是主机还是从机模式都需要配置的参数.*/
+	i2cConfig.mode				= I2C_MASTER;/*设置主从机模式.*/
+	i2cConfig.extAddrEn			= DISABLE;/*10bit扩展地址禁能.*/
+	i2cConfig.dmaRxEn			= DISABLE;/*设置DMA接收数据.*/
+	i2cConfig.dmaTxEn			= DISABLE;/*设置DMA发送数据.*/
+	i2cConfig.interruptEn		= DISABLE;/*I2C中断,BND/SAMF/ARBLOST.*/
+	i2cConfig.nackInterruptEn	= DISABLE;/*NACK中断.*/
+	i2cConfig.ssInterruptEn		= DISABLE;/*总线start或stop中断.*/
+	i2cConfig.i2cEn				= ENABLE;/*使能模块.*/
+	i2cConfig.callBack			= NULL;/*中断回调函数.*/
+	
+	/*主机模式需要配置的参数,配置成从机模式可忽略.*/
+	i2cConfig.masterConfig.sampleCnt = 9;/*设置波特率为100Kbps,bandrate=(24M/(10*12*2))=100Kbps.*/
+	i2cConfig.masterConfig.stepCnt	 = 11;
+	i2cConfig.masterConfig.ARBEn 	 = ENABLE;/*设置主机仲裁功能.*/
+	i2cConfig.masterConfig.SYNCEn	 = ENABLE;/*设置主机SCL同步功能.*/
+	
+	/*从机模式需要配置的参数,配置成主机模式可忽略.*/
+	
+	//i2cConfig.slaveConfig.slaveAddr		 = AT24C02_DEV_ADDR;/*从机地址.*/
+	//i2cConfig.slaveConfig.slaveRangeAddr = 0;/*从机范围地址.*/
+	//i2cConfig.slaveConfig.glitchFilterCnt= 0;/*毛刺过滤.*/
+	//i2cConfig.slaveConfig.stretchEn		 = DISABLE;/*从机SCL延伸功能.*/
+	//i2cConfig.slaveConfig.rangeAddrEn	 = DISABLE;/*禁能范围地址.*/
+	//i2cConfig.slaveConfig.monitorEn		 = DISABLE;/*禁能从机监测功能.*/
+	//i2cConfig.slaveConfig.generalCallEn	 = DISABLE;/*从机SCL广播地址.*/
+	//i2cConfig.slaveConfig.wakeupEn		 = DISABLE;/*唤醒功能,仅从机时有效.*/
+	//i2cConfig.slaveConfig.rxOFInterruptEn	= DISABLE;/*接收缓存溢出中断.*/
+	//i2cConfig.slaveConfig.txUFInterruptEn	= DISABLE;/*发送缓存溢出中断.*/
+	
+	
+	I2C_Init(I2C0, &i2cConfig);
+}
+
+
+/*
+uint8_t cps135b_readbyte(uint8_t addr)
+{
+	uint8_t data;
+	
+	I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, &addr, 1, DISABLE);//发送读取地址
+	I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, &data, 1);//读取数据
+	
+	return data;
+}
+
+void cps135b_writebyte(uint8_t addr, uint8_t data)
+{
+	uint8_t buffer[2];
+	buffer[0] = addr;
+	buffer[1] = data;
+	
+	I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, buffer, 2, ENABLE);//发送读取地址
+}
+
+
+
+void cps135b_mr()
+{
+	uint8_t buffer[2];
+	buffer[0] = 0x30;
+	buffer[1] = 0x0A;
+	
+	I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, buffer, 2, ENABLE);//发送读取地址
+}
+
+uint8_t cps135b_gd(float* pressure, float* temperature)
+{
+	uint32_t status = I2C_HW_STATUS_ERROR_NULL;
+	uint32_t  tmp = 0;
+	uint8_t reg_addr = 0x06;
+	uint8_t data[5];
+	
+	status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, &reg_addr, 1, DISABLE);//发送读取地址
+	status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 5);//读取数据
+	
+	if(I2C_HW_STATUS_ERROR_NULL == status){
+	
+		tmp = (uint32_t)data[0]<<16;
+		tmp += (uint32_t)data[1]<<8;
+		tmp += data[2];
+		
+		*pressure = (1.0*tmp)/256;
+
+		tmp = 0;
+		tmp += (uint32_t)data[3]<<8;
+		tmp += data[4];
+		
+		
+		if(data[3] <= 128){
+			*temperature = 1.0*tmp/256;
+		}else{
+			*temperature = 1.0*(tmp-65535)/256;
+		}
+		
+		
+		return 0;
+		
+	}else{
+		return 1;
+	}
+	
+	
+}
+
+*/
+
+
+
+
+void PressureSensor_Init(void)
+{
+	I2C0_ParaInit();
+}
+
+uint8_t PressureSensor_MR(void)
+{
+	uint32_t status = I2C_HW_STATUS_ERROR_NULL;
+	uint8_t buffer[2];
+	buffer[0] = 0x30;
+	buffer[1] = 0x0A;
+	
+	status = I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, buffer, 2, ENABLE);//发送读取地址
+	
+	if(I2C_HW_STATUS_ERROR_NULL == status){
+		return 0;
+	}else{
+		return 1;
+	}
+	
+}
+
+
+
+uint8_t PressureSensor_Getvalue(float* pressure)
+{
+		uint32_t status = I2C_HW_STATUS_ERROR_NULL;
+	uint32_t  tmp = 0;
+	uint8_t reg_addr = 0x06;
+	uint8_t data[3];
+	
+	status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, &reg_addr, 1, DISABLE);//发送读取地址
+	status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 3);//读取数据
+	
+	if(I2C_HW_STATUS_ERROR_NULL == status){
+	
+		tmp = (uint32_t)data[0]<<16;
+		tmp += (uint32_t)data[1]<<8;
+		tmp += data[2];
+		
+		*pressure = (1.0*tmp)/256;
+
+		
+		return 0;
+		
+	}else{
+		return 1;
+	}
+	
+}
+
+uint8_t PressureSensor_Getvalue2(float* pressure, float* temperature)
+{
+	uint32_t status = I2C_HW_STATUS_ERROR_NULL;
+	uint32_t  tmp = 0;
+	uint8_t reg_addr = 0x06;
+	uint8_t data[5];
+	
+	status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, &reg_addr, 1, DISABLE);//发送读取地址
+	status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 5);//读取数据
+	
+	if(I2C_HW_STATUS_ERROR_NULL == status){
+	
+		tmp = (uint32_t)data[0]<<16;
+		tmp += (uint32_t)data[1]<<8;
+		tmp += data[2];
+		
+		*pressure = (1.0*tmp)/256;
+
+		tmp = 0;
+		tmp += (uint32_t)data[3]<<8;
+		tmp += data[4];
+		
+		
+		if(data[3] <= 128){
+			*temperature = 1.0*tmp/256;
+		}else{
+			*temperature = 1.0*(tmp-65535)/256;
+		}
+		
+		
+		return 0;
+		
+	}else{
+		return 1;
+	}
+
+}
+
+uint8_t PressureSensor_Print(void)
+{
+	float pressure = 0.0; 
+	float temperature = 0.0;
+	
+	//PressureSensor_Getvalue(&pressure);
+	PressureSensor_Getvalue2(&pressure, &temperature);
+	
+	printf("PressureSenso: pressure:%f  temperature:%f \r\n", pressure, temperature);
+	
+	
+}
+
+
+void PressureSensor_DeInit(void)
+{
+
+
+}

+ 64 - 0
Device/PressureSensor.h

@@ -0,0 +1,64 @@
+
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("AutoChips Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to AutoChips Inc. and/or its licensors. Without
+ * the prior written permission of AutoChips inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of AutoChips Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * AutoChips Inc. (C) 2018. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
+ * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
+ * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
+ * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
+ */
+
+/*************<start>******************/
+
+#ifndef PRESSUER_SENSOR_H__
+#define PRESSUER_SENSOR_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ac780x_i2c.h"
+
+
+void PressureSensor_Init(void);
+
+uint8_t PressureSensor_MR(void);
+uint8_t PressureSensor_Getvalue(float* pressure);
+uint8_t PressureSensor_Getvalue2(float* pressure, float* temperature);
+
+uint8_t PressureSensor_Print(void);
+
+void PressureSensor_DeInit(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif //PRESSURE_SENSOR_H__

+ 250 - 0
Device/adc.c

@@ -0,0 +1,250 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("AutoChips Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to AutoChips Inc. and/or its licensors. Without
+ * the prior written permission of AutoChips inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of AutoChips Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * AutoChips Inc. (C) 2016. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
+ * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
+ * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
+ * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
+ */
+/**********<Incldue>**********/
+#include "adc.h"
+#include "timer.h"
+
+/*********<Variable>********/
+uint8_t g_dmaFinish = 0;//DMA传输完成
+uint8_t g_halfDmaFinish = 0; //DMA传输半完成
+uint8_t g_dmaTransError = 0; //DMA传输错误
+uint16_t __align(2) g_ADCValueBuffer[ADC_SAMPLE_CHANNEL*ADC_FILTER_NUM] = {0};
+uint32_t g_timer0Cnt = 0;
+//uint32_t g_averageSampleValue = 0;
+/**
+ * ADC_DMACallback
+ *
+ * @param[in]  wpara:dmaChannelStatus 
+ *             lpara:0
+ * @return 0
+ *
+ * @brief ADC DMA中断回调函数。
+ */
+
+void ADC_DMACallback(void *device, uint32_t wpara, uint32_t lpara)
+{
+    /*
+     wparam为DMA通道状态,状态含义可参考CHANNELx_STATUS寄存器,
+     CHANNELx_STATUS[2] 传输错误
+     CHANNELx_STATUS[1] 半传输完成(相对设置的transferNum,如果半传输中断有使能,transferNum设为6,则DATA_TRANS_NUM为3时产生中断,进入回调)
+     CHANNELx_STATUS[0] 传输完成
+    */
+    if ((wpara & 0x01) == 0x1)
+    {
+        g_dmaFinish = 1;
+    }
+    if ((wpara & 0x02) == 0x2)
+    {
+        g_halfDmaFinish = 1;
+    }
+    if ((wpara & 0x04) == 0x4)
+    {
+        g_dmaTransError = 1;
+    }
+}
+/**
+ * ADC_DMAInit
+ *
+ * @param[in] void
+ * @return void
+ *
+ * @brief ADC DMA初始化,配置DMA相关参数。
+ */
+void ADC_DMAInit(void)
+{
+    DMA_ConfigType tmpDMAConfig;
+    memset(&tmpDMAConfig, 0x00, sizeof(DMA_ConfigType));
+    
+	
+    tmpDMAConfig.channelEn = ENABLE;                     ///<使能DMAx通道
+    tmpDMAConfig.finishInterruptEn = ENABLE;                   ///<使能DMA传输完成中断
+    tmpDMAConfig.halfFinishInterruptEn = DISABLE;               ///<去能DMA半传输完成中断
+    tmpDMAConfig.errorInterruptEn = ENABLE;                    ///<使能DMA传输错误中断
+    tmpDMAConfig.channelPriority = DMA_PRIORITY_VERY_HIGH;///<设置DMA通道优先级,0~3 :优先级由低到高
+    tmpDMAConfig.circular = ENABLE;                      ///<使能循环模式,如果只想工作一次,设为0即可。
+    tmpDMAConfig.direction = DMA_READ_FROM_PERIPH;          ///<0: 从外设读取,1:从存储器读取
+    tmpDMAConfig.MEM2MEM = DISABLE;                     ///<0:在非存储器与存储器之间传输,1:在存储器与存储器之间传输
+    tmpDMAConfig.memByteMode = DMA_MEM_BYTE_MODE_1TIME;  ///<MEM字分割传输数,0:32-bit,1:16-bit[15:0]; 2:16-bit[23:16][7:0];3:8-bit。详情可参考AC781X芯片手册  表20-2 可编程数据宽度&数据对齐 
+    tmpDMAConfig.memIncrement = ENABLE;                  ///<1:MEM地址增加
+    tmpDMAConfig.periphIncrement = DISABLE;               ///<0:外设地址固定
+    tmpDMAConfig.memSize = DMA_MEM_SIZE_16BIT;           ///<0:8-bit,1:16-bit,2:32-bit
+    tmpDMAConfig.periphSize = DMA_PERIPH_SIZE_16BIT;     ///<0:8-bit,1:16-bit,2:32-bit
+    tmpDMAConfig.transferNum = ADC_SAMPLE_CHANNEL*ADC_FILTER_NUM;         ///<DMA通道传输长度
+    tmpDMAConfig.periphSelect = DMA_PEPIRH_ADC0;  //外设选择
+		tmpDMAConfig.periphStartAddr = (uint32_t)(&(ADC0->RDR)); ///<Move ADC DR to memory
+		
+		tmpDMAConfig.memStartAddr = (uint32_t)g_ADCValueBuffer; //设置DMA开始地址
+    tmpDMAConfig.memEndAddr = (uint32_t)g_ADCValueBuffer+sizeof(g_ADCValueBuffer);//设置DMA结束地址
+    tmpDMAConfig.callBack = ADC_DMACallback; ///<设置DMA中断回调
+
+    DMA_Init(DMA0_CHANNEL2, &tmpDMAConfig);                     		 ///<ADC 使用DMA1通道,每个模块对应的DMA通道,可参考 AC781X芯片手册 表20-1 DMA请求列表
+    
+		NVIC_SetPriority(DMA0_CHANNEL2_IRQn, 3);
+		NVIC_ClearPendingIRQ(DMA0_CHANNEL2_IRQn);
+		NVIC_EnableIRQ(DMA0_CHANNEL2_IRQn);                              ///<使能DMA1中断请求
+}
+/**
+ * CTU_Config
+ *
+ * @param[in] void
+ * @return void
+ *
+ * @brief 配置CTU模块,Timer0触发ADC规则组采样。
+ */
+void CTU_Config(void)
+{
+    CTU_ConfigType ctuConfig;
+    memset(&ctuConfig, 0x00, sizeof(ctuConfig));
+    ctuConfig.uart0RxFilterEn = DISABLE;  //去能UART0_RX滤波
+    ctuConfig.rtcCaptureEn = DISABLE;  //去能RTC捕获
+    ctuConfig.acmpCaptureEn = DISABLE;  //去能ACMP捕获
+    ctuConfig.uart0RxCaptureEn = DISABLE;  //去能UART0_RX捕获
+    ctuConfig.uartTxModulateEn = DISABLE;  //去能UART0_TX调制
+    ctuConfig.clkPsc = CTU_CLK_PRESCALER_1;  //分频
+    ctuConfig.adcRegularTriggerSource = CTU_TRIGGER_ADC_TIMER_CH0_OVERFLOW; //Timer0触发ADC规则组采样。
+    ctuConfig.delay0Time = 0;  //触发延迟
+//    ctuConfig.adcInjectTriggerSource = CTU_TRIGGER_ADC_PWM0_INIT;  // 
+//    ctuConfig.delay1Time = 0;
+//    ctuConfig.pwdt0In3Source = CTU_PWDT_IN3_SOURCE_UART0_RX;
+//    ctuConfig.pwdt1In3Source = CTU_PWDT_IN3_SOURCE_UART0_RX; 
+    CTU_Init(&ctuConfig);
+}
+
+
+/**
+ * ADC_init
+ *
+ * @param[in] void
+ * @return void
+ *
+ * @brief 初始化ADC,配置ADC参数。
+ */
+void ADC_init()
+{
+    ADC_ConfigType tempAdcConfig;
+    ADC_ConfigType* adcConfig;
+    adcConfig = &tempAdcConfig;
+	
+    //配置PINMUX
+    //GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN2);///<ADC_IN8 Analog function enable
+	
+   
+    adcConfig->scanModeEn = ENABLE;                   //扫描模式
+    adcConfig->continousModeEn = DISABLE;             //连续模式
+    adcConfig->regularDiscontinousModeEn = DISABLE;   //1:打开规则组间断转换模式
+    adcConfig->injectDiscontinousModeEn = DISABLE;    //1:打开注入组间断转换模式
+    adcConfig->injectAutoModeEn = DISABLE;            //1:自动注入模式
+    adcConfig->intervalModeEn = DISABLE;              //1:注入组为间隔转换模式
+    adcConfig->regularDiscontinousNum = 0;            //
+    adcConfig->EOCInterruptEn = DISABLE;              //EOC中断去能
+    adcConfig->IEOCInterruptEn = DISABLE;             //IEOC中断去能
+    adcConfig->interruptEn = DISABLE;                 //去能中断
+    adcConfig->regularDMAEn = ENABLE;                 //使能ADC DMA
+    adcConfig->regularTriggerMode = ADC_TRIGGER_EXTERNAL;//ADC触发源,外部触发
+    //adcConfig->injectTriggerMode = ADC_TRIGGER_INTERNAL; //ADC触发源,内部触发
+    adcConfig->regularSequenceLength = ADC_SAMPLE_CHANNEL;               //规则组长度设为1
+    //adcConfig->injectSequenceLength = 0;               //注入组长度设为0
+    adcConfig->dataAlign = ADC_DATA_ALIGN_RIGHT;       //右对齐
+    adcConfig->powerMode = ADC_POWER_ON;               //上电
+		adcConfig->clkPsc = ADC_CLK_PRESCALER_1; ///<Set ADC Clk = 24M/2/(0+1)
+		
+    ADC_Init(ADC0, adcConfig);                      ///<ADC works Mode Config
+    /*
+        ADC转换率计算公式:
+        转换时间= 采样时间+转换时间+同步时间
+        转换时间= (SPT+12)/ADC模块时钟频率+5/APB时钟频率
+        备注:
+        1.同步时间为5个APB CLK。
+        2.ADC时钟频率 = APB时钟频率 /(分频系数+1)
+	*/
+    ADC_SetRegularGroupChannel(ADC0, ADC_CH_7, ADC_SPT_CLK_7, 0);  //set ADC_CH_7 为第1个采样序列 电池电压监测 
+		ADC_SetRegularGroupChannel(ADC0, ADC_CH_8, ADC_SPT_CLK_7, 1); ///set ADC_CH_8 为第2个采样序列 电机电流监测
+    //ADC_SetRegularGroupChannel(ADC0, ADC_CH_BANDGAP, ADC_SPT_CLK_7, 2); ///set ADC_CH_BANDGAP 为第3个采样序列
+    //ADC_SetRegularGroupChannel(ADC0, ADC_CH_TSENSOR, ADC_SPT_CLK_7, 3); ///set ADC_CH_TSENSOR 为第4个采样序列
+		
+    ADC_DMAInit();   //ADC DMA初始化
+}
+
+void printADCValue(void)
+{
+   uint8_t index;
+    printf("\r\n adc sample data is:");
+    for (index = 0; index<ADC_SAMPLE_CHANNEL*ADC_FILTER_NUM; index++)
+    {
+        printf("  0x%x",g_ADCValueBuffer[index]);
+    }
+    printf(",  g_timer0Cnt:%d \r\n", g_timer0Cnt);
+}
+
+
+float getBatteryVoltage(void)
+{
+	uint16_t sum = 0;
+	uint8_t i;
+	for(i=0; i<ADC_FILTER_NUM; i++){
+		sum += g_ADCValueBuffer[2*i];
+	}
+	
+	sum = sum/ADC_FILTER_NUM;
+	return ((6.6*sum)/4096);
+}
+
+
+float getMotorCurrent(void)
+{
+	uint16_t sum = 0;
+	uint8_t i;
+	for(i=0; i<ADC_FILTER_NUM; i++){
+		sum += g_ADCValueBuffer[2*i+1];
+	}
+	
+	sum = sum/ADC_FILTER_NUM;
+	return ((3.3*sum)/4096);
+}
+
+/**
+ * ADC_SampleTimerTrigerRegular
+ *
+ * @param[in] void
+ * @return void
+ *
+ * @brief Timer定时触发规则组ADC_CHANNEL0单次采样。
+ */
+void ADCSample_Init(void)
+{
+    CTU_Config();
+    ADC_init();
+    //Timer0_Init();
+}
+
+/**********<End>*********/

+ 71 - 0
Device/adc.h

@@ -0,0 +1,71 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("AutoChips Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to AutoChips Inc. and/or its licensors. Without
+ * the prior written permission of AutoChips inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of AutoChips Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * AutoChips Inc. (C) 2016. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
+ * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
+ * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
+ * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
+ */
+ 
+
+#ifndef ADC_H
+#define ADC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "string.h"
+#include "ac780x_adc.h"
+#include "ac780x_adc_reg.h"
+#include "ac780x_gpio.h"
+#include "ac780x.h"
+#include "ac780x_debugout.h"
+#include "ac780x_dma.h"
+#include "ac780x_ctu.h"
+#include "ac780x_timer.h"
+#include "ac780x_pwm.h"
+
+
+#define ADC_SAMPLE_CHANNEL               (2)
+#define ADC_FILTER_NUM               		 (8)
+
+//void  ADC_DMACallback(void *device, uint32_t wpara, uint32_t lpara);
+//extern uint32_t g_ADCValueBuffer[ADC_SAMPLE_CHANNEL];
+void ADCSample_Init(void);
+float getBatteryVoltage(void);
+float getMotorCurrent(void);
+
+void printADCValue(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ADC_H */
+
+

+ 6 - 2
Device/gpio.c

@@ -90,8 +90,12 @@ void GPIO_PortInit(void)
 		GPIO_SetFunc(GREENLED_PORT, GREENLED_PIN, GPIO_FUN0);
 		GPIO_SetDir(GREENLED_PORT, GREENLED_PIN, GPIO_OUT);
 		
-		GPIO_SetFunc(REDLED_PORT, REDLED_PIN, GPIO_FUN0);
-		GPIO_SetDir(REDLED_PORT, REDLED_PIN, GPIO_OUT);
+		//GPIO_SetFunc(REDLED_PORT, REDLED_PIN, GPIO_FUN0);
+		//GPIO_SetDir(REDLED_PORT, REDLED_PIN, GPIO_OUT);
+		
+		/*³õʼ»¯Pressure Sensor iic0 */
+		GPIO_SetFunc(GPIOA, GPIO_PIN0, GPIO_FUN3);//I2C0_SCL
+		GPIO_SetFunc(GPIOA, GPIO_PIN1, GPIO_FUN3);//I2C0_sda
 	
 	
 }

+ 2 - 2
Device/gpio.h

@@ -59,10 +59,10 @@ extern "C" {
 #define RS485_RX_EN				do{GPIO_SetPinLevel(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_LEVEL_LOW);}while(0)
 
 #define GREENLED_PORT			(GPIOA)
-#define GREENLED_PIN			(GPIO_PIN2)
+#define GREENLED_PIN			(GPIO_PIN10)
 
 #define REDLED_PORT			(GPIOA)
-#define REDLED_PIN			(GPIO_PIN3)
+#define REDLED_PIN			(GPIO_PIN10)
 
 /*RUNLED¶¯×÷¶¨Òå.*/	
 #define GREENLED_ON				do{GPIO_SetPinLevel(GREENLED_PORT, GREENLED_PIN, GPIO_LEVEL_HIGH);}while(0)

+ 80 - 19
Device/timer.c

@@ -58,17 +58,49 @@
 
 
 /*************<prototype>**************/
-void TIM_CHN2_Callback(void *device, uint32_t wpara, uint32_t lpara);
+void Timer_Callback(void *device, uint32_t wpara, uint32_t lpara);
+
+
+/**
+* @prototype Timer0_Init(void)
+*
+* @param[in] void
+* @return	 void
+*
+* @brief  	 初始化定时器通道0 , 用于ADC 规则组采集功能.
+*/
+void Timer0_Init(void)
+{
+	TIMER_ConfigType tmrConfig;
+	
+	/*清零变量.*/
+	memset(&tmrConfig, 0x00, sizeof(tmrConfig));
+	
+	/*配置定时器.*/
+	tmrConfig.linkModeEn	= DISABLE;
+	tmrConfig.interruptEn	= ENABLE;	
+	tmrConfig.periodValue	= TIM_PRD_10ms;
+	tmrConfig.timerEn		= ENABLE;
+	tmrConfig.callBack 		= Timer_Callback;
+	TIMER_Init(TIMER_CHANNEL0, &tmrConfig);
+	
+	NVIC_SetPriority(TIMER_CHANNEL0_IRQn, 1);
+  NVIC_ClearPendingIRQ(TIMER_CHANNEL0_IRQn);
+  NVIC_EnableIRQ(TIMER_CHANNEL0_IRQn);
+	
+}
+
+
 
 /**
-* @prototype TIMER_PrdInit(void)
+* @prototype Timer1_Init(void)
 *
 * @param[in] void
 * @return	 void
 *
-* @brief  	 初始化定时器通道2.
+* @brief  	 初始化定时器通道1.
 */
-void TIMER_PrdInit(void)
+void Timer1_Init(void)
 {
 	TIMER_ConfigType tmrConfig;
 	
@@ -78,10 +110,14 @@ void TIMER_PrdInit(void)
 	/*配置定时器.*/
 	tmrConfig.linkModeEn	= DISABLE;
 	tmrConfig.interruptEn	= ENABLE;	
-	tmrConfig.periodValue	= TIM_CHN2_PRD_1ms;
+	tmrConfig.periodValue	= TIM_PRD_1ms;
 	tmrConfig.timerEn		= ENABLE;
-	tmrConfig.callBack 		= TIM_CHN2_Callback;
+	tmrConfig.callBack 		= Timer_Callback;
 	TIMER_Init(TIMER_CHANNEL2, &tmrConfig);
+	
+	NVIC_SetPriority(TIMER_CHANNEL1_IRQn, 2);
+  NVIC_ClearPendingIRQ(TIMER_CHANNEL1_IRQn);
+  NVIC_EnableIRQ(TIMER_CHANNEL1_IRQn);
 }
 
 /**
@@ -90,23 +126,48 @@ void TIMER_PrdInit(void)
 * @param[in] ...
 * @return	 void
 *
-* @brief  	 定时器通道2中断回调函数.
+* @brief  	 定时器中断回调函数.
 */
-void TIM_CHN2_Callback(void *device, uint32_t wpara, uint32_t lpara)
+void Timer_Callback(void *device, uint32_t wpara, uint32_t lpara)
 {
+		if (TIMER_CHANNEL0 == device){
+				//g_timer0Cnt++;
+		}else if(TIMER_CHANNEL1 == device){
+			
+			if (g_blinkLedTime < 0xFFFF)
+			{
+					g_blinkLedTime++;
+			}
+			
+			if(rs485_info.dmasend_count < 0xFF){
+					rs485_info.dmasend_count++;
+			}
+			
+			
+			/*
+			
+			if(g_detectTime < 0xFF){
+					g_detectTime++;
+			}
+			
+			if (g_flashWrRdRdy)
+			{
+				g_flashWrRdTime++;
+			}
+			
+			if(g_runReady){
+				g_runTime++;
+			}
+			
+			if(g_period1000ms < 0xFFFF)
+			{
+				g_period1000ms++;
+			}
 	
-	if (g_blinkLedTime < 0xFFFF)
-	{
-			g_blinkLedTime++;
-	}
-	
-	if(uart0_info.dmasend_count < 0xFF){
-		  uart0_info.dmasend_count++;
-	}
+			*/
 	
-	if(g_detectTime < 0xFF){
-			g_detectTime++;
-	}
+		}
+
 	
 }
 

+ 10 - 3
Device/timer.h

@@ -44,8 +44,14 @@ extern "C" {
 #include "ac780x_timer.h"
 
 /*************<macro>******************/
-#define PERH_BUS_CLK		(8000000U)
-#define TIM_CHN2_PRD_1ms	(PERH_BUS_CLK / 1000 - 1)
+//#define PERH_BUS_CLK		(8000000U)
+//#define TIM_CHN2_PRD_1ms	(PERH_BUS_CLK / 1000 - 1)
+
+#define TIM_PRD_5us                      (APB_BUS_FREQ/200000-1)
+#define TIM_PRD_1ms                      (APB_BUS_FREQ/1000-1)
+#define TIM_PRD_5ms                      (APB_BUS_FREQ/200-1)
+#define TIM_PRD_10ms                     (APB_BUS_FREQ/100-1)
+#define TIM_PRD_1s                       (APB_BUS_FREQ-1)
 
 
 /*************<enum>*******************/
@@ -61,7 +67,8 @@ extern "C" {
 
 
 /*************<prototype>**************/
-void TIMER_PrdInit(void);
+void Timer0_Init(void);
+void Timer1_Init(void);
 
 #ifdef __cplusplus
 }

+ 25 - 25
Device/uart.c

@@ -39,14 +39,14 @@
 
 //#include "Comm.h"
 
-#define UARTx   UART0
-#define UARTx_IRQn  UART0_IRQn
+#define UART485   UART0
+#define UART485_IRQn  UART0_IRQn
 
 
-UART_INFO  uart0_info;
+UART_INFO  rs485_info;
 
-uint32_t dmaRxBuf[UART0_RECV_DATA_POOL_COUNT>>2];
-uint32_t dmaTxBuf[UART0_TRANSMIT_DATA_POOL_COUNT>>2];
+uint32_t dmaRxBuf[UART_RECV_DATA_POOL_COUNT>>2];
+uint32_t dmaTxBuf[UART_TRANSMIT_DATA_POOL_COUNT>>2];
 
 
 int TransmitData(uint8_t *pdata, uint16_t length);
@@ -66,7 +66,7 @@ void UartTxDMAEventCallback(void *device, uint32_t wpara, uint32_t lpara)
 {
     if (wpara & DMA_CHANNEL_STATUS_FINISH_Msk)    //!<DMA finish
     {
-			 uart0_info.dmasend_count = UART_DMASEND_COUNT_END;
+			 rs485_info.dmasend_count = UART_DMASEND_COUNT_END;
     }
     else if (wpara & DMA_CHANNEL_STATUS_HALF_FINISH_Msk)  //!<DMA half finish
     {
@@ -132,7 +132,7 @@ static void UartRxIdleCallBack(void *device, uint32_t wpara, uint32_t lpara)
 				DMA_SetChannel(DMA0_CHANNEL1, DISABLE);
 			
         ///接收不足4字节会在DMA fifo中缓存
-        uart0_info.recv_len = DMA0_CHANNEL1->DATA_TRANS_NUM + DMA0_CHANNEL1->FIFO_LEFT_NUM;
+        rs485_info.recv_len = DMA0_CHANNEL1->DATA_TRANS_NUM + DMA0_CHANNEL1->FIFO_LEFT_NUM;
 			
         ///将DMA fifo数据flush出来,因为mem设置为32bit,所以fifo也是4字节对齐
         ///(即使fifo里只有1个字节也会刷出4字节,需要保证缓存冗余不会溢出)
@@ -151,7 +151,7 @@ static void UartRxIdleCallBack(void *device, uint32_t wpara, uint32_t lpara)
 *
 * @brief uart 初始化
 */
-void uart_Initialize(void)
+void rs485_Initialize(void)
 {
     UART_ConfigType  uartConfig = {0}; 
 		
@@ -190,21 +190,21 @@ void uart_Initialize(void)
 	
 		
     uartConfig.callBack = UartRxIdleCallBack;   ///<uart2 interrupt callback
-    UART_Init(UARTx, &uartConfig);
-    UARTx->IDLE |= UART_IDLE_IDLEIE_Msk | UART_IDLE_ILEN_Msk;    ///<enable uart idle interrupt
+    UART_Init(UART485, &uartConfig);
+    UART485->IDLE |= UART_IDLE_IDLEIE_Msk | UART_IDLE_ILEN_Msk;    ///<enable uart idle interrupt
     
     ///Enable UARTx interrupt
-    NVIC_SetPriority(UARTx_IRQn, 3);
-    NVIC_ClearPendingIRQ(UARTx_IRQn);
-    NVIC_EnableIRQ(UARTx_IRQn);
+    NVIC_SetPriority(UART485_IRQn, 3);
+    NVIC_ClearPendingIRQ(UART485_IRQn);
+    NVIC_EnableIRQ(UART485_IRQn);
 		
-		uart0_info.dmasend_count = 0;
-		uart0_info.recv_buffer = (uint8_t *)dmaRxBuf;
-		uart0_info.send_buffer = (uint8_t *)dmaTxBuf;
-		uart0_info.recv_len = 0;
-		uart0_info.send_len = 0;
+		rs485_info.dmasend_count = 0;
+		rs485_info.recv_buffer = (uint8_t *)dmaRxBuf;
+		rs485_info.send_buffer = (uint8_t *)dmaTxBuf;
+		rs485_info.recv_len = 0;
+		rs485_info.send_len = 0;
 		
-		UART_ReceiveDMA(UARTx, DMA0_CHANNEL1, uart0_info.recv_buffer, UART0_RECV_DATA_POOL_COUNT, UartRxDMAEventCallback); 
+		UART_ReceiveDMA(UART485, DMA0_CHANNEL1, rs485_info.recv_buffer, UART_RECV_DATA_POOL_COUNT, UartRxDMAEventCallback); 
     
 }
 
@@ -217,12 +217,12 @@ void uart_Initialize(void)
 *
 * @brief uart 发送函数,通过中断发送 
 */
-int uart0_TransmitData(uint8_t *pdata, uint16_t length) 
+int rs485_TransmitData(uint8_t *pdata, uint16_t length) 
 {
 						
 		RS485_TX_EN; 
-		uart0_info.dmasend_count = UART_DMASEND_COUNT_START;
-		UART_TransmitDMA(UARTx, DMA0_CHANNEL0, pdata, length, UartTxDMAEventCallback); 
+		rs485_info.dmasend_count = UART_DMASEND_COUNT_START;
+		UART_TransmitDMA(UART485, DMA0_CHANNEL0, pdata, length, UartTxDMAEventCallback); 
 
 		//uart0_info.recv_len=0;
 		//UART_ReceiveDMA(UARTx, DMA0_CHANNEL1, uart0_info.recv_buffer, UART0_RECV_DATA_POOL_COUNT, UartRxDMAEventCallback); 
@@ -230,10 +230,10 @@ int uart0_TransmitData(uint8_t *pdata, uint16_t length)
     return 0;
 }
 
-void uart0_RecvData(void)
+void rs485_RecvData(void)
 {
-		uart0_info.recv_len=0;
-		UART_ReceiveDMA(UARTx, DMA0_CHANNEL1, uart0_info.recv_buffer, UART0_RECV_DATA_POOL_COUNT, UartRxDMAEventCallback); 
+		rs485_info.recv_len=0;
+		UART_ReceiveDMA(UART485, DMA0_CHANNEL1, rs485_info.recv_buffer, UART_RECV_DATA_POOL_COUNT, UartRxDMAEventCallback); 
 }
 
 

+ 7 - 7
Device/uart.h

@@ -51,9 +51,9 @@ extern "C" {
 
 
 
-#define UART0_BaudRate    9600
-#define UART0_TRANSMIT_DATA_POOL_COUNT 64
-#define UART0_RECV_DATA_POOL_COUNT     320  
+#define UART_BaudRate    9600
+#define UART_TRANSMIT_DATA_POOL_COUNT 64
+#define UART_RECV_DATA_POOL_COUNT     320  
 
 //rs485 send/recv ctrl
 #define UART_DMASEND_COUNT_START   (1)  
@@ -71,11 +71,11 @@ typedef struct
 }UART_INFO;
 
 
-extern UART_INFO  uart0_info;
+extern UART_INFO  rs485_info;
 
-void uart_Initialize(void);
-int uart0_TransmitData(uint8_t *pdata, uint16_t length);
-void uart0_RecvData(void);
+void rs485_Initialize(void);
+int rs485_TransmitData(uint8_t *pdata, uint16_t length);
+void rs485_RecvData(void);
 
 #ifdef __cplusplus
 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 110 - 65
Project/AirControlValve.uvguix.孙凯


+ 48 - 0
Project/AirControlValve.uvoptx

@@ -540,6 +540,54 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>28</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Device\adc.c</PathWithFileName>
+      <FilenameWithoutPath>adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>29</FileNumber>
+      <FileType>5</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Device\adc.h</PathWithFileName>
+      <FilenameWithoutPath>adc.h</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>30</FileNumber>
+      <FileType>5</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Device\PressureSensor.h</PathWithFileName>
+      <FilenameWithoutPath>PressureSensor.h</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>31</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Device\PressureSensor.c</PathWithFileName>
+      <FilenameWithoutPath>PressureSensor.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>

+ 21 - 1
Project/AirControlValve.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>AirControlValve_20240604</OutputName>
+          <OutputName>SmartSeaValve_20240725</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
@@ -528,6 +528,26 @@
               <FileType>5</FileType>
               <FilePath>..\Device\watchdog.h</FilePath>
             </File>
+            <File>
+              <FileName>adc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Device\adc.c</FilePath>
+            </File>
+            <File>
+              <FileName>adc.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Device\adc.h</FilePath>
+            </File>
+            <File>
+              <FileName>PressureSensor.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Device\PressureSensor.h</FilePath>
+            </File>
+            <File>
+              <FileName>PressureSensor.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Device\PressureSensor.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3562 - 3481
Project/JLinkLog.txt


+ 3 - 1
User/main.c

@@ -37,7 +37,9 @@ int main(void)
 	
 		Process_Init();
 	
-		TIMER_PrdInit();
+		//Timer0_Init(); 
+		Timer1_Init();
+		
     Task_Init();
 	
 	

+ 17 - 17
User/main_task.c

@@ -134,7 +134,7 @@ void mb_03_handle(void)
 		g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)((crc>>8) & 0x00ff);
 		g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)(crc & 0x00ff); 
 								
-		uart0_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
+		rs485_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
 			
 }
 
@@ -212,7 +212,7 @@ void mb_06_handle(void)
 				g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)(crc & 0x00ff); 
 		}
 		
-		uart0_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
+		rs485_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
 		
 		if((ret_write&RET_NEED_SAVE) > 0 ){
 				SaveConfig();
@@ -342,7 +342,7 @@ void mb_10_handle(void)
 		g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)((crc>>8) & 0x00ff);
 		g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)(crc & 0x00ff); 
 		
-		uart0_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
+		rs485_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
 		
 		if((ret_write&RET_NEED_SAVE) > 0 ){
 				SaveConfig();
@@ -386,7 +386,7 @@ void mb_42_handle(void)
 	g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)((crc>>8) & 0x00ff);
 	g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)(crc & 0x00ff); 
 	
-	uart0_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
+	rs485_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
 	
 	if((ret_write&RET_NEED_SAVE) > 0 ){
 			SaveConfig();
@@ -415,7 +415,7 @@ void mb_funccodeerror_handle(void)
 	g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)((crc>>8) & 0x00ff);
 	g_mb_ctx.txbuf[g_mb_ctx.tx_len++] = (uint8_t)(crc & 0x00ff); 
 	
-	uart0_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
+	rs485_TransmitData(g_mb_ctx.txbuf, g_mb_ctx.tx_len);
 	
 }
 
@@ -450,10 +450,10 @@ void mb_handle(void)
 */
 void Uart0_RxDataHandle(void)
 {
-		g_mb_ctx.rxbuf = uart0_info.recv_buffer;
-		g_mb_ctx.rx_len = uart0_info.recv_len;
-		g_mb_ctx.txbuf = uart0_info.send_buffer;
-		g_mb_ctx.txbuf_size = UART0_TRANSMIT_DATA_POOL_COUNT;
+		g_mb_ctx.rxbuf = rs485_info.recv_buffer;
+		g_mb_ctx.rx_len = rs485_info.recv_len;
+		g_mb_ctx.txbuf = rs485_info.send_buffer;
+		g_mb_ctx.txbuf_size = UART_TRANSMIT_DATA_POOL_COUNT;
 		g_mb_ctx.tx_len = 0;
 		g_mb_ctx.exception_code = NO_EXCEPTION;
 	
@@ -638,14 +638,14 @@ void Uart0_RxDataHandle(void)
 		} //END rx_len 
 		
 		if(g_mb_ctx.rx_len > 0){
-			uart0_RecvData();
+			rs485_RecvData();
 		}
 		
 		
 		
 		//´¦Àí 485 ÊÕ·¢×´Ì¬ 
-		if(uart0_info.dmasend_count >= UART_DMASEND_COUNT_RESET){
-				uart0_info.dmasend_count = 0;
+		if(rs485_info.dmasend_count >= UART_DMASEND_COUNT_RESET){
+				rs485_info.dmasend_count = 0;
 				RS485_RX_EN;
 		}
 
@@ -663,14 +663,14 @@ void Uart0_RxDataHandle(void)
 
 void Task_Init(void)
 { 
-    uart_Initialize();
+    rs485_Initialize();
 
-		memcpy(uart0_info.send_buffer, (void *)"Booted", 6);
+		memcpy(rs485_info.send_buffer, (void *)"Booted", 6);
 		
-		uart0_info.send_len = 6;
+		rs485_info.send_len = 6;
 		
-		uart0_TransmitData(uart0_info.send_buffer, uart0_info.send_len);
-		uart0_RecvData();
+		rs485_TransmitData(rs485_info.send_buffer, rs485_info.send_len);
+		rs485_RecvData();
 		
 		
 }

+ 7 - 5
User/process.c

@@ -34,6 +34,8 @@ static void update_state()
 	//if(STATUS_OPEN == g_coverstatus){
 	//	g_state = STATE_OPENCOVER;
 	//}
+	
+	g_state = STATE_LOCK;
 
 }
 
@@ -71,24 +73,24 @@ void Process_RunLedPrd(void)
 		
 		switch(g_state){
 			case STATE_LOCK:
-				REDLED_OFF;
+				//REDLED_OFF;
 				GREENLED_TOGGLE;
 				break;
 			case STATE_UNLOCK:
 				GREENLED_OFF;
-				REDLED_TOGGLE;
+				//REDLED_TOGGLE;
 				break;
 			case STATE_INTERMEDIATE:
-				REDGREEN_TOGGLE;
+				//REDGREEN_TOGGLE;
 				break;
 			case STATE_OPENCOVER:
-				REDLED_OFF;
+				//REDLED_OFF;
 			  GREENLED_ON;
 				break;
 			case STATE_EXCEPTION:
 			default:
 				GREENLED_OFF;
-			  REDLED_ON;
+			  //REDLED_ON;
 				break;
 		
 		};

+ 2 - 2
User/protocol.c

@@ -5,9 +5,9 @@
 
 
 #ifdef IS_BOOTLOADER
-uint32_t Firmware_Version[4] = {1, 0, 0, 20240618};
+uint32_t Firmware_Version[4] = {1, 0, 0, 20240725};
 #else
-uint32_t Firmware_Version[4] = {1, 1, 1, 20240618};
+uint32_t Firmware_Version[4] = {1, 1, 1, 20240725};
 #endif