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

I2C Primitive

I2C Primitive Layer

none

AXELL CORPORATION

2017_02_22 初版 

2017_10_26 Ver2.0

1: 9: 10: 14: 15: 16: #include "AG903_errno.h" 17: #include "AG903_common.h" 18: #include "i2c/i2cprm.h" 19: #include "register/AG903_i2creg.h" 20: 21: #define AG903_I2C_READ_REG(CH,REG) (AG903_IICn(CH)->REG) 22: #define AG903_I2C_WRITE_REG(CH,REG,VAL) (AG903_IICn(CH)->REG = (uint32_t)(VAL)) 23: #define AG903_I2C_CLR_REG(CH,REG,VAL) (AG903_IICn(CH)->REG &= (uint32_t)(~VAL)) 24: #define AG903_I2C_SET_REG(CH,REG,VAL) (AG903_IICn(CH)->REG |= (uint32_t)(VAL)) 25: 26: 33: void AG903_I2CPrmResetController(uint8_t ch) 34: { 35: ASSERT(AG903_I2C_CH_NUM > ch); 36: AG903_I2C_SET_REG(ch,CR,(1<<AG903_IICn_CR_I2C_RST_POS)); 37: return; 38: } 39: 40: 47: void AG903_I2CPrmGetResetStatus(uint8_t ch, uint8_t* status) 48: { 49: uint32_t val; 50: 51: ASSERT(AG903_I2C_CH_NUM > ch); 52: val = AG903_I2C_READ_REG(ch,CR); 53: (*status) = (uint8_t)(val&AG903_IICn_CR_I2C_RST_MSK); 54: return; 55: } 56: 57: 65: void AG903_I2CPrmSetControl(uint8_t ch, uint32_t setbit) 66: { 67: ASSERT(AG903_I2C_CH_NUM > ch); 68: AG903_I2C_SET_REG(ch,CR,setbit); 69: return; 70: } 71: 72: 80: void AG903_I2CPrmClearControl(uint8_t ch, uint32_t clrbit) 81: { 82: ASSERT(AG903_I2C_CH_NUM > ch); 83: AG903_I2C_CLR_REG(ch,CR,clrbit); 84: return; 85: } 86: 87: 94: void AG903_I2CPrmGetStatus(uint8_t ch, uint32_t* status) 95: { 96: ASSERT(AG903_I2C_CH_NUM > ch); 97: (*status) = AG903_I2C_READ_REG(ch,SR); 98: return; 99: } 100: 101: 108: void AG903_I2CPrmWriteData(uint8_t ch, uint8_t data) 109: { 110: ASSERT(AG903_I2C_CH_NUM > ch); 111: AG903_I2C_WRITE_REG(ch,DR,data); 112: return; 113: } 114: 115: 122: void AG903_I2CPrmReadData(uint8_t ch, uint8_t* data) 123: { 124: ASSERT(AG903_I2C_CH_NUM > ch); 125: (*data) = AG903_I2C_READ_REG(ch,DR); 126: return; 127: } 128: 129: 136: void AG903_I2CPrmSetClockDivision(uint8_t ch, uint32_t cdr) 137: { 138: ASSERT(AG903_I2C_CH_NUM > ch); 139: AG903_I2C_WRITE_REG(ch,CDR,cdr); 140: return; 141: } 142: 143: 152: void AG903_I2CPrmSetGlitchSuppression(uint8_t ch, uint16_t tsr, uint8_t gsr) 153: { 154: 155: ASSERT(AG903_I2C_CH_NUM > ch); 156: 157: AG903_I2C_CLR_REG(ch,TGSR,AG903_IICn_TGSR_TSR_MSK); 158: AG903_I2C_CLR_REG(ch,TGSR,AG903_IICn_TGSR_GSR_MSK); 159: AG903_I2C_SET_REG(ch,TGSR,(tsr<<AG903_IICn_TGSR_TSR_POS)); 160: AG903_I2C_SET_REG(ch,TGSR,(gsr<<AG903_IICn_TGSR_GSR_POS)); 161: return; 162: } 163: 164: 171: void AG903_I2CPrmSetExtAddrMode(uint8_t ch) 172: { 173: ASSERT(AG903_I2C_CH_NUM > ch); 174: AG903_I2C_SET_REG(ch,SAR,(1<<AG903_IICn_SAR_EN10_POS)); 175: return; 176: } 177: 178: 185: void AG903_I2CPrmClearExtAddrMode(uint8_t ch) 186: { 187: ASSERT(AG903_I2C_CH_NUM > ch); 188: AG903_I2C_CLR_REG(ch,SAR,AG903_IICn_SAR_EN10_MSK); 189: return; 190: } 191: 192: 200: void AG903_I2CPrmSetSlaveAddr(uint8_t ch, uint16_t saddr) 201: { 202: ASSERT(AG903_I2C_CH_NUM > ch); 203: 204: if(0x0380 & saddr) { 205: AG903_I2C_SET_REG(ch,SAR,(1<<AG903_IICn_SAR_EN10_POS)); 206: AG903_I2C_CLR_REG(ch,SAR,AG903_IICn_SAR_SAR_MSK); 207: AG903_I2C_SET_REG(ch,SAR,(saddr<<AG903_IICn_SAR_SAR_POS)); 208: } 209: else { 210: AG903_I2C_CLR_REG(ch,SAR,AG903_IICn_SAR_EN10_MSK); 211: AG903_I2C_CLR_REG(ch,SAR,AG903_IICn_SAR_SAR_MSK); 212: AG903_I2C_SET_REG(ch,SAR,(saddr<<AG903_IICn_SAR_SAR_POS)); 213: } 214: return; 215: } 216:
 
名前 
説明 
 
IICnCRのレジスタWrite(指定ビットをClear) 
 
IICnSARレジスタのEN10ビットClear 
 
IICnCRレジスタのI2C_RSTビットRead 
 
IICnSRのレジスタRead 
 
IICnDRのレジスタRead 
 
IICnCRレジスタのI2C_RSTビットSet 
 
IICnCDRのレジスタWrite 
 
IICnCRのレジスタWrite(指定ビットをSet) 
 
IICnSARレジスタのEN10ビットSet 
 
IICnTGSRのレジスタWrite 
 
IICnSARのレジスタWrite 
 
IICnDRのレジスタWrite 
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.