⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 ZooBoot-4510
💻 C
字号:
#include <config.h>#include <hardware.h>#ifdef CFG_DRIVER_SPI#define SPI_CLK 5000000#define SPI_ID	13void spi_init( void) {   static pio_t *pioa = PIOA_BASE;   static pio_t *piob = PIOB_BASE;   static spi_t *spi = SPI_BASE;   static apmc_t *apmc;   apmc = (apmc_t *)APMC_BASE;     /* pio ... */  pioa->pdr = 0x0001ff80;  piob->pdr = 0x020ff000;  piob->bsr = 0x020ff000;  /* open SPI clock */  apmc->pcer = (1 << SPI_ID);   spi->cr = SWRST;   spi->cr = SPIEN;   spi->mr = PS | MSTR;   spi->csr3 = (((ARM_CLK/SPI_CLK/2)<<8)&SCBR) | NCPHA;   /* Setup the DataFlash card mode */   piob->codr = PIO(7);   piob->oer  = PIO(7);   piob->per  = PIO(7);   /* Setup the SPI pins for the DataFlash card */   pioa->sodr = PIO(6);   pioa->oer  = PIO(6);   pioa->per  = PIO(6);   pioa->pdr  = PIO(3) | PIO(2) | PIO(1) | PIO(0);}void write_spi( char * spi_msg, int size) {   static spi_t * spi = SPI_BASE;   while (size--) {      while (!(spi->sr & TDRE)); /* wait for previous transmission *//*      printf("Writing 0x%x in spi->tdr.\n", (char)*spi_msg);  */      spi->tdr = 0x00070000 | (0x000000ff & *spi_msg++);   }   while (!(spi->sr & TDRE)); /* wait for last transmission to finish */}void read_spi( char * spi_msg, int size) {   static spi_t * spi = SPI_BASE;   volatile unsigned long dummy;   dummy = spi->rdr; /* clear the RDRF just in case */   while (size--) {      write_spi(spi_msg, 1);      while (!(spi->sr & RDRF)); /* wait for shift in done *//*      printf("Reading 0x%x from spi->rdr.\n", (char)spi->rdr);*/      *spi_msg++ = spi->rdr;   }}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -