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: