arc_gpio.h
来自「AMLOGIC DPF source code」· C头文件 代码 · 共 166 行
H
166 行
/*******************************************************************
*
* Copyright C 2005 by Amlogic, Inc. All Rights Reserved.
*
* Description:
*
* Author: Amlogic Software
* Created: Mon Nov 14 14:26:32 2005
*
*******************************************************************/
#ifndef ARC_GPIO_H
#define ARC_GPIO_H
#define VD_IS_OUTPUT(vd_num) CLEAR_PERI_REG_MASK(PREG_GPIO_CTRL, ((1 << vd_num) << 8))
#define VD_IS_INPUT(vd_num) SET_PERI_REG_MASK(PREG_GPIO_CTRL, ((1 << vd_num) << 8))
#define SET_VD_LEVEL(vd_num,level) CLEAR_PERI_REG_MASK(PREG_GPIO_DATA, (1 << vd_num)); SET_PERI_REG_MASK(PREG_GPIO_DATA, (level << vd_num))
#define GET_VD_LEVEL(vd_num) ((READ_PERI_REG(PREG_GPIO_DATA)&((1 << vd_num) << 16))!=0)
#define IIS_IS_OUTPUT(IIS_num) (CLEAR_PERI_REG_MASK(PREG_M2_D_OE, ((1 << IIS_num) << 24)))
#define IIS_IS_INPUT(IIS_num) (SET_PERI_REG_MASK(PREG_M2_D_OE, ((1 << IIS_num) << 24)))
#define SET_IIS_LEVEL(IIS_num,level) CLEAR_PERI_REG_MASK(PREG_M2_D_LEVEL, (1 << IIS_num)); SET_PERI_REG_MASK(PREG_M2_D_LEVEL, (level << IIS_num))
#define GET_IIS_LEVEL(IIS_num) ((READ_PERI_REG(PREG_M2_D_READ)&((1 << IIS_num) << 24))!=0)
#define NGP_IS_OUTPUT(NGP_num) CLEAR_PERI_REG_MASK(PREG_M2_D_OE, ((1 << NGP_num) << 16))
#define NGP_IS_INPUT(NGP_num) SET_PERI_REG_MASK(PREG_M2_D_OE, ((1 << NGP_num) << 16))
#define SET_NGP_LEVEL(NGP_num,level) CLEAR_PERI_REG_MASK(PREG_M2_D_LEVEL, (1 << NGP_num)); SET_PERI_REG_MASK(PREG_M2_D_LEVEL, (level << NGP_num))
#define GET_NGP_LEVEL(NGP_num) ((READ_PERI_REG(PREG_M2_D_READ)&((1 << NGP_num) << 24))!=0)
#define SET_VD0_GPIO_HIGH { VD_IS_OUTPUT(0); SET_VD_LEVEL(0,1); }
#define CLEAR_VD0_GPIO_LOW { VD_IS_OUTPUT(0); SET_VD_LEVEL(0,0); }
#define SET_VD1_GPIO_HIGH { VD_IS_OUTPUT(1); SET_VD_LEVEL(1,1); }
#define CLEAR_VD1_GPIO_LOW { VD_IS_OUTPUT(1); SET_VD_LEVEL(1,0); }
#define SET_VD2_GPIO_HIGH { VD_IS_OUTPUT(2); SET_VD_LEVEL(2,1); }
#define CLEAR_VD2_GPIO_LOW { VD_IS_OUTPUT(2); SET_VD_LEVEL(2,0); }
#define SET_VD3_GPIO_HIGH { VD_IS_OUTPUT(3); SET_VD_LEVEL(3,1); }
#define CLEAR_VD3_GPIO_LOW { VD_IS_OUTPUT(3); SET_VD_LEVEL(3,0); }
#define SET_VD4_GPIO_HIGH { VD_IS_OUTPUT(4); SET_VD_LEVEL(4,1); }
#define CLEAR_VD4_GPIO_LOW { VD_IS_OUTPUT(4); SET_VD_LEVEL(4,0); }
#define SET_VD5_GPIO_HIGH { VD_IS_OUTPUT(5); SET_VD_LEVEL(5,1); }
#define CLEAR_VD5_GPIO_LOW { VD_IS_OUTPUT(5); SET_VD_LEVEL(5,0); }
#define SET_VD6_GPIO_HIGH { VD_IS_OUTPUT(6); SET_VD_LEVEL(6,1); }
#define CLEAR_VD6_GPIO_LOW { VD_IS_OUTPUT(6); SET_VD_LEVEL(6,0); }
#define SET_VD7_GPIO_HIGH { VD_IS_OUTPUT(7); SET_VD_LEVEL(7,1); }
#define CLEAR_VD7_GPIO_LOW { VD_IS_OUTPUT(7); SET_VD_LEVEL(7,0); }
#define SET_TCK_GPIO_HIGH { VD_IS_OUTPUT(8); SET_VD_LEVEL(8,1); }
#define CLEAR_TCK_GPIO_LOW { VD_IS_OUTPUT(8); SET_VD_LEVEL(8,0); }
#define SET_TMS_GPIO_HIGH { VD_IS_OUTPUT(9); SET_VD_LEVEL(9,1); }
#define CLEAR_TMS_GPIO_LOW { VD_IS_OUTPUT(9); SET_VD_LEVEL(9,0); }
#define SET_TDI_GPIO_HIGH { VD_IS_OUTPUT(10); SET_VD_LEVEL(10,1); }
#define CLEAR_TDI_GPIO_LOW { VD_IS_OUTPUT(10); SET_VD_LEVEL(10,0); }
#define SET_TDO_GPIO_HIGH { VD_IS_OUTPUT(11); SET_VD_LEVEL(11,1); }
#define CLEAR_TDO_GPIO_LOW { VD_IS_OUTPUT(11); SET_VD_LEVEL(11,0); }
#define SET_IIS0_GPIO_HIGH { IIS_IS_OUTPUT(0); SET_IIS_LEVEL(0,1); }
#define CLEAR_IIS0_GPIO_LOW { IIS_IS_OUTPUT(0); SET_IIS_LEVEL(0,0); }
#define SET_IIS1_GPIO_HIGH { IIS_IS_OUTPUT(1); SET_IIS_LEVEL(1,1); }
#define CLEAR_IIS1_GPIO_LOW { IIS_IS_OUTPUT(1); SET_IIS_LEVEL(1,0); }
#define SET_IIS2_GPIO_HIGH { IIS_IS_OUTPUT(2); SET_IIS_LEVEL(2,1); }
#define CLEAR_IIS2_GPIO_LOW { IIS_IS_OUTPUT(2); SET_IIS_LEVEL(2,0); }
#define SET_IIS3_GPIO_HIGH { IIS_IS_OUTPUT(3); SET_IIS_LEVEL(3,1); }
#define CLEAR_IIS3_GPIO_LOW { IIS_IS_OUTPUT(3); SET_IIS_LEVEL(3,0); }
#define SET_IIS4_GPIO_HIGH { IIS_IS_OUTPUT(4); SET_IIS_LEVEL(4,1); }
#define CLEAR_IIS4_GPIO_LOW { IIS_IS_OUTPUT(4); SET_IIS_LEVEL(4,0); }
#define SET_IIS5_GPIO_HIGH { IIS_IS_OUTPUT(5); SET_IIS_LEVEL(5,1); }
#define CLEAR_IIS5_GPIO_LOW { IIS_IS_OUTPUT(5); SET_IIS_LEVEL(5,0); }
#define SET_IIS6_GPIO_HIGH { IIS_IS_OUTPUT(6); SET_IIS_LEVEL(6,1); }
#define CLEAR_IIS6_GPIO_LOW { IIS_IS_OUTPUT(6); SET_IIS_LEVEL(6,0); }
#define SET_IIS7_GPIO_HIGH { IIS_IS_OUTPUT(7); SET_IIS_LEVEL(7,1); }
#define CLEAR_IIS7_GPIO_LOW { IIS_IS_OUTPUT(7); SET_IIS_LEVEL(7,0); }
#define SET_NGP0_GPIO_HIGH { NGP_IS_OUTPUT(0); SET_NGP_LEVEL(0,1); }
#define CLEAR_NGP0_GPIO_LOW { NGP_IS_OUTPUT(0); SET_NGP_LEVEL(0,0); }
#define SET_NGP1_GPIO_HIGH { NGP_IS_OUTPUT(1); SET_NGP_LEVEL(1,1); }
#define CLEAR_NGP1_GPIO_LOW { NGP_IS_OUTPUT(1); SET_NGP_LEVEL(1,0); }
#define SET_NGP2_GPIO_HIGH { NGP_IS_OUTPUT(2); SET_NGP_LEVEL(2,1); }
#define CLEAR_NGP2_GPIO_LOW { NGP_IS_OUTPUT(2); SET_NGP_LEVEL(2,0); }
#define SET_NGP3_GPIO_HIGH { NGP_IS_OUTPUT(3); SET_NGP_LEVEL(3,1); }
#define CLEAR_NGP3_GPIO_LOW { NGP_IS_OUTPUT(3); SET_NGP_LEVEL(3,0); }
#define SET_NGP4_GPIO_HIGH { NGP_IS_OUTPUT(4); SET_NGP_LEVEL(4,1); }
#define CLEAR_NGP4_GPIO_LOW { NGP_IS_OUTPUT(4); SET_NGP_LEVEL(4,0); }
#define SET_NGP5_GPIO_HIGH { NGP_IS_OUTPUT(5); SET_NGP_LEVEL(5,1); }
#define CLEAR_NGP5_GPIO_LOW { NGP_IS_OUTPUT(5); SET_NGP_LEVEL(5,0); }
#define SET_TX_GPIO_HIGH { NGP_IS_OUTPUT(6); SET_NGP_LEVEL(6,1); }
#define CLEAR_TX_GPIO_LOW { NGP_IS_OUTPUT(6); SET_NGP_LEVEL(6,0); }
#define SET_RX_GPIO_HIGH { NGP_IS_OUTPUT(7); SET_NGP_LEVEL(7,1); }
#define CLEAR_RX_GPIO_LOW { NGP_IS_OUTPUT(7); SET_NGP_LEVEL(7,0); }
#define GET_VD0_GPIO(VD_Value) { VD_IS_INPUT(0); VD_Value = GET_VD_LEVEL(0); }
#define GET_VD1_GPIO(VD_Value) { VD_IS_INPUT(1); VD_Value = GET_VD_LEVEL(1); }
#define GET_VD2_GPIO(VD_Value) { VD_IS_INPUT(2); VD_Value = GET_VD_LEVEL(2); }
#define GET_VD3_GPIO(VD_Value) { VD_IS_INPUT(3); VD_Value = GET_VD_LEVEL(3); }
#define GET_VD4_GPIO(VD_Value) { VD_IS_INPUT(4); VD_Value = GET_VD_LEVEL(4); }
#define GET_VD5_GPIO(VD_Value) { VD_IS_INPUT(5); VD_Value = GET_VD_LEVEL(5); }
#define GET_VD6_GPIO(VD_Value) { VD_IS_INPUT(6); VD_Value = GET_VD_LEVEL(6); }
#define GET_VD7_GPIO(VD_Value) { VD_IS_INPUT(7); VD_Value = GET_VD_LEVEL(7); }
#define GET_TCK_GPIO(VD_Value) { VD_IS_INPUT(8); VD_Value = GET_VD_LEVEL(8); }
#define GET_TMS_GPIO(VD_Value) { VD_IS_INPUT(9); VD_Value = GET_VD_LEVEL(9); }
#define GET_TDI_GPIO(VD_Value) { VD_IS_INPUT(10); VD_Value = GET_VD_LEVEL(10); }
// moutain 2003-10-29 11:10
#define GET_IIS0_GPIO(IIS_Value) { IIS_IS_INPUT(0); IIS_Value = GET_IIS_LEVEL(0); }
#define GET_IIS1_GPIO(IIS_Value) { IIS_IS_INPUT(1); IIS_Value = GET_IIS_LEVEL(1); }
#define GET_IIS2_GPIO(IIS_Value) { IIS_IS_INPUT(2); IIS_Value = GET_IIS_LEVEL(2); }
#define GET_IIS3_GPIO(IIS_Value) { IIS_IS_INPUT(3); IIS_Value = GET_IIS_LEVEL(3); }
#define GET_IIS4_GPIO(IIS_Value) { IIS_IS_INPUT(4); IIS_Value = GET_IIS_LEVEL(4); }
#define GET_IIS5_GPIO(IIS_Value) { IIS_IS_INPUT(5); IIS_Value = GET_IIS_LEVEL(5); }
#define GET_IIS6_GPIO(IIS_Value) { IIS_IS_INPUT(6); IIS_Value = GET_IIS_LEVEL(6); }
#define GET_IIS7_GPIO(IIS_Value) { IIS_IS_INPUT(7); IIS_Value = GET_IIS_LEVEL(7); }
//frank,2004-4-21 10:29
#define GET_NGP0_GPIO(NGP_Value) { NGP_IS_INPUT(0); NGP_Value = GET_NGP_LEVEL(0); }
#define GET_NGP1_GPIO(NGP_Value) { NGP_IS_INPUT(1); NGP_Value = GET_NGP_LEVEL(1); }
#define GET_NGP2_GPIO(NGP_Value) { NGP_IS_INPUT(2); NGP_Value = GET_NGP_LEVEL(2); }
#define GET_NGP3_GPIO(NGP_Value) { NGP_IS_INPUT(3); NGP_Value = GET_NGP_LEVEL(3); }
#define GET_NGP4_GPIO(NGP_Value) { NGP_IS_INPUT(4); NGP_Value = GET_NGP_LEVEL(4); }
#define GET_NGP5_GPIO(NGP_Value) { NGP_IS_INPUT(5); NGP_Value = GET_NGP_LEVEL(5); }
#define GET_TX_GPIO(NGP_Value) { NGP_IS_INPUT(6); NGP_Value = GET_NGP_LEVEL(6); }
#define GET_RX_GPIO(NGP_Value) { NGP_IS_INPUT(7); NGP_Value = GET_NGP_LEVEL(7); }
//use the M2_D as gpio ,you must enable it ,set 0x1200004 (*GPIO_CTRL)'s bit 24~29 (M2_D10 ~ M2_D15)
#define ENABLE_M2_AS_GPIO(md_num) SET_PERI_REG_MASK(PREG_GPIO_CTRL, ((1 << md_num) << 24) ) //md_num from 0~5, means M2_D10 ~ M2_D15
#define DISABLE_M2_AS_GPIO(md_num) CLEAR_PERI_REG_MASK(PREG_GPIO_CTRL, ((1 << md_num) << 24) ) //md_num from 0~5, means M2_D10 ~ M2_D15
#define MD_IS_OUTPUT(md_num) CLEAR_PERI_REG_MASK(PREG_M2_D_OE, (1 << md_num ))
#define MD_IS_INPUT(md_num) SET_PERI_REG_MASK(PREG_M2_D_OE, (1 << md_num ))
#define SET_MD_LEVEL(md_num,level) CLEAR_PERI_REG_MASK(PREG_M2_D_LEVEL, (1 << md_num)); SET_PERI_REG_MASK(PREG_M2_D_LEVEL, (level << md_num))
#define GET_MD_LEVEL(md_num) ((READ_PERI_REG(PREG_M2_D_READ)&(1<<md_num))!=0)
#define GET_M2_D10_GPIO(md_value) ENABLE_M2_AS_GPIO(0); MD_IS_INPUT(0) ; md_value = GET_MD_LEVEL(0)
#define GET_M2_D11_GPIO(md_value) ENABLE_M2_AS_GPIO(1); MD_IS_INPUT(1) ; md_value = GET_MD_LEVEL(1)
#define GET_M2_D12_GPIO(md_value) ENABLE_M2_AS_GPIO(2); MD_IS_INPUT(2) ; md_value = GET_MD_LEVEL(2)
#define GET_M2_D13_GPIO(md_value) ENABLE_M2_AS_GPIO(3); MD_IS_INPUT(3) ; md_value = GET_MD_LEVEL(3)
#define GET_M2_D14_GPIO(md_value) ENABLE_M2_AS_GPIO(4); MD_IS_INPUT(4) ; md_value = GET_MD_LEVEL(4)
#define GET_M2_D15_GPIO(md_value) ENABLE_M2_AS_GPIO(5); MD_IS_INPUT(5) ; md_value = GET_MD_LEVEL(5)
#define SET_M2_D10_GPIO ENABLE_M2_AS_GPIO(0); MD_IS_OUTPUT(0) ; SET_MD_LEVEL(0,1)
#define CLEAR_M2_D10_GPIO ENABLE_M2_AS_GPIO(0); MD_IS_OUTPUT(0) ; SET_MD_LEVEL(0,0)
#define SET_M2_D11_GPIO ENABLE_M2_AS_GPIO(1); MD_IS_OUTPUT(1) ; SET_MD_LEVEL(1,1)
#define CLEAR_M2_D11_GPIO ENABLE_M2_AS_GPIO(1); MD_IS_OUTPUT(1) ; SET_MD_LEVEL(1,0)
#define SET_M2_D12_GPIO ENABLE_M2_AS_GPIO(2); MD_IS_OUTPUT(2) ; SET_MD_LEVEL(2,1)
#define CLEAR_M2_D12_GPIO ENABLE_M2_AS_GPIO(2); MD_IS_OUTPUT(2) ; SET_MD_LEVEL(2,0)
#define SET_M2_D13_GPIO ENABLE_M2_AS_GPIO(3); MD_IS_OUTPUT(3) ; SET_MD_LEVEL(3,1)
#define CLEAR_M2_D13_GPIO ENABLE_M2_AS_GPIO(3); MD_IS_OUTPUT(3) ; SET_MD_LEVEL(3,0)
#define SET_M2_D14_GPIO ENABLE_M2_AS_GPIO(4); MD_IS_OUTPUT(4) ; SET_MD_LEVEL(4,1)
#define CLEAR_M2_D14_GPIO ENABLE_M2_AS_GPIO(4); MD_IS_OUTPUT(4) ; SET_MD_LEVEL(4,0)
#define SET_M2_D15_GPIO ENABLE_M2_AS_GPIO(5); MD_IS_OUTPUT(5) ; SET_MD_LEVEL(5,1)
#define CLEAR_M2_D15_GPIO ENABLE_M2_AS_GPIO(5); MD_IS_OUTPUT(5) ; SET_MD_LEVEL(5,0)
//use this two gpio you must to set 0x1200004 (*GPIO_CTRL)&= 0x28 (bit2-5 1x1x)
#define ENABLE_EOE_n_AS_GPIO *((volatile unsigned long *)(PERI_BASE_ADDR+0x04)) |= 0x8 ;//bit2,bit3 = 1x
#define ENABLE_ECS_n_AS_GPIO *((volatile unsigned long *)(PERI_BASE_ADDR+0x04)) |= 0x20 ;//bit4,bit5 = 1x
#define SET_M1_EOE_n_GPIO { ENABLE_EOE_n_AS_GPIO; SET_VD_LEVEL(12,1); }
#define CLEAR_M1_EOE_n_GPIO { ENABLE_EOE_n_AS_GPIO; SET_VD_LEVEL(12,0); }
#define SET_M1_ECS_n_GPIO { ENABLE_ECS_n_AS_GPIO; SET_VD_LEVEL(13,1); }
#define CLEAR_M1_ECS_n_GPIO { ENABLE_ECS_n_AS_GPIO; SET_VD_LEVEL(13,0); }
/* Delays at a granularity of 100 usecs if TIMER_BASE is set to 2700 */
#define DELAY(d) {for(int rtc_start = PRECISE_CUR_TIME; PRECISE_CUR_TIME<(rtc_start+d); ) ; }
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?