64 #include <inc/hw_types.h>
65 #include <inc/hw_uart.h>
66 #include <inc/hw_memmap.h>
67 #include <inc/hw_ints.h>
68 #include <inc/hw_adi.h>
77 #define ADI_SLAVE_REGS 16
84 #define ADI_NO_WAIT 0x00000000
85 #define ADI_WAIT_FOR_ACK 0x00000004
86 #define ADI_SPEED_2 0x00000000
87 #define ADI_SPEED_4 0x00000001
88 #define ADI_SPEED_8 0x00000002
89 #define ADI_SPEED_16 0x00000003
90 #define ADI_CONFIG_MASK 0x00000007
97 #define ADI_PROTECT 0x00000080
98 #define ADI_ACK 0x00000001
99 #define ADI_SYNC 0x00000000
107 #ifdef DRIVERLIB_DEBUG
122 ADIBaseValid(uint32_t ui32Base)
144 __STATIC_INLINE uint32_t
150 ASSERT(ADIBaseValid(ui32Base));
155 return(HWREG(ui32Base + ADI_O_SLAVESTAT));
194 ASSERT(ADIBaseValid(ui32Base));
207 ui32Base + ADI_O_SLAVECONF,
212 HWREG(ui32Base + ADI_O_SLAVECONF) = (ui32Config & 0x7) |
243 ASSERT(ADIBaseValid(ui32Base));
251 HWREGB(ui32Base + ADI_O_SLAVESTAT) =
ADI_SYNC;
287 ASSERT(ADIBaseValid(ui32Base));
295 ui32Val = HWREG(ui32Base + ADI_O_SLAVECONF);
301 HWREG(ui32Base + ADI_O_SLAVECONF) = ui32Val;
338 ASSERT(ADIBaseValid(ui32Base));
347 HWREGB(ui32Base + ui32Reg) = ui8Val;
388 ASSERT(ADIBaseValid(ui32Base));
397 HWREGH(ui32Base + (ui32Reg & 0xFE)) = ui16Val;
437 ASSERT(ADIBaseValid(ui32Base));
446 HWREG(ui32Base + (ui32Reg & 0xFC)) = ui32Val;
471 __STATIC_INLINE uint32_t
477 ASSERT(ADIBaseValid(ui32Base));
486 return(HWREGB(ui32Base + ui32Reg));
514 __STATIC_INLINE uint32_t
520 ASSERT(ADIBaseValid(ui32Base));
529 return(HWREGH(ui32Base + (ui32Reg & 0xFE)));
555 __STATIC_INLINE uint32_t
561 ASSERT(ADIBaseValid(ui32Base));
570 return(HWREG(ui32Base + (ui32Reg & 0xFC)));
607 uint32_t ui32RegOffset;
612 ASSERT(ADIBaseValid(ui32Base));
619 ui32RegOffset = ADI_O_SET;
627 HWREGB(ui32Base + ui32RegOffset + ui32Reg) = ui8Val;
664 uint32_t ui32RegOffset;
669 ASSERT(ADIBaseValid(ui32Base));
676 ui32RegOffset = ADI_O_SET;
684 HWREGH(ui32Base + ui32RegOffset + (ui32Reg & 0xFE)) = ui16Val;
721 uint32_t ui32RegOffset;
726 ASSERT(ADIBaseValid(ui32Base));
733 ui32RegOffset = ADI_O_SET;
741 HWREG(ui32Base + ui32RegOffset + (ui32Reg & 0xFC)) = ui32Val;
778 uint32_t ui32RegOffset;
783 ASSERT(ADIBaseValid(ui32Base));
790 ui32RegOffset = ADI_O_CLR;
798 HWREGB(ui32Base + ui32RegOffset + ui32Reg) = ui8Val;
835 uint32_t ui32RegOffset;
840 ASSERT(ADIBaseValid(ui32Base));
847 ui32RegOffset = ADI_O_CLR;
855 HWREGH(ui32Base + ui32RegOffset + (ui32Reg & 0xFE)) = ui16Val;
892 uint32_t ui32RegOffset;
897 ASSERT(ADIBaseValid(ui32Base));
904 ui32RegOffset = ADI_O_CLR;
912 HWREG(ui32Base + ui32RegOffset + (ui32Reg & 0xFC)) = ui32Val;
951 uint8_t ui8Mask, uint8_t ui8Val)
953 uint32_t ui32RegOffset;
958 ASSERT(ADIBaseValid(ui32Base));
961 ASSERT(!(ui8Mask & 0xF0));
967 ui32RegOffset = ADI_O_MASK4B + (ui32Reg << 1) + (bWriteHigh ? 1 : 0);
975 HWREGB(ui32Base + ui32RegOffset) = (ui8Mask << 4) | ui8Val;
1007 __STATIC_INLINE
void
1011 uint32_t ui32RegOffset;
1016 ASSERT(ADIBaseValid(ui32Base));
1018 ASSERT(!(ui16Val & 0xFF00));
1019 ASSERT(!(ui16Mask & 0xFF00));
1025 ui32RegOffset = ADI_O_MASK8B + (ui32Reg << 1);
1033 HWREGH(ui32Base + ui32RegOffset) = (ui16Mask << 8) | ui16Val;
1066 __STATIC_INLINE
void
1070 uint32_t ui32RegOffset;
1075 ASSERT(ADIBaseValid(ui32Base));
1077 ASSERT(!(ui32Val & 0xFFFF0000));
1078 ASSERT(!(ui32Mask & 0xFFFF0000));
1084 ui32RegOffset = ADI_O_MASK16B + ((ui32Reg << 1) & 0xFC);
1092 HWREG(ui32Base + ui32RegOffset) = (ui32Mask << 16) | ui32Val;
static void ADI8BitsClear(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Clear specific bits in an 8 bit ADI register.
static void ADI16SetValBit(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Mask, uint32_t ui32Val)
Set a value on any bits inside an 2 x 8 bit register aligned on a half-word (byte) boundary in the AD...
static uint32_t ADI32RegRead(uint32_t ui32Base, uint32_t ui32Reg)
Read the value in a 32 bit register.
static void ADIConfigSet(uint32_t ui32Base, uint32_t ui32Config, bool bProtect)
Configure the ADI Slave.
static void ADI16BitsClear(uint32_t ui32Base, uint32_t ui32Reg, uint16_t ui16Val)
Clear specific bits in two 8 bit ADI register.
static void ADI16BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint16_t ui16Val)
Set specific bits in 2 x 8 bit ADI slave registers.
static uint32_t AuxAdiDdiSafeRead(uint32_t nAddr, uint32_t nSize)
Safely read from AUX ADI/DDI interfaces using a semaphore.
static void ADIProtect(uint32_t ui32Base)
Protect an ADI slave configuration by locking the configuration register access.
static void ADI8RegWrite(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Write an 8 bit value to a register in an ADI slave.
static uint32_t ADI8RegRead(uint32_t ui32Base, uint32_t ui32Reg)
Read the value of an 8 bit register in the ADI slave.
static void ADI4SetValBit(uint32_t ui32Base, uint32_t ui32Reg, bool bWriteHigh, uint8_t ui8Mask, uint8_t ui8Val)
Set a value on any 4 bits inside an 8 bit register in the ADI slave.
static uint32_t ADIStatusGet(uint32_t ui32Base)
Get the status of an ADI module.
static void ADI16RegWrite(uint32_t ui32Base, uint32_t ui32Reg, uint16_t ui16Val)
Write a 16 bit value to 2 registers in the ADI slave.
static void ADI8SetValBit(uint32_t ui32Base, uint32_t ui32Reg, uint16_t ui16Mask, uint16_t ui16Val)
Set a value on any bits inside an 8 bit register in the ADI slave.
static void ADISync(uint32_t ui32Base)
Synchronize the ADI slave.
static void ADI32BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Val)
Set specific bits in 4 x 8 bit ADI slave registers.
static void ADI8BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Set specific bits in a single 8 bit ADI register.
static uint32_t ADI16RegRead(uint32_t ui32Base, uint32_t ui32Reg)
Read the value in a 16 bit register.
static void ADI32BitsClear(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Val)
Clear specific bits in four 8 bit ADI register.
static void AuxAdiDdiSafeWrite(uint32_t nAddr, uint32_t nData, uint32_t nSize)
Safely write to AUX ADI/DDI interfaces using a semaphore.
static void ADI32RegWrite(uint32_t ui32Base, uint32_t ui32Reg, uint32_t ui32Val)
Write a 32 bit value to 4 registers in the ADI slave.