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(发送一些随机数据,以检查总线是否正常工作,以便我可以添加更多代码。在段循环中,我还设置了一个别针。

在我的范围图像上,我看到SPI PIN MOSI上没有发送数据,而CLK PIN也没有发送信息。PB5(每次尝试发送数据时我都在颠倒的引脚(正在工作,并且周期约为20微秒。

我正在通过ATMEL ICE编程Atmega328p。编程界面也是通过SPI,我在某处读到这可能是一个问题。我不确定。

有人知道可能是什么问题吗?

我的第一个猜测不是将SS PIN(PB2(设置为输出。它可能几乎随机切换到从模式。但是它似乎是作为输出设置的(在评论中没有说明(。

但是,在仔细观察此表达式之后,很明显它根本没有设置:

DDRB = (1<<5) || (1<<3) || (1<<2);

逻辑或 ||和bitwise或 |之间存在巨大差异。

相关内容

  • 没有找到相关文章

最新更新