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