如何解决ATmega32 SPI 作为从设备传输导致 SPDR 写入冲突
我正在 Proteus 上模拟我的代码,并尝试通过 SPI 作为主设备和从设备在两个 ATmega32 设备之间发送数据。但是,对于我尝试发送的字符串的每个字符,我一直收到从设备的警告“SPDR 写入冲突。写入的数据被忽略”。
#define F_CPU 8000000UL
#include <avr/io.h>
void PORT_INIT(void);
void SPI_SLAVE_INIT(void);
void SPI_SEND_STRING(void);
char *transmit = "Hello there!"; ///< Data to be sent.
int main(void){
DDRA = 0xFF;
PORT_INIT();
SPI_SLAVE_INIT();
SPI_SEND_STRING();
}
/*!
* @brief Initialize ports.
*/
void PORT_INIT(void){
DDRB &= ~((1<<PB4)|(1<<PB5)|(1<<PB7)); ///< Set MOSI,SCK and SS pins to input.
DDRB |= (1<<PB6); ///< Set MISO pin to output.
}
/*!
* @brief Initialize SPI in slave mode.
*/
void SPI_SLAVE_INIT(void){
SPCR = (1<<SPE); ///< Enable SPI in Slave SPI mode.
}
/*!
* @brief Transmit a message over SPI.
*/
void SPI_SEND_STRING(void){
for(uint8_t i=0;transmit[i]!=0;i++){
SPDR = transmit[i]; ///< Load the data byte to the SPDR shift register to transmit.
while(!(SPSR & (1<<SPIF))); ///< Wait until the full data byte is received.
PORTA = SPDR;
}
}
我在这里遗漏了什么吗?主设备时钟频率为 Fosc/16。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。