/** @addtogroup i2c_defines */ /* * This file is part of the libopencm3 project. * * Copyright (C) 2015 Kuldeep Singh Dhaka * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ #pragma once #include #include /**@{*/ #define I2C_CTRL(base) MMIO32((base) + 0x000) #define I2C_CMD(base) MMIO32((base) + 0x004) #define I2C_STATE(base) MMIO32((base) + 0x008) #define I2C_STATUS(base) MMIO32((base) + 0x00C) #define I2C_CLKDIV(base) MMIO32((base) + 0x010) #define I2C_SADDR(base) MMIO32((base) + 0x014) #define I2C_SADDRMASK(base) MMIO32((base) + 0x018) #define I2C_RXDATA(base) MMIO32((base) + 0x01C) #define I2C_RXDATAP(base) MMIO32((base) + 0x020) #define I2C_TXDATA(base) MMIO32((base) + 0x024) #define I2C_IF(base) MMIO32((base) + 0x028) #define I2C_IFS(base) MMIO32((base) + 0x02C) #define I2C_IFC(base) MMIO32((base) + 0x030) #define I2C_IEN(base) MMIO32((base) + 0x034) #define I2C_ROUTE(base) MMIO32((base) + 0x038) /* I2C_CTRL */ #define I2C_CTRL_CLTO_SHIFT (16) #define I2C_CTRL_CLTO_MASK (0x7 << I2C_CTRL_CLTO_SHIFT) #define I2C_CTRL_CLTO(v) \ (((v) << I2C_CTRL_CLTO_SHIFT) & I2C_CTRL_CLTO_MASK) #define I2C_CTRL_CLTO_OFF 0 #define I2C_CTRL_CLTO_40PCC 1 #define I2C_CTRL_CLTO_80PCC 2 #define I2C_CTRL_CLTO_160PCC 3 #define I2C_CTRL_CLTO_320PPC 4 #define I2C_CTRL_CLTO_1024PPC 5 #define I2C_CTRL_GIBITO (1 << 15) #define I2C_CTRL_BTO_SHIFT (12) #define I2C_CTRL_BTO_MASK (0x3 << I2C_CTRL_BTO_SHIFT) #define I2C_CTRL_BTO(v) \ (((v) << I2C_CTRL_BTO_SHIFT) & I2C_CTRL_BTO_MASK) #define I2C_CTRL_BTO_OFF 0 #define I2C_CTRL_BTO_40PCC 1 #define I2C_CTRL_BTO_80PCC 2 #define I2C_CTRL_BTO_160PCC 3 #define I2C_CTRL_CLHR_SHIFT (12) #define I2C_CTRL_CLHR_MASK (0x3 << I2C_CTRL_CLHR_SHIFT) #define I2C_CTRL_CLHR(v) \ (((v) << I2C_CTRL_CLHR_SHIFT) & I2C_CTRL_CLHR_MASK) #define I2C_CTRL_CLHR_STANDARD 0 #define I2C_CTRL_CLHR_ASYMMETRIC 1 #define I2C_CTRL_CLHR_FAST 2 #define I2C_CTRL_GCAMEN (1 << 6) #define I2C_CTRL_ARBDIS (1 << 5) #define I2C_CTRL_AUTOSN (1 << 4) #define I2C_CTRL_AUTOSE (1 << 3) #define I2C_CTRL_AUTOACK (1 << 2) #define I2C_CTRL_SLAVE (1 << 1) #define I2C_CTRL_EN (1 << 0) /* I2C_CMD */ #define I2C_CMD_CLEARPC (1 << 7) #define I2C_CMD_CLEARTX (1 << 6) #define I2C_CMD_ABORT (1 << 5) #define I2C_CMD_CONT (1 << 4) #define I2C_CMD_NACK (1 << 3) #define I2C_CMD_ACK (1 << 2) #define I2C_CMD_STOP (1 << 1) #define I2C_CMD_START (1 << 0) /* I2C_STATE */ #define I2C_STATE_STATE_SHIFT (5) #define I2C_STATE_STATE_MASK (0x7 << I2C_STATE_STATE_SHIFT) #define I2C_STATE_STATE(v) \ (((v) << I2C_STATE_STATE_SHIFT) & I2C_STATE_STATE_MASK) #define I2C_STATE_STATE_IDLE 0 #define I2C_STATE_STATE_WAIT 1 #define I2C_STATE_STATE_START 2 #define I2C_STATE_STATE_ADDR 3 #define I2C_STATE_STATE_ADDRACK 4 #define I2C_STATE_STATE_DATA 5 #define I2C_STATE_STATE_DATAACK 6 #define I2C_STATE_BUSHOLD (1 << 4) #define I2C_STATE_NACKED (1 << 3) #define I2C_STATE_TRANSMITTER (1 << 2) #define I2C_STATE_MASTER (1 << 1) #define I2C_STATE_BUSY (1 << 0) /* I2C_STATUS */ #define I2C_STATUS_RXDATAV (1 << 8) #define I2C_STATUS_TXBL (1 << 7) #define I2C_STATUS_TXC (1 << 6) #define I2C_STATUS_PABORT (1 << 5) #define I2C_STATUS_PCONT (1 << 4) #define I2C_STATUS_PNACK (1 << 3) #define I2C_STATUS_PACK (1 << 2) #define I2C_STATUS_PSTOP (1 << 1) #define I2C_STATUS_PSTART (1 << 0) /* I2C_CLKDIV */ #define I2C_CLKDIV_DIV_SHIFT (0) #define I2C_CLKDIV_DIV_MASK (0xFF << I2C_CLKDIV_DIV_SHIFT) #define I2C_CLKDIV_DIV(v) \ (((v) << I2C_CLKDIV_DIV_SHIFT) & I2C_CLKDIV_DIV_MASK) /* I2C_SADDR */ #define I2C_SADDR_ADDR_SHIFT (0) #define I2C_SADDR_ADDR_MASK (0xFF << I2C_SADDR_ADDR_SHIFT) #define I2C_SADDR_ADDR(v) \ (((v) << I2C_SADDR_ADDR_SHIFT) & I2C_SADDR_ADDR_MASK) /* I2C_SADDRMASK */ #define I2C_SADDRMASK_MASK_SHIFT (0) #define I2C_SADDRMASK_MASK_MASK (0xFF << I2C_SADDRMASK_MASK_SHIFT) #define I2C_SADDRMASK_MASK(v) \ (((v) << I2C_SADDRMASK_MASK_SHIFT) & I2C_SADDRMASK_MASK_MASK) /* I2C_IF */ #define I2C_IF_SSTOP (1 << 16) #define I2C_IF_CLTO (1 << 15) #define I2C_IF_BITO (1 << 14) #define I2C_IF_RXUF (1 << 13) #define I2C_IF_TXOF (1 << 12) #define I2C_IF_BUSHOLD (1 << 11) #define I2C_IF_BUSERR (1 << 10) #define I2C_IF_ARBLOST (1 << 9) #define I2C_IF_MSTOP (1 << 8) #define I2C_IF_NACK (1 << 7) #define I2C_IF_ACK (1 << 6) #define I2C_IF_RXDATAV (1 << 5) #define I2C_IF_TXBL (1 << 4) #define I2C_IF_TXC (1 << 3) #define I2C_IF_ADDR (1 << 2) #define I2C_IF_RSTART (1 << 1) #define I2C_IF_START (1 << 0) /* I2C_IFS */ #define I2C_IFS_SSTOP (1 << 16) #define I2C_IFS_CLTO (1 << 15) #define I2C_IFS_BITO (1 << 14) #define I2C_IFS_RXUF (1 << 13) #define I2C_IFS_TXOF (1 << 12) #define I2C_IFS_BUSHOLD (1 << 11) #define I2C_IFS_BUSERR (1 << 10) #define I2C_IFS_ARBLOST (1 << 9) #define I2C_IFS_MSTOP (1 << 8) #define I2C_IFS_NACK (1 << 7) #define I2C_IFS_ACK (1 << 6) #define I2C_IFS_RXDATAV (1 << 5) #define I2C_IFS_TXBL (1 << 4) #define I2C_IFS_TXC (1 << 3) #define I2C_IFS_ADDR (1 << 2) #define I2C_IFS_RSTART (1 << 1) #define I2C_IFS_START (1 << 0) /* I2C_IFC */ #define I2C_IFC_SSTOP (1 << 16) #define I2C_IFC_CLTO (1 << 15) #define I2C_IFC_BITO (1 << 14) #define I2C_IFC_RXUF (1 << 13) #define I2C_IFC_TXOF (1 << 12) #define I2C_IFC_BUSHOLD (1 << 11) #define I2C_IFC_BUSERR (1 << 10) #define I2C_IFC_ARBLOST (1 << 9) #define I2C_IFC_MSTOP (1 << 8) #define I2C_IFC_NACK (1 << 7) #define I2C_IFC_ACK (1 << 6) #define I2C_IFC_RXDATAV (1 << 5) #define I2C_IFC_TXBL (1 << 4) #define I2C_IFC_TXC (1 << 3) #define I2C_IFC_ADDR (1 << 2) #define I2C_IFC_RSTART (1 << 1) #define I2C_IFC_START (1 << 0) /* I2C_IEN */ #define I2C_IEN_SSTOP (1 << 16) #define I2C_IEN_CLTO (1 << 15) #define I2C_IEN_BITO (1 << 14) #define I2C_IEN_RXUF (1 << 13) #define I2C_IEN_TXOF (1 << 12) #define I2C_IEN_BUSHOLD (1 << 11) #define I2C_IEN_BUSERR (1 << 10) #define I2C_IEN_ARBLOST (1 << 9) #define I2C_IEN_MSTOP (1 << 8) #define I2C_IEN_NACK (1 << 7) #define I2C_IEN_ACK (1 << 6) #define I2C_IEN_RXDATAV (1 << 5) #define I2C_IEN_TXBL (1 << 4) #define I2C_IEN_TXC (1 << 3) #define I2C_IEN_ADDR (1 << 2) #define I2C_IEN_RSTART (1 << 1) #define I2C_IEN_START (1 << 0) /* I2C_ROUTE */ #define I2C_ROUTE_LOCATION_SHIFT (8) #define I2C_ROUTE_LOCATION_MASK (0x7 << I2C_ROUTE_LOCATION_SHIFT) #define I2C_ROUTE_LOCATION(v) \ (((v) << I2C_ROUTE_LOCATION_SHIFT) & I2C_ROUTE_LOCATION_MASK) #define I2C_ROUTE_LOCATION_LOCx(x) I2C_ROUTE_LOCATION(x) #define I2C_ROUTE_LOCATION_LOC0 0 #define I2C_ROUTE_LOCATION_LOC1 1 #define I2C_ROUTE_LOCATION_LOC2 2 #define I2C_ROUTE_LOCATION_LOC3 3 #define I2C_ROUTE_LOCATION_LOC4 4 #define I2C_ROUTE_LOCATION_LOC5 5 #define I2C_ROUTE_LOCATION_LOC6 6 #define I2C_ROUTE_SCLPEN (1 << 1) #define I2C_ROUTE_SDAPEN (1 << 0) /* I2C0 */ #define I2C0 I2C0_BASE #define I2C0_CTRL I2C_CTRL(I2C0) #define I2C0_CMD I2C_CMD(I2C0) #define I2C0_STATE I2C_STATE(I2C0) #define I2C0_STATUS I2C_STATUS(I2C0) #define I2C0_CLKDIV I2C_CLKDIV(I2C0) #define I2C0_SADDR I2C_SADDR(I2C0) #define I2C0_SADDRMASK I2C_SADDRMASK(I2C0) #define I2C0_RXDATA I2C_RXDATA(I2C0) #define I2C0_RXDATAP I2C_RXDATAP(I2C0) #define I2C0_TXDATA I2C_TXDATA(I2C0) #define I2C0_IF I2C_IF(I2C0) #define I2C0_IFS I2C_IFS(I2C0) #define I2C0_IFC I2C_IFC(I2C0) #define I2C0_IEN I2C_IEN(I2C0) #define I2C0_ROUTE I2C_ROUTE(I2C0) /* I2C1 */ #define I2C1 I2C1_BASE #define I2C1_CTRL I2C_CTRL(I2C1) #define I2C1_CMD I2C_CMD(I2C1) #define I2C1_STATE I2C_STATE(I2C1) #define I2C1_STATUS I2C_STATUS(I2C1) #define I2C1_CLKDIV I2C_CLKDIV(I2C1) #define I2C1_SADDR I2C_SADDR(I2C1) #define I2C1_SADDRMASK I2C_SADDRMASK(I2C1) #define I2C1_RXDATA I2C_RXDATA(I2C1) #define I2C1_RXDATAP I2C_RXDATAP(I2C1) #define I2C1_TXDATA I2C_TXDATA(I2C1) #define I2C1_IF I2C_IF(I2C1) #define I2C1_IFS I2C_IFS(I2C1) #define I2C1_IFC I2C_IFC(I2C1) #define I2C1_IEN I2C_IEN(I2C1) #define I2C1_ROUTE I2C_ROUTE(I2C1) /**@}*/