Embedded 无法启用AT91SAM7S256的SPI外围设备

Embedded 无法启用AT91SAM7S256的SPI外围设备,embedded,arm,Embedded,Arm,我正在编写一个代码,将micro SD卡与AT91SAM7S ARM core进行接口,调试时发现一切正常,但模块无法运行,因为未设置启用位,但我多次执行了该操作 无效SPI_配置为91S_SPI*SPI, 无符号整数id, 无符号整数配置 { } 任何人都有可能帮助我解决这个问题的想法 非常感谢选择一个可读写的外围寄存器,例如SPI_CSR0。设置寄存器,然后读取该寄存器的内容。如果内容不是你写的,那么外围设备就死了。检查外围设备的时钟是否已启用。顺便问一下,设置SPI_CSRn寄存器的代码在

我正在编写一个代码,将micro SD卡与AT91SAM7S ARM core进行接口,调试时发现一切正常,但模块无法运行,因为未设置启用位,但我多次执行了该操作

无效SPI_配置为91S_SPI*SPI, 无符号整数id, 无符号整数配置 {

}

任何人都有可能帮助我解决这个问题的想法
非常感谢

选择一个可读写的外围寄存器,例如SPI_CSR0。设置寄存器,然后读取该寄存器的内容。如果内容不是你写的,那么外围设备就死了。检查外围设备的时钟是否已启用。顺便问一下,设置SPI_CSRn寄存器的代码在哪里?SPI->SPI_CR |=AT91C_SPI_SPIEN;-CR寄存器是只写的。读取值未定义,因此此语句是使用未知值进行赋值的错误。spi->spi_CR=AT91C_spi_SWRST | AT91C_spi_spin;-根据经验,我避免在控制寄存器中一次设置多个操作,除非有迫切的需要和记录的有效性。您是否为外围设备启用了时钟?
 // Disable the interrupt first
AT91C_BASE_AIC->AIC_IDCR = 1 << id;   
// Clear interrupt
AT91C_BASE_AIC->AIC_ICCR = 1 << id;

AT91C_BASE_PMC->PMC_PCER = 1 << id;
// Execute a software reset of the SPI twice
spi->SPI_CR = AT91C_SPI_SWRST ;
spi->SPI_CR = AT91C_SPI_SWRST | AT91C_SPI_SPIEN;
spi->SPI_MR = configuration;

// Disables the transmitter PDC transfer requests.
spi->SPI_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;

spi->SPI_CR |= AT91C_SPI_SPIEN;