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 + -
显示快捷键?