سلام،
خسته نباشید. لطفا میشه یکی بگه اشکال کد زیر در چی هستش؟ دیتای خروجی روی پورت سریال فقط 0x00 هستش.
برنامه master:
برنامه slave
خسته نباشید. لطفا میشه یکی بگه اشکال کد زیر در چی هستش؟ دیتای خروجی روی پورت سریال فقط 0x00 هستش.
برنامه master:
کد:
#include <stdio.h>
#include "board.h"
#include "dbgu.h"
#include "pio.h"
#include "aic.h"
void delay(unsigned char x)
{
unsigned int i,j;
for(i=0;i<1275;i++)
for(j=0;j<x;j++);
}
static const Pin pins[] = {PINS_DBGU,PINS_SPI0, PIN_SPI0_NPCS1 };
int main(void)
{
PIO_Configure(pins, PIO_LISTSIZE(pins));
DBGU_Configure(DBGU_STANDARD, 115200, BOARD_MCK);
// Configure PMC by enabling SPI clock
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SPI0);
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
printf("start printing from spi device\n\r");
AT91C_BASE_PIOA->PIO_PDR = (1 << 13 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_MDER = (1 << 13 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_ASR = (1 << 13 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_PPUER = (1 << 13 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_SPI0->SPI_MR = 0x0F000013;
//SPI Chip Select
AT91C_BASE_SPI0->SPI_CSR[1] = 0x0F0FFF02;
//Enable interrupt
//AT91C_BASE_SPI0->SPI_IER = 0x40;
//Enable SPI
AT91C_BASE_SPI0 -> SPI_CR = AT91C_SPI_SPIEN; // SPI is enable
//AIC_ConfigureIT(AT91C_ID_SPI0,0, SPI_ISR);
//AIC_EnableIT(AT91C_ID_SPI0);
while(1)
{
while(!(AT91C_BASE_SPI0->SPI_SR & 0x2));
AT91C_BASE_SPI0->SPI_TDR = 0x42;
delay(10);
}
}
برنامه slave
کد:
#include <stdio.h>
#include "board.h"
#include "dbgu.h"
#include "pio.h"
#include "aic.h"
void SPI_ISR(void)
{
printf("0x%X ",AT91C_BASE_SPI0->SPI_RDR & 0xff);
}
static const Pin pins[] = {PINS_DBGU,PINS_SPI0, PIN_SPI0_NPCS0 };
int main(void)
{
PIO_Configure(pins, PIO_LISTSIZE(pins));
DBGU_Configure(DBGU_STANDARD, 115200, BOARD_MCK);
// Configure PMC by enabling SPI clock
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SPI0);
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
AT91C_BASE_PIOA->PIO_PDR = (1 << 12 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_MDER = (1 << 12 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_ASR = (1 << 12 | 1 << 16 | 1 << 17 | 1 << 18);
AT91C_BASE_PIOA->PIO_PPUER = (1 << 12 | 1 << 16 | 1 << 17 | 1 << 18);
printf("start printing from spi device\n\r");
AT91C_BASE_SPI0 -> SPI_MR = 0x0;
//SPI Chip Select
AT91C_BASE_SPI0->SPI_CSR[0] = 0x02;
//Enable interrupt
AT91C_BASE_SPI0->SPI_IER = 0x40;
//Enable SPI
AT91C_BASE_SPI0 -> SPI_CR = AT91C_SPI_SPIEN; // SPI is enable
AIC_ConfigureIT(AT91C_ID_SPI0,0, SPI_ISR);
AIC_EnableIT(AT91C_ID_SPI0);
while(1)
{
}
}








دیدگاه