sam3_twi.h
Go to the documentation of this file.
00001
00036 #ifndef SAM3_TWI_H
00037 #define SAM3_TWI_H
00038 
00040 #if CPU_CM3_SAM3X
00041     #define TWI0_BASE  0x4008C000
00042     #define TWI1_BASE  0x40090000
00043 #elif CPU_CM3_SAM3N || CPU_CM3_SAM3S
00044     #define TWI0_BASE  0x40018000
00045     #define TWI1_BASE  0x4001C000
00046 #elif CPU_CM3_SAM3U
00047     #define TWI0_BASE  0x40084000
00048     #define TWI1_BASE  0x40088000
00049 #else
00050     #error TWI registers not defined for selected CPU
00051 #endif
00052 
00053
00057 /*\{*/
00058 #define TWI_CR_OFF      0x000
00059 #define TWI_MMR_OFF     0x004
00060 #define TWI_SMR_OFF     0x008
00061 #define TWI_IADR_OFF    0x00C
00062 #define TWI_CWGR_OFF    0x010
00063 #define TWI_SR_OFF      0x020
00064 #define TWI_IER_OFF     0x024
00065 #define TWI_IDR_OFF     0x028
00066 #define TWI_IMR_OFF     0x02C
00067 #define TWI_RHR_OFF     0x030
00068 #define TWI_THR_OFF     0x034
00069 #define TWI_RPR_OFF     0x100
00070 #define TWI_RCR_OFF     0x104
00071 #define TWI_TPR_OFF     0x108
00072 #define TWI_TCR_OFF     0x10C
00073 #define TWI_RNPR_OFF    0x110
00074 #define TWI_RNCR_OFF    0x114
00075 #define TWI_TNPR_OFF    0x118
00076 #define TWI_TNCR_OFF    0x11C
00077 #define TWI_PTCR_OFF    0x120
00078 #define TWI_PTSR_OFF    0x124
00079 /*\}*/
00080
00084 /*\{*/
00085 #ifdef TWI_BASE
00086     #define TWI_CR    (HWREG(TWI_BASE + TWI_CR_OFF))
00087     #define TWI_MMR   (HWREG(TWI_BASE + TWI_MMR_OFF))
00088     #define TWI_SMR   (HWREG(TWI_BASE + TWI_SMR_OFF))
00089     #define TWI_IADR  (HWREG(TWI_BASE + TWI_IADR_OFF))
00090     #define TWI_CWGR  (HWREG(TWI_BASE + TWI_CWGR_OFF))
00091     #define TWI_SR    (HWREG(TWI_BASE + TWI_SR_OFF))
00092     #define TWI_IER   (HWREG(TWI_BASE + TWI_IER_OFF))
00093     #define TWI_IDR   (HWREG(TWI_BASE + TWI_IDR_OFF))
00094     #define TWI_IMR   (HWREG(TWI_BASE + TWI_IMR_OFF))
00095     #define TWI_RHR   (HWREG(TWI_BASE + TWI_RHR_OFF))
00096     #define TWI_THR   (HWREG(TWI_BASE + TWI_THR_OFF))
00097     #define TWI_RPR   (HWREG(TWI_BASE + TWI_RPR_OFF))
00098     #define TWI_RCR   (HWREG(TWI_BASE + TWI_RCR_OFF))
00099     #define TWI_TPR   (HWREG(TWI_BASE + TWI_TPR_OFF))
00100     #define TWI_TCR   (HWREG(TWI_BASE + TWI_TCR_OFF))
00101     #define TWI_RNPR  (HWREG(TWI_BASE + TWI_RNPR_OFF))
00102     #define TWI_RNCR  (HWREG(TWI_BASE + TWI_RNCR_OFF))
00103     #define TWI_TNPR  (HWREG(TWI_BASE + TWI_TNPR_OFF))
00104     #define TWI_TNCR  (HWREG(TWI_BASE + TWI_TNCR_OFF))
00105     #define TWI_PTCR  (HWREG(TWI_BASE + TWI_PTCR_OFF))
00106     #define TWI_PTSR  (HWREG(TWI_BASE + TWI_PTSR_OFF))
00107 #endif // TWI_BASE
00108 
00109 #ifdef TWI0_BASE
00110     #define TWI0_CR    (HWREG(TWI0_BASE + TWI_CR_OFF))
00111     #define TWI0_MMR   (HWREG(TWI0_BASE + TWI_MMR_OFF))
00112     #define TWI0_SMR   (HWREG(TWI0_BASE + TWI_SMR_OFF))
00113     #define TWI0_IADR  (HWREG(TWI0_BASE + TWI_IADR_OFF))
00114     #define TWI0_CWGR  (HWREG(TWI0_BASE + TWI_CWGR_OFF))
00115     #define TWI0_SR    (HWREG(TWI0_BASE + TWI_SR_OFF))
00116     #define TWI0_IER   (HWREG(TWI0_BASE + TWI_IER_OFF))
00117     #define TWI0_IDR   (HWREG(TWI0_BASE + TWI_IDR_OFF))
00118     #define TWI0_IMR   (HWREG(TWI0_BASE + TWI_IMR_OFF))
00119     #define TWI0_RHR   (HWREG(TWI0_BASE + TWI_RHR_OFF))
00120     #define TWI0_THR   (HWREG(TWI0_BASE + TWI_THR_OFF))
00121     #define TWI0_RPR   (HWREG(TWI0_BASE + TWI_RPR_OFF))
00122     #define TWI0_RCR   (HWREG(TWI0_BASE + TWI_RCR_OFF))
00123     #define TWI0_TPR   (HWREG(TWI0_BASE + TWI_TPR_OFF))
00124     #define TWI0_TCR   (HWREG(TWI0_BASE + TWI_TCR_OFF))
00125     #define TWI0_RNPR  (HWREG(TWI0_BASE + TWI_RNPR_OFF))
00126     #define TWI0_RNCR  (HWREG(TWI0_BASE + TWI_RNCR_OFF))
00127     #define TWI0_TNPR  (HWREG(TWI0_BASE + TWI_TNPR_OFF))
00128     #define TWI0_TNCR  (HWREG(TWI0_BASE + TWI_TNCR_OFF))
00129     #define TWI0_PTCR  (HWREG(TWI0_BASE + TWI_PTCR_OFF))
00130     #define TWI0_PTSR  (HWREG(TWI0_BASE + TWI_PTSR_OFF))
00131 #endif // TWI0_BASE
00132 
00133 #ifdef TWI1_BASE
00134     #define TWI1_CR    (HWREG(TWI1_BASE + TWI_CR_OFF))
00135     #define TWI1_MMR   (HWREG(TWI1_BASE + TWI_MMR_OFF))
00136     #define TWI1_SMR   (HWREG(TWI1_BASE + TWI_SMR_OFF))
00137     #define TWI1_IADR  (HWREG(TWI1_BASE + TWI_IADR_OFF))
00138     #define TWI1_CWGR  (HWREG(TWI1_BASE + TWI_CWGR_OFF))
00139     #define TWI1_SR    (HWREG(TWI1_BASE + TWI_SR_OFF))
00140     #define TWI1_IER   (HWREG(TWI1_BASE + TWI_IER_OFF))
00141     #define TWI1_IDR   (HWREG(TWI1_BASE + TWI_IDR_OFF))
00142     #define TWI1_IMR   (HWREG(TWI1_BASE + TWI_IMR_OFF))
00143     #define TWI1_RHR   (HWREG(TWI1_BASE + TWI_RHR_OFF))
00144     #define TWI1_THR   (HWREG(TWI1_BASE + TWI_THR_OFF))
00145     #define TWI1_RPR   (HWREG(TWI1_BASE + TWI_RPR_OFF))
00146     #define TWI1_RCR   (HWREG(TWI1_BASE + TWI_RCR_OFF))
00147     #define TWI1_TPR   (HWREG(TWI1_BASE + TWI_TPR_OFF))
00148     #define TWI1_TCR   (HWREG(TWI1_BASE + TWI_TCR_OFF))
00149     #define TWI1_RNPR  (HWREG(TWI1_BASE + TWI_RNPR_OFF))
00150     #define TWI1_RNCR  (HWREG(TWI1_BASE + TWI_RNCR_OFF))
00151     #define TWI1_TNPR  (HWREG(TWI1_BASE + TWI_TNPR_OFF))
00152     #define TWI1_TNCR  (HWREG(TWI1_BASE + TWI_TNCR_OFF))
00153     #define TWI1_PTCR  (HWREG(TWI1_BASE + TWI_PTCR_OFF))
00154     #define TWI1_PTSR  (HWREG(TWI1_BASE + TWI_PTSR_OFF))
00155 #endif // TWI1_BASE
00156 /*\}*/
00157
00158
00162 /*\{*/
00163 #define TWI_CR_START BV(0)
00164 #define TWI_CR_STOP BV(1)
00165 #define TWI_CR_MSEN BV(2)
00166 #define TWI_CR_MSDIS BV(3)
00167 #define TWI_CR_SVEN BV(4)
00168 #define TWI_CR_SVDIS BV(5)
00169 #define TWI_CR_QUICK BV(6)
00170 #define TWI_CR_SWRST BV(7)
00171 /*\}*/
00172
00176 /*\{*/
00177 #define TWI_MMR_IADRSZ_SHIFT 8
00178 #define TWI_MMR_IADRSZ_MASK (0x3 << TWI_MMR_IADRSZ_SHIFT)
00179 #define   TWI_MMR_IADRSZ_NONE (0x0 << 8)
00180 #define   TWI_MMR_IADRSZ_1_BYTE BV(8)
00181 #define   TWI_MMR_IADRSZ_2_BYTE (0x2 << 8)
00182 #define   TWI_MMR_IADRSZ_3_BYTE (0x3 << 8)
00183 #define TWI_MMR_MREAD BV(12)
00184 #define TWI_MMR_DADR_SHIFT 16
00185 #define TWI_MMR_DADR_MASK (0x7f << TWI_MMR_DADR_SHIFT)
00186 #define TWI_MMR_DADR(value) ((TWI_MMR_DADR_MASK & ((value) << TWI_MMR_DADR_SHIFT)))
00187 /*\}*/
00188
00192 /*\{*/
00193 #define TWI_SMR_SADR_SHIFT 16
00194 #define TWI_SMR_SADR_MASK (0x7f << TWI_SMR_SADR_SHIFT)
00195 #define TWI_SMR_SADR(value) ((TWI_SMR_SADR_MASK & ((value) << TWI_SMR_SADR_SHIFT)))
00196 /*\}*/
00197
00201 /*\{*/
00202 #define TWI_IADR_IADR_SHIFT 0
00203 #define TWI_IADR_IADR_MASK (0xffffff << TWI_IADR_IADR_SHIFT)
00204 #define TWI_IADR_IADR(value) ((TWI_IADR_IADR_MASK & ((value) << TWI_IADR_IADR_SHIFT)))
00205 /*\}*/
00206
00210 /*\{*/
00211 #define TWI_CWGR_CLDIV_SHIFT 0
00212 #define TWI_CWGR_CLDIV_MASK (0xff << TWI_CWGR_CLDIV_SHIFT)
00213 #define TWI_CWGR_CLDIV(value) ((TWI_CWGR_CLDIV_MASK & ((value) << TWI_CWGR_CLDIV_SHIFT)))
00214 #define TWI_CWGR_CHDIV_SHIFT 8
00215 #define TWI_CWGR_CHDIV_MASK (0xff << TWI_CWGR_CHDIV_SHIFT)
00216 #define TWI_CWGR_CHDIV(value) ((TWI_CWGR_CHDIV_MASK & ((value) << TWI_CWGR_CHDIV_SHIFT)))
00217 #define TWI_CWGR_CKDIV_SHIFT 16
00218 #define TWI_CWGR_CKDIV_MASK (0x7 << TWI_CWGR_CKDIV_SHIFT)
00219 #define TWI_CWGR_CKDIV(value) ((TWI_CWGR_CKDIV_MASK & ((value) << TWI_CWGR_CKDIV_SHIFT)))
00220 /*\}*/
00221
00225 /*\{*/
00226 #define TWI_SR_TXCOMP BV(0)
00227 #define TWI_SR_RXRDY BV(1)
00228 #define TWI_SR_TXRDY BV(2)
00229 #define TWI_SR_SVREAD BV(3)
00230 #define TWI_SR_SVACC BV(4)
00231 #define TWI_SR_GACC BV(5)
00232 #define TWI_SR_OVRE BV(6)
00233 #define TWI_SR_NACK BV(8)
00234 #define TWI_SR_ARBLST BV(9)
00235 #define TWI_SR_SCLWS BV(10)
00236 #define TWI_SR_EOSACC BV(11)
00237 #define TWI_SR_ENDRX BV(12)
00238 #define TWI_SR_ENDTX BV(13)
00239 #define TWI_SR_RXBUFF BV(14)
00240 #define TWI_SR_TXBUFE BV(15)
00241 /*\}*/
00242
00246 /*\{*/
00247 #define TWI_IER_TXCOMP BV(0)
00248 #define TWI_IER_RXRDY BV(1)
00249 #define TWI_IER_TXRDY BV(2)
00250 #define TWI_IER_SVACC BV(4)
00251 #define TWI_IER_GACC BV(5)
00252 #define TWI_IER_OVRE BV(6)
00253 #define TWI_IER_NACK BV(8)
00254 #define TWI_IER_ARBLST BV(9)
00255 #define TWI_IER_SCL_WS BV(10)
00256 #define TWI_IER_EOSACC BV(11)
00257 #define TWI_IER_ENDRX BV(12)
00258 #define TWI_IER_ENDTX BV(13)
00259 #define TWI_IER_RXBUFF BV(14)
00260 #define TWI_IER_TXBUFE BV(15)
00261 /*\}*/
00262
00266 /*\{*/
00267 #define TWI_IDR_TXCOMP BV(0)
00268 #define TWI_IDR_RXRDY BV(1)
00269 #define TWI_IDR_TXRDY BV(2)
00270 #define TWI_IDR_SVACC BV(4)
00271 #define TWI_IDR_GACC BV(5)
00272 #define TWI_IDR_OVRE BV(6)
00273 #define TWI_IDR_NACK BV(8)
00274 #define TWI_IDR_ARBLST BV(9)
00275 #define TWI_IDR_SCL_WS BV(10)
00276 #define TWI_IDR_EOSACC BV(11)
00277 #define TWI_IDR_ENDRX BV(12)
00278 #define TWI_IDR_ENDTX BV(13)
00279 #define TWI_IDR_RXBUFF BV(14)
00280 #define TWI_IDR_TXBUFE BV(15)
00281 /*\}*/
00282
00286 /*\{*/
00287 #define TWI_IMR_TXCOMP BV(0)
00288 #define TWI_IMR_RXRDY BV(1)
00289 #define TWI_IMR_TXRDY BV(2)
00290 #define TWI_IMR_SVACC BV(4)
00291 #define TWI_IMR_GACC BV(5)
00292 #define TWI_IMR_OVRE BV(6)
00293 #define TWI_IMR_NACK BV(8)
00294 #define TWI_IMR_ARBLST BV(9)
00295 #define TWI_IMR_SCL_WS BV(10)
00296 #define TWI_IMR_EOSACC BV(11)
00297 #define TWI_IMR_ENDRX BV(12)
00298 #define TWI_IMR_ENDTX BV(13)
00299 #define TWI_IMR_RXBUFF BV(14)
00300 #define TWI_IMR_TXBUFE BV(15)
00301 /*\}*/
00302
00306 /*\{*/
00307 #define TWI_RHR_RXDATA_SHIFT 0
00308 #define TWI_RHR_RXDATA_MASK (0xff << TWI_RHR_RXDATA_SHIFT)
00309 /*\}*/
00310
00314 /*\{*/
00315 #define TWI_THR_TXDATA_SHIFT 0
00316 #define TWI_THR_TXDATA_MASK (0xff << TWI_THR_TXDATA_SHIFT)
00317 #define TWI_THR_TXDATA(value) ((TWI_THR_TXDATA_MASK & ((value) << TWI_THR_TXDATA_SHIFT)))
00318 /*\}*/
00319
00323 /*\{*/
00324 #define TWI_RPR_RXPTR_SHIFT 0
00325 #define TWI_RPR_RXPTR_MASK (0xffffffff << TWI_RPR_RXPTR_SHIFT)
00326 #define TWI_RPR_RXPTR(value) ((TWI_RPR_RXPTR_MASK & ((value) << TWI_RPR_RXPTR_SHIFT)))
00327 /*\}*/
00328
00332 /*\{*/
00333 #define TWI_RCR_RXCTR_SHIFT 0
00334 #define TWI_RCR_RXCTR_MASK (0xffff << TWI_RCR_RXCTR_SHIFT)
00335 #define TWI_RCR_RXCTR(value) ((TWI_RCR_RXCTR_MASK & ((value) << TWI_RCR_RXCTR_SHIFT)))
00336 /*\}*/
00337
00341 /*\{*/
00342 #define TWI_TPR_TXPTR_SHIFT 0
00343 #define TWI_TPR_TXPTR_MASK (0xffffffff << TWI_TPR_TXPTR_SHIFT)
00344 #define TWI_TPR_TXPTR(value) ((TWI_TPR_TXPTR_MASK & ((value) << TWI_TPR_TXPTR_SHIFT)))
00345 /*\}*/
00346
00350 /*\{*/
00351 #define TWI_TCR_TXCTR_SHIFT 0
00352 #define TWI_TCR_TXCTR_MASK (0xffff << TWI_TCR_TXCTR_SHIFT)
00353 #define TWI_TCR_TXCTR(value) ((TWI_TCR_TXCTR_MASK & ((value) << TWI_TCR_TXCTR_SHIFT)))
00354 /*\}*/
00355
00359 /*\{*/
00360 #define TWI_RNPR_RXNPTR_SHIFT 0
00361 #define TWI_RNPR_RXNPTR_MASK (0xffffffff << TWI_RNPR_RXNPTR_SHIFT)
00362 #define TWI_RNPR_RXNPTR(value) ((TWI_RNPR_RXNPTR_MASK & ((value) << TWI_RNPR_RXNPTR_SHIFT)))
00363 /*\}*/
00364
00368 /*\{*/
00369 #define TWI_RNCR_RXNCTR_SHIFT 0
00370 #define TWI_RNCR_RXNCTR_MASK (0xffff << TWI_RNCR_RXNCTR_SHIFT)
00371 #define TWI_RNCR_RXNCTR(value) ((TWI_RNCR_RXNCTR_MASK & ((value) << TWI_RNCR_RXNCTR_SHIFT)))
00372 /*\}*/
00373
00377 /*\{*/
00378 #define TWI_TNPR_TXNPTR_SHIFT 0
00379 #define TWI_TNPR_TXNPTR_MASK (0xffffffff << TWI_TNPR_TXNPTR_SHIFT)
00380 #define TWI_TNPR_TXNPTR(value) ((TWI_TNPR_TXNPTR_MASK & ((value) << TWI_TNPR_TXNPTR_SHIFT)))
00381 /*\}*/
00382
00386 /*\{*/
00387 #define TWI_TNCR_TXNCTR_SHIFT 0
00388 #define TWI_TNCR_TXNCTR_MASK (0xffff << TWI_TNCR_TXNCTR_SHIFT)
00389 #define TWI_TNCR_TXNCTR(value) ((TWI_TNCR_TXNCTR_MASK & ((value) << TWI_TNCR_TXNCTR_SHIFT)))
00390 /*\}*/
00391
00395 /*\{*/
00396 #define TWI_PTCR_RXTEN BV(0)
00397 #define TWI_PTCR_RXTDIS BV(1)
00398 #define TWI_PTCR_TXTEN BV(8)
00399 #define TWI_PTCR_TXTDIS BV(9)
00400 /*\}*/
00401
00405 /*\{*/
00406 #define TWI_PTSR_RXTEN BV(0)
00407 #define TWI_PTSR_TXTEN BV(8)
00408 /*\}*/
00409
00410 #endif /* SAM3_TWI_H */