AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
gpioprm.c

GPIO Primitive

GPIO Primitive Layer

none

AXELL CORPORATION

2017_02_22 初版 

2017_10_26 Ver2.0 

2021_01_29 [SDK3.2] GPIOポートの排他制御を有効にしたときのアセンブラルーチンを修正 (#2844)

1: 10: 11: 15: 16: 17: #include "AG903_errno.h" 18: #include "AG903_common.h" 19: #include "gpio/gpioprm.h" 20: #include "register/AG903_gpioreg.h" 21: 22: 23: extern void GPIOPrm_ModifyBit(uintptr_t addr, uint32_t set, uint32_t clr); 24: 25: 33: void AG903_GPIOPrmSetByteData(uint8_t ch, uint8_t offset, uint8_t data) 34: { 35: uint8_t* reg; 36: 37: ASSERT(AG903_GPIO_CH_NUM > ch); 38: ASSERT((AG903_GPIO_PORTBIT_NUM/8) > offset); 39: 40: reg = (uint8_t*)&AG903_GPIOn(ch)->DTOUT; 41: reg += offset; 42: (*reg) = data; 43: return; 44: } 45: 46: 54: void AG903_GPIOPrmGetByteData(uint8_t ch, uint8_t offset, uint8_t* data) 55: { 56: uint8_t* reg; 57: 58: ASSERT(AG903_GPIO_CH_NUM > ch); 59: ASSERT((AG903_GPIO_PORTBIT_NUM/8) > offset); 60: 61: reg = (uint8_t*)&AG903_GPIOn(ch)->DTIN; 62: reg += offset; 63: (*data) = (*reg); 64: return; 65: } 66: 67: 76: void AG903_GPIOPrmModifyBit(uint8_t ch, uint32_t set, uint32_t clr, _Bool ext) 77: { 78: uint32_t reg; 79: 80: ASSERT(AG903_GPIO_CH_NUM > ch); 81: 82: if(true == ext) { 83: GPIOPrm_ModifyBit((uintptr_t)(&AG903_GPIOn(ch)->DTOUT), set, ~clr); 84: } 85: else { 86: reg = AG903_GPIOn(ch)->DTOUT; 87: reg |= set; 88: reg &= ~clr; 89: AG903_GPIOn(ch)->DTOUT = reg; 90: } 91: 92: return; 93: } 94: 95: 102: void AG903_GPIOPrmGetPortData(uint8_t ch, uint32_t* data) 103: { 104: ASSERT(AG903_GPIO_CH_NUM > ch); 105: 106: (*data) = AG903_GPIOn(ch)->DTIN; 107: return; 108: } 109: 110: 117: void AG903_GPIOPrmSetDirection(uint8_t ch, uint32_t dir) 118: { 119: ASSERT(AG903_GPIO_CH_NUM > ch); 120: 121: AG903_GPIOn(ch)->DIR = dir; 122: return; 123: } 124: 125: 132: void AG903_GPIOPrmGetDirection(uint8_t ch, uint32_t* dir) 133: { 134: ASSERT(AG903_GPIO_CH_NUM > ch); 135: 136: (*dir) = AG903_GPIOn(ch)->DIR; 137: return; 138: } 139: 140: 147: void AG903_GPIOPrmSetType(uint8_t ch, uint32_t type) 148: { 149: ASSERT(AG903_GPIO_CH_NUM > ch); 150: 151: AG903_GPIOn(ch)->IOTYPE = type; 152: return; 153: } 154: 155: 162: void AG903_GPIOPrmGetType(uint8_t ch, uint32_t* type) 163: { 164: ASSERT(AG903_GPIO_CH_NUM > ch); 165: 166: (*type) = AG903_GPIOn(ch)->IOTYPE; 167: return; 168: } 169: 170: 177: void AG903_GPIOPrmSetPosEdgeDetect(uint8_t ch, uint32_t enable) 178: { 179: ASSERT(AG903_GPIO_CH_NUM > ch); 180: 181: AG903_GPIOn(ch)->POSEDGE = enable; 182: return; 183: } 184: 185: 192: void AG903_GPIOPrmGetPosEdgeDetect(uint8_t ch, uint32_t* enable) 193: { 194: ASSERT(AG903_GPIO_CH_NUM > ch); 195: 196: (*enable) = AG903_GPIOn(ch)->POSEDGE; 197: return; 198: } 199: 200: 207: void AG903_GPIOPrmSetNegEdgeDetect(uint8_t ch, uint32_t enable) 208: { 209: ASSERT(AG903_GPIO_CH_NUM > ch); 210: 211: AG903_GPIOn(ch)->NEGEDGE = enable; 212: return; 213: } 214: 215: 222: void AG903_GPIOPrmGetNegEdgeDetect(uint8_t ch, uint32_t* enable) 223: { 224: ASSERT(AG903_GPIO_CH_NUM > ch); 225: 226: (*enable) = AG903_GPIOn(ch)->NEGEDGE; 227: return; 228: } 229: 230: 237: void AG903_GPIOPrmSetMask(uint8_t ch, uint32_t mask) 238: { 239: ASSERT(AG903_GPIO_CH_NUM > ch); 240: 241: AG903_GPIOn(ch)->INTMASK = mask; 242: return; 243: } 244: 245: 252: void AG903_GPIOPrmGetMask(uint8_t ch, uint32_t* mask) 253: { 254: ASSERT(AG903_GPIO_CH_NUM > ch); 255: 256: (*mask) = AG903_GPIOn(ch)->INTMASK; 257: return; 258: } 259: 260: 267: void AG903_GPIOPrmGetEdgeDetect(uint8_t ch, uint32_t* status) 268: { 269: ASSERT(AG903_GPIO_CH_NUM > ch); 270: 271: (*status) = AG903_GPIOn(ch)->EDGESTAT; 272: return; 273: } 274: 275: 282: void AG903_GPIOPrmClearEdgeDetect(uint8_t ch, uint32_t clrbit) 283: { 284: ASSERT(AG903_GPIO_CH_NUM > ch); 285: 286: AG903_GPIOn(ch)->EDGECLR = clrbit; 287: return; 288: }
 
名前 
説明 
 
GPIOnEDGECLRのレジスタWrite 
 
GPIOnDTOUTのレジスタRead(8ビット単位) 
 
GPIOnDIRのレジスタRead 
 
GPIOnEDGESTATのレジスタRead 
 
GPIOnINTMASKのレジスタRead 
 
GPIOnNEGEDGEのレジスタRead 
 
GPIOnDTOUTのレジスタRead 
 
GPIOnPOSEDGEのレジスタRead 
 
GPIOnIOTYPEのレジスタRead 
 
GPIOnDTOUTのレジスタWrite(ビット単位) 
 
GPIOnDTOUTのレジスタWrite(8ビット単位) 
 
GPIOnDIRのレジスタWrite 
 
GPIOnINTMASKのレジスタWrite 
 
GPIOnNEGEDGEのレジスタWrite 
 
GPIOnPOSEDGEのレジスタWrite 
 
GPIOnIOTYPEのレジスタWrite 
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.