csl_gpioaux.h
来自「dsp在音频处理中的运用」· C头文件 代码 · 共 259 行
H
259 行
#ifndef _CSL_GPIOAUX_H
#define _CSL_GPIOAUX_H
#include <cslr_gpio.h>
#include <csl_gpio.h>
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioReset(
CSL_GpioHandle hGpio
)
{
CSL_FINS(hGpio->regs->SYSCONFIG, GPIO_SYSCONFIG_SOFTRESET, 1);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioWakeupEnableGlobal(
CSL_GpioHandle hGpio
)
{
CSL_FINS(hGpio->regs->SYSCONFIG,GPIO_SYSCONFIG_ENAWAKEUP,1);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioWakeupDisbaleGlobal(
CSL_GpioHandle hGpio
)
{
CSL_FINS(hGpio->regs->SYSCONFIG,GPIO_SYSCONFIG_ENAWAKEUP,0);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioSetIdleMode(
CSL_GpioHandle hGpio,
CSL_GpioIdleMode idleMode
)
{
CSL_FINS(hGpio->regs->SYSCONFIG,GPIO_SYSCONFIG_IDLEMODE,idleMode);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioSetDirection(
CSL_GpioHandle hGpio,
Uint16 pinVector,
Uint16 dir
)
{
if(dir==1)
{
hGpio->regs->DIRECTION |= pinVector ;
}
else
{
hGpio->regs->DIRECTION &= ~pinVector ;
}
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioSetData(
CSL_GpioHandle hGpio,
Uint16 pin
)
{
hGpio->regs->SET_DATAOUT |= 1<<pin ;
}
/*------------------------------------------------------------------------*/
static inline
Uint16 CSL_gpioReadData(
CSL_GpioHandle hGpio
)
{
return(hGpio->regs->DATAIN);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioIntEnable(
CSL_GpioHandle hGpio,
Uint16 pinVector,
Uint16 lineno
)
{
if(lineno==1)
{
hGpio->regs->SET_IRQENABLE1 |= pinVector ;
}
else
{
hGpio->regs->SET_IRQENABLE2 |= pinVector ;
}
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioWakeupEnable(
CSL_GpioHandle hGpio,
Uint16 pinVector
)
{
hGpio->regs->SET_WAKEUPENA |= pinVector ;
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioIntDisable(
CSL_GpioHandle hGpio,
Uint16 pinVector,
Uint16 intno
)
{
if(intno==1)
{
hGpio->regs->CLEAR_IRQENABLE1 = (Uint32)((hGpio->regs->CLEAR_IRQENABLE1 & 0x00000000 ) | pinVector);
}
else
{
hGpio->regs->CLEAR_IRQENABLE2 = (Uint32)((hGpio->regs->CLEAR_IRQENABLE2 & 0x00000000 ) | pinVector) ;
}
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioWakeupDisable(
CSL_GpioHandle hGpio,
Uint16 pinVector
)
{
hGpio->regs->CLEAR_WAKEUPENA = (Uint32)((hGpio->regs->CLEAR_WAKEUPENA & 0x00000000) | pinVector) ;
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioSetEdge(
CSL_GpioHandle hGpio,
Uint16 pinVector,
CSL_GpioEdge detect_type
)
{
/* Pins 1-8 are in the EDGE_CTRL1 and 9-16 are in the EDGE_CTRL2
Hence using this bit mask all of them can be programmed in one go */
if(pinVector & CSL_GPIO_PIN1)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN1, detect_type);
if(pinVector & CSL_GPIO_PIN2)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN2, detect_type);
if(pinVector & CSL_GPIO_PIN3)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN3, detect_type);
if(pinVector & CSL_GPIO_PIN4)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN4, detect_type);
if(pinVector & CSL_GPIO_PIN5)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN5, detect_type);
if(pinVector & CSL_GPIO_PIN6)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN6, detect_type);
if(pinVector & CSL_GPIO_PIN7)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN7, detect_type);
if(pinVector & CSL_GPIO_PIN8)
CSL_FINS(hGpio->regs->EDGE_CTRL1, GPIO_EDGE_CTRL1_PIN8, detect_type);
if(pinVector & CSL_GPIO_PIN9)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN9, detect_type);
if(pinVector & CSL_GPIO_PIN10)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN10, detect_type);
if(pinVector & CSL_GPIO_PIN11)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN11, detect_type);
if(pinVector & CSL_GPIO_PIN12)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN12, detect_type);
if(pinVector & CSL_GPIO_PIN13)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN13, detect_type);
if(pinVector & CSL_GPIO_PIN14)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN14, detect_type);
if(pinVector & CSL_GPIO_PIN15)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN15, detect_type);
if(pinVector & CSL_GPIO_PIN16)
CSL_FINS(hGpio->regs->EDGE_CTRL2, GPIO_EDGE_CTRL2_PIN16, detect_type);
}
/*------------------------------------------------------------------------*/
static inline
void CSL_gpioClearData(
CSL_GpioHandle hGpio,
Uint16 pin
)
{
hGpio->regs->CLEAR_DATAOUT = (Uint32)((hGpio->regs->CLEAR_DATAOUT & 0x00000000 ) | (1<<pin)) ;
}
/*------------------------------------------------------------------------*/
static inline
Uint16 CSL_gpioGetRevision(
CSL_GpioHandle hGpio
)
{
return (hGpio->regs->REVISION) ;
}
/*------------------------------------------------------------------------*/
static inline
CSL_GpioResetStatus CSL_gpioGetResetStatus(
CSL_GpioHandle hGpio
)
{
return (CSL_GpioResetStatus)(CSL_FEXT(hGpio->regs->SYSSTATUS, GPIO_SYSSTATUS_RESETDONE));
}
/*------------------------------------------------------------------------*/
static inline
CSL_BitMask16 CSL_gpioGetIrqStatus1(
CSL_GpioHandle hGpio
)
{
return (hGpio->regs->IRQSTATUS1);
}
/*------------------------------------------------------------------------*/
static inline
CSL_BitMask16 CSL_gpioGetIrqStatus2(
CSL_GpioHandle hGpio
)
{
return (hGpio->regs->IRQSTATUS2);
}
/*------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?