173 lines
4.0 KiB
C
173 lines
4.0 KiB
C
|
|
/*
|
|||
|
|
*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<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE |= (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == INPUT && ENABLEorNOT ==DISABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->OE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == OUTPUT && ENABLEorNOT ==ENABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->OE |= (1<<GPIO_X);
|
|||
|
|
//??????,??
|
|||
|
|
CMSDK_GPIO->SL = OUTPUT_SPEED;
|
|||
|
|
//?????????
|
|||
|
|
CMSDK_GPIO->ODEN = GPIO_OType;
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == OUTPUT && ENABLEorNOT == DISABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->OE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//???????
|
|||
|
|
if(GPIO_PUPD==GPIO_NOPULL)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->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<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE |= (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == INPUT && ENABLEorNOT ==DISABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->OE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == OUTPUT && ENABLEorNOT ==ENABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->OE |= (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(INorOUT == OUTPUT && ENABLEorNOT == DISABLE)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->OE &=~ (1<<GPIO_X);
|
|||
|
|
CMSDK_GPIO->IE &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
return -1;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//读取IO口输入状态
|
|||
|
|
uint8_t GPIO_GetInputValue(GPIO_NUM GPIO_X){
|
|||
|
|
return (uint8_t)((CMSDK_GPIO->DATAIN & (1<<GPIO_X))>>GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//读取IO口输出状态
|
|||
|
|
uint8_t GPIO_GetOutputValue(GPIO_NUM GPIO_X){
|
|||
|
|
return (uint8_t)((CMSDK_GPIO->DATAOUT & (1<<GPIO_X))>>GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置输出电平为高或低
|
|||
|
|
void GPIO_Output(GPIO_NUM GPIO_X,LEVELStatus HIGHorLOW){
|
|||
|
|
if(HIGHorLOW == HIGH_LEVEL)
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->DATAOUT |= (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CMSDK_GPIO->DATAOUT &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置输出电平为高
|
|||
|
|
void GPIO_SetOutput(GPIO_NUM GPIO_X){
|
|||
|
|
CMSDK_GPIO->DATAOUT |= (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置输出电平为低
|
|||
|
|
void GPIO_ResetOutput(GPIO_NUM GPIO_X){
|
|||
|
|
CMSDK_GPIO->DATAOUT &=~ (1<<GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//IO反转
|
|||
|
|
void GPIO_Overturn(GPIO_NUM GPIO_X){
|
|||
|
|
if(GPIO_GetOutputValue(GPIO_X) == HIGH_LEVEL)
|
|||
|
|
{
|
|||
|
|
GPIO_ResetOutput(GPIO_X);
|
|||
|
|
}
|
|||
|
|
else if(GPIO_GetOutputValue(GPIO_X) == LOW_LEVEL)
|
|||
|
|
{
|
|||
|
|
GPIO_SetOutput(GPIO_X);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//模拟功能使能失能
|
|||
|
|
void GPIO_AnalogChannel_Control(GPIO_NUM GPIO_X ,FunctionalState ENABLEorNOT )
|
|||
|
|
{
|
|||
|
|
if(ENABLEorNOT == ENABLE)
|
|||
|
|
CMSDK_GPIO->ANAEN |= (1 << GPIO_X);
|
|||
|
|
else if(ENABLEorNOT == DISABLE)
|
|||
|
|
CMSDK_GPIO->ANAEN &=~ (1 << GPIO_X);
|
|||
|
|
else
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|