SPI 不适用于 atmega328p
SPI not working on atmega328p
我正在尝试对 atmega328p 进行编程,但 SPI 总线不工作。它没有通过总线发送任何数据。
我的代码如下:
#include <asf.h>
#include <stdio.h>
#include <main.h>
int main (void)
{
board_init();
SPI_MasterInit();
DDRD = (1<<DDD5);
while(1)
{
PORTB &= ~(1<<DDB2);
SPI_MasterTransmit(0xAB);
PORTB |= (1<<DDB2);
PORTD ^= (1<<DDD5);
}
}
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB = (1<<5) || (1<<3) || (1<<2);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
我正在尝试通过总线 (0xAB) 发送一些随机数据以检查总线是否正常工作,以便我可以添加更多代码。在 while 循环中,我还设置了一个引脚。
在我的示波器图像上,我看到 SPI 引脚 MOSI 上没有发送数据,CLK 引脚也没有发送信息。 PB5(我每次尝试发送数据时都要反转的引脚)正在工作并且有大约 20 微秒的周期。
我正在通过 Atmel ICE 对 Atmega328p 进行编程。编程接口也是通过 SPI,我在某处读到这可能是个问题。我不太确定。
有谁知道可能是什么问题?
我的第一个猜测是没有将 SS 引脚 (PB2) 设置为输出。它可能导致几乎随机地切换到从属模式。不过好像是设置成输出的(评论里没说)
但仔细观察这个表达式后,很明显它根本没有设置:
DDRB = (1<<5) || (1<<3) || (1<<2);
逻辑或||
与按位或|
之间存在巨大差异。
我正在尝试对 atmega328p 进行编程,但 SPI 总线不工作。它没有通过总线发送任何数据。
我的代码如下:
#include <asf.h>
#include <stdio.h>
#include <main.h>
int main (void)
{
board_init();
SPI_MasterInit();
DDRD = (1<<DDD5);
while(1)
{
PORTB &= ~(1<<DDB2);
SPI_MasterTransmit(0xAB);
PORTB |= (1<<DDB2);
PORTD ^= (1<<DDD5);
}
}
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB = (1<<5) || (1<<3) || (1<<2);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
我正在尝试通过总线 (0xAB) 发送一些随机数据以检查总线是否正常工作,以便我可以添加更多代码。在 while 循环中,我还设置了一个引脚。
在我的示波器图像上,我看到 SPI 引脚 MOSI 上没有发送数据,CLK 引脚也没有发送信息。 PB5(我每次尝试发送数据时都要反转的引脚)正在工作并且有大约 20 微秒的周期。
我正在通过 Atmel ICE 对 Atmega328p 进行编程。编程接口也是通过 SPI,我在某处读到这可能是个问题。我不太确定。
有谁知道可能是什么问题?
我的第一个猜测是没有将 SS 引脚 (PB2) 设置为输出。它可能导致几乎随机地切换到从属模式。不过好像是设置成输出的(评论里没说)
但仔细观察这个表达式后,很明显它根本没有设置:
DDRB = (1<<5) || (1<<3) || (1<<2);
逻辑或||
与按位或|
之间存在巨大差异。