有注册表地址(第一个?)SPI1。 有偏移的结构。我想这意味着一些SPI注册表如何设置寄存器中的位?
#define SPI1_REG_BASE (0x01F0E000)
//-----------------------------------------------------
//Register Structure & Defines
//-----------------------------------------------------
typedef struct
{
volatile uint32_t SPIGCR0; // 0x0000
volatile uint32_t SPIGCR1; // 0x0004
volatile uint32_t SPIINT; // 0x0008
volatile uint32_t SPILVL; // 0x000C
volatile uint32_t SPIFLG; // 0x0010
volatile uint32_t SPIPC0; // 0x0014
volatile uint32_t SPIPC1; // 0x0018
volatile uint32_t SPIPC2; // 0x001C
volatile uint32_t SPIPC3; // 0x0020
volatile uint32_t SPIPC4; // 0x0024
volatile uint32_t SPIPC5; // 0x0028
volatile uint32_t RSVD0[3]; // 0x002C
volatile uint32_t SPIDAT0; // 0x0038
volatile uint32_t SPIDAT1; // 0x003C
volatile uint32_t SPIBUF; // 0x0040
volatile uint32_t SPIEMU; // 0x0044
volatile uint32_t SPIDELAY; // 0x0048
volatile uint32_t SPIDEF; // 0x004C
volatile uint32_t SPIFMT0; // 0x0050
volatile uint32_t SPIFMT1; // 0x0054
volatile uint32_t SPIFMT2; // 0x0058
volatile uint32_t SPIFMT3; // 0x005C
volatile uint32_t INTVEC0; // 0x0060
volatile uint32_t INTVEC1; // 0x0064
} spi_regs_t;
的 SPI1_REG_BASE +偏移=地址有一些定义和指针* SPI的
#define CSDEF0 (0x00000001) //bit 0
#define CSHOLD (0x10000000) //bit 28
spi_regs_t *spi = (spi_regs_t *)SPI1_REG_BASE;
我误解位的设置定义。例如,
spi->SPIDEF |= CSDEF0 //set 0 bit in the registry field
我明白SPIDEF - 是SPI寄存器已偏移地址4CH
(0x01F0E000 + 0x4C)。但为什么CSDEF0位0? SPIDEF注册表中有一个字段CSDEF(0-7位)。是否意味着7位CSDEF的地址是0x00000008?和5位的地址是0x00000006?
但是为什么CSHOLD字段的SPIDAT1注册表的地址是0x10000000?
spi->SPIDAT1 |= CSHOLD //set bit 28
SPIDAT1寄存器已经偏移地址CH(0x01F0E000 +为0x3C) 它确实有场CSHOLD(28st位)
如何|在这种情况下=工作?
我会任何帮助搞清楚......这一切%)
Jeyaram,谢谢你这么多详细的解释!CSDEF5 = 0×20(HEX )是0000 0000 0010 0000(BIN)的它代表的,SPI> SPIDEF值第5位?它是正确的吗? – Myosotis
正确的。你可以使用CSDEF5到其它寄存器的第5位设置为1个太:) – Jeyaram
理由downvote ?? – Jeyaram