📄 mx1_gpio.h
字号:
/*
* mx1_gpio.h
* Define the register sets of General Purpose I/O Ports
* Date : 2004/02/13
* By : Zhang Jing
*/
#ifndef MX1_GPIO_H
#define MX1_GPIO_H
#include "mx1.h"
#ifdef MX1_GPIO_FLAG
#define MX1_GPIO_EXT
#else
#define MX1_GPIO_EXT extern
#endif
typedef struct struct_mx1_gpio{
mx1_reg DDIR;
mx1_reg OCR1;
mx1_reg OCR2;
mx1_reg ICONFA1;
mx1_reg ICONFA2;
mx1_reg ICONFB1;
mx1_reg ICONFB2;
mx1_reg DR;
mx1_reg GIUS;
mx1_reg SSR;
mx1_reg ICR1;
mx1_reg ICR2;
mx1_reg IMR;
mx1_reg ISR;
mx1_reg GPR;
mx1_reg SWR;
mx1_reg PUEN;
} T_MX1_GPIO;
// Base address of four io ports
#define MX1_GPIO_PA ((T_MX1_GPIO*)0xf021C000)
#define MX1_GPIO_PB ((T_MX1_GPIO*)0xf021C100)
#define MX1_GPIO_PC ((T_MX1_GPIO*)0xf021C200)
#define MX1_GPIO_PD ((T_MX1_GPIO*)0xf021C300)
/* Not all port pins are usable, the usable pins are set in the definition
* Now there are 110 pins are usable
*/
#define MX1_GPIO_PA_USABLE 0xffffffff
#define MX1_GPIO_PB_USABLE 0xffffff00
#define MX1_GPIO_PC_USABLE 0xfffbfff8
#define MX1_GPIO_PD_USABLE 0xffffffc0
#define DDIR_SET( port, value ) do{ port->DDIR = (value); }while(0)
#define DDIR_OUT( port, pin ) do{ port->DDIR |= 0x1<<(pin); }while(0)
#define DDIR_IN( port, pin ) do{ port->DDIR &= ~(0x1<<(pin)); }while(0)
/**********************************************
* Operations to the GPIO Output Configuration Registers
**********************************************/
#define OCR_SET( port, value1, value2 ) do{ port->OCR1 = (value1); port->OCR2 = (value2); }while(0)
#define OCR_SEL_A( port, pin ) do{ if( (pin)<16 ) port->OCR1 &= ~((0x3)<<(2*(pin))); else if( (pin)<32&&(pin)>=16 ) port->OCR2 &= ~((0x3)<<(2*(pin)-32)); }while(0)
#define OCR_SEL_B( port, pin ) do{ if( (pin)<16 ){ port->OCR1 &= ~((0x3)<<(2*(pin))); port->OCR1 |= (0x1)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->OCR2 &= ~((0x3)<<(2*(pin)-32)); port->OCR2 |= (0x1)<<(2*(pin)-32); }}while(0)
#define OCR_SEL_C( port, pin ) do{ if( (pin)<16 ){ port->OCR1 &= ~((0x3)<<(2*(pin))); port->OCR1 |= (0x2)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->OCR2 &= ~((0x3)<<(2*(pin)-32)); port->OCR2 |= (0x2)<<(2*(pin)-32); } }while(0)
#define OCR_SEL_DR( port, pin ) do{ if( (pin)<16 ) port->OCR1 |= (0x3)<<(2*(pin)); else if( (pin)<32&&(pin)>=16 ) port->OCR2 |= (0x3)<<(2*(pin)-32); }while(0)
/***************************************
* Operations to Input Configuration Registers A
***************************************/
#define ICONFA_SET( port, value1, value2 ) do{ port->ICONFA1 = (value1); port->ICONFA2 = (value2); }while(0)
#define ICONFA_SEL_IN( port, pin ) do{ if( (pin)<16 ) port->ICONFA1 &= ~((0x3)<<(2*(pin))); else if( (pin)<32&&(pin)>=16 ) port->ICONFA2 &= ~((0x3)<<(2*(pin)-32)); }while(0)
#define ICONFA_SEL_ISR( port, pin ) do{ if( (pin)<16 ){ port->ICONFA1 &= ~((0x3)<<(2*(pin))); port->ICONFA1 |= (0x1)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->ICONFA2 &= ~((0x3)<<(2*(pin)-32)); port->ICONFA2 |= (0x1)<<(2*(pin)-32); } }while(0)
#define ICONFA_SEL_0( port, pin ) do{ if( (pin)<16 ){ port->ICONFA1 &= ~((0x3)<<(2*(pin))); port->ICONFA1 |= (0x2)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->ICONFA2 &= ~((0x3)<<(2*(pin)-32)); port->ICONFA2 |= (0x2)<<(2*(pin)-32); } }while(0)
#define ICONFA_SEL_1( port, pin ) do{ if( (pin)<16 ) port->ICONFA1 |= (0x3)<<(2*(pin)); else if( (pin)<32&&(pin)>=16 ) port->ICONFA2 |= (0x3)<<(2*(pin)-32); }while(0)
/***************************************
* Operations to Input Configuration Registers B
***************************************/
#define ICONFB_SET( port, value1, value2 ) do{ port->ICONFB1 = (value1); port->ICONFB2 = (value2); }while(0)
#define ICONFB_SEL_IN( port, pin ) do{ if( (pin)<16 ) port->ICONFB1 &= ~((0x3)<<(2*(pin))); else if( (pin)<32&&(pin)>=16 ) port->ICONFB2 &= ~((0x3)<<(2*(pin)-32)); }while(0)
#define ICONFB_SEL_ISR( port, pin ) do{ if( (pin)<16 ){ port->ICONFB1 &= ~((0x3)<<(2*(pin))); port->ICONFB1 |= (0x1)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->ICONFB2 &= ~((0x3)<<(2*(pin)-32)); port->ICONFB2 |= (0x1)<<(2*(pin)-32); } }while(0)
#define ICONFB_SEL_0( port, pin ) do{ if( (pin)<16 ){ port->ICONFB1 &= ~((0x3)<<(2*(pin))); port->ICONFB1 |= (0x2)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->ICONFB2 &= ~((0x3)<<(2*(pin)-32)); port->ICONFB2 |= (0x2)<<(2*(pin)-32); }}while(0)
#define ICONFB_SEL_1( port, pin ) do{ if( (pin)<16 ) port->ICONFB1 |= (0x3)<<(2*(pin)); else if( (pin)<32&&(pin)>=16 ) port->ICONFB2 |= (0x3)<<(2*(pin)-32); }while(0)
/*****************************
* Operations to GPIO Data Register
*****************************/
#define DR_SET( port, value ) do{ port->DR = (value); }while(0)
#define DR_LOW( port, pin ) do{ port->DR &= ~ (1<<(pin)); }while(0)
#define DR_HIGH( port, pin ) do{ port->DR |= 1<<(pin); }while(0)
/*******************************
* Operations to GPIO In Use Register
*******************************/
#define GIUS_SET( port, value ) do{ port->GIUS = (value); }while(0)
#define GIUS_FOR_MUX( port, pin ) do{ port->GIUS &= ~(1<<(pin)); }while(0)
#define GIUS_FOR_IO( port, pin ) do{ port->GIUS |= 1<<(pin); }while(0)
/*************************************
* Operations to GPIO Sample Status Register
*************************************/
#define SSR_GET( port ) ( port->SSR )
#define SSR_READ( port, pin ) ( ((port->SSR)>>(pin))&0x1 )
/***************************************
* Operations to Interrupt Configuration Registers
***************************************/
#define ICR_SET( port, value1, value2 ) do{ port->ICR1 = (value1); port->ICR2 = (value2); }while(0)
#define ICR_POS_EDGE( port, pin ) do{ if( (pin)<16 ) port->ICR1 &= ~((0x3)<<(2*(pin))); else if( (pin)<32&&(pin)>=16 ) port->ICR2 &= ~((0x3)<<(2*(pin)-32)); }while(0)
#define ICR_NEG_EDGE( port, pin ) do{ if( (pin)<16 ){ port->ICR1 &= ~((0x3)<<(2*(pin))); port->ICR1 |= (0x1)<<(2*(pin)); } else if( (pin)<32&&(pin)>=16 ){ port->ICR2 &= ~((0x3)<<(2*(pin)-32)); port->ICR2 |= (0x1)<<(2*(pin)-32); }}while(0)
#define ICR_POS_LEVEL( port, pin ) do{ if( (pin)<16 ){ port->ICR1 &= ~((0x3)<<(2*(pin))); port->ICR1 |= (0x2)<<(2*(pin)); }else if( (pin)<32&&(pin)>=16 ){ port->ICR2 &= ~((0x3)<<(2*(pin)-32)); port->ICR2 |= (0x2)<<(2*(pin)-32); }}while(0)
#define ICR_NEG_LEVEL( port, pin ) do{ if( (pin)<16 ) port->ICR1 |= (0x3)<<(2*(pin)); else if( (pin)<32&&(pin)>=16 ) port->ICR2 |= (0x3)<<(2*(pin)-32); }while(0)
/*************************************
* Operations to GPIO Interrupt Mask Register
*************************************/
#define IMR_SET( port, value ) do{ port->IMR = (value); }while( 0 )
#define IMR_MASK( port, pin ) do{ port->IMR &= ~(1<<(pin)); }while(0)
#define IMR_UMASK( port, pin ) do{ port->IMR |= 1<<(pin); }while(0)
/***************************************
* Operations to GPIO Interrupt Status Register
***************************************/
#define ISR_SET( port, value ) do{ port->ISR = (value); }while(0)
#define ISR_INT_OCCUR( port, pin ) (((port->ISR)>>(pin))&0x1)
#define ISR_INT_CLEAR( port, pin ) do{ port->ISR = 1<<(pin); }while(0)
/***************************************
* Operations to GPIO General Purpose Register
***************************************/
#define GPR_SET( port, value ) do{ port->GPR = (value); }while(0)
#define GPR_SEL_PRI( port, pin ) do{ port->GPR &= ~(1<<(pin)); }while(0)
#define GPR_SEL_ALT( port, pin ) do{ port->GPR |= 1<<(pin); }while(0)
/**************************************
* Operations to GPIO Software Reset Register
**************************************/
#define SWR_RESET( port ) do{ port->SWR = 0x1; }while(0)
/**************************************
* Operations to GPIO Pull_Up Enable Register
**************************************/
#define PUEN_SET( port, value ) do{ port->PUEN = (value); }while(0)
#define PUEN_ENABLE( port, pin ) do{ port->PUEN |= 1<<(pin); }while(0)
#define PUEN_DISABLE( port, pin ) do{ port->PUEN &= ~(1<<(pin)); }while(0)
/*---------------------------------------------*/
//Define the parameters passed to gpio common functions
// Data direction constant
#define DIR_IN (1<<0)
#define DIR_OUT (1<<1)
// pins function
#define FUNC_IO (1<<0)
#define FUNC_PRI (1<<1)
#define FUNC_ALT (1<<2)
// input or output source
#define SRC_IN_ANY (0<<0)
#define SRC_IN_GPIO (1<<0)
#define SRC_IN_INTSTA (1<<1)
#define SRC_IN_0 (1<<2)
#define SRC_IN_1 (1<<3)
#define SRC_OUT_ANY (0<<0)
#define SRC_OUT_A (1<<0)
#define SRC_OUT_B (1<<1)
#define SRC_OUT_C (1<<2)
#define SRC_OUT_DR (1<<3)
/*
* Function prototype
*/
MX1_GPIO_EXT void MX1_GPIO_Init( T_MX1_GPIO *port );
MX1_GPIO_EXT int MX1_GPIO_Conf(T_MX1_GPIO * port, unsigned char pin, unsigned char func, unsigned char dir, unsigned char src);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -