/* *Copyright (C),2023 , NANOCHAP *File name: ENS1_GPIO.C *Author: *Version: V1.0 *Date: 2023-11- *Description: *Function List: History: 1.V1.0 Date: Author: Modification: 初版 */ #include "my_header.h" #include "ENS1_GPIO.h" //IO复用 uint8_t GPIO_AltFunction(GPIO_NUM GPIO_X , GPIO_AltFuncSel GPIO_AltFuncSelx){ if(GPIO_X >15) { CMSDK_GPIO->ALTFH &=~ (0x3 << ((GPIO_X-16)*2)); CMSDK_GPIO->ALTFH |= (GPIO_AltFuncSelx << ((GPIO_X-16)*2)); } else { CMSDK_GPIO->ALTFL &=~ (0x3 << (GPIO_X*2) ); CMSDK_GPIO->ALTFL |= (GPIO_AltFuncSelx << (GPIO_X*2)); } return 0; } int8_t GPIO_IO_Init(GPIO_NUM GPIO_X, I_O_SELECT INorOUT ,GPIOOType_TypeDef GPIO_OType,GPIO_PUPD_TypeDef GPIO_PUPD,OUTPUT_SPEED_TypeDef OUTPUT_SPEED,OUTPUT_PDRV_TypeDef OUTPUT_PDRV,FunctionalState ENABLEorNOT){ //??GPIO?????? GPIO_AltFunction(GPIO_X,ALT_FUNC0); //???????? if(INorOUT == INPUT && ENABLEorNOT ==ENABLE) { CMSDK_GPIO->OE &=~ (1<IE |= (1<OE &=~ (1<IE &=~ (1<IE &=~ (1<OE |= (1<SL = OUTPUT_SPEED; //????????? CMSDK_GPIO->ODEN = GPIO_OType; } else if(INorOUT == OUTPUT && ENABLEorNOT == DISABLE) { CMSDK_GPIO->OE &=~ (1<IE &=~ (1<PU &= ~(0x01 << GPIO_X); //???? CMSDK_GPIO->PD &= ~(0x01 << GPIO_X); //???? } else if(GPIO_PUPD==GPIO_PU) { CMSDK_GPIO->PU |= (0x01 << GPIO_X); //?? CMSDK_GPIO->PD &= ~(0x01 << GPIO_X); //???? } else if(GPIO_PUPD==GPIO_PD) { CMSDK_GPIO->PU &= ~(0x01 << GPIO_X); //???? CMSDK_GPIO->PD |= (0x01 << GPIO_X); //?? } //?????? CMSDK_GPIO->OPDRV0 &=~( 0x01 << (GPIO_X)); CMSDK_GPIO->OPDRV0 |= (OUTPUT_PDRV & 0x01) << (GPIO_X); CMSDK_GPIO->OPDRV1 &=~( 0x01 << (GPIO_X)); CMSDK_GPIO->OPDRV1 |= ((OUTPUT_PDRV >>1)&0x01) << (GPIO_X); // return 0; } //IO口输入输出设置,形参1:gpio号,形参2:输入输出选择 ,形参3:使能与否 int8_t GPIO_IO_Select(GPIO_NUM GPIO_X, I_O_SELECT INorOUT ,FunctionalState ENABLEorNOT){ if(INorOUT == INPUT && ENABLEorNOT ==ENABLE) { CMSDK_GPIO->OE &=~ (1<IE |= (1<OE &=~ (1<IE &=~ (1<IE &=~ (1<OE |= (1<OE &=~ (1<IE &=~ (1<DATAIN & (1<>GPIO_X); } //读取IO口输出状态 uint8_t GPIO_GetOutputValue(GPIO_NUM GPIO_X){ return (uint8_t)((CMSDK_GPIO->DATAOUT & (1<>GPIO_X); } //设置输出电平为高或低 void GPIO_Output(GPIO_NUM GPIO_X,LEVELStatus HIGHorLOW){ if(HIGHorLOW == HIGH_LEVEL) { CMSDK_GPIO->DATAOUT |= (1<DATAOUT &=~ (1<DATAOUT |= (1<DATAOUT &=~ (1<ANAEN |= (1 << GPIO_X); else if(ENABLEorNOT == DISABLE) CMSDK_GPIO->ANAEN &=~ (1 << GPIO_X); else return ; }