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

📄 sim_spi.txt

📁 单片机 模拟模拟SPI.txt 单片机 模拟模拟SPI.txt 单片机 模拟模拟SPI.txt
💻 TXT
字号:
具体实现如下:

#define SPI_DATA    GPIO0

#define SPI_CLK     GPIO1

void spi_write(char data)

{

   int8 i = 7;

   uint8 mask[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

   

   for(; i >= 0; i--) {

   gpio_out(SPI_CLK, GPIO_LOW_VALUE); /*把clock线拉低,模拟一个时钟*/

   gpio_out(SPI_DATA, ((data & mask[i]) >> i)); /*把数据送上DATA线*/

   

   spi_delay(10);   /*等待适当的时间,以等待数据稳定*/

   

   gpio_out(SPI_CLK, GPIO_HIGH_VALUE); /*拉高clock线,让设备端接收数据*/

    spi_delay(10);

}

}

实际上模拟SPI是很简单的事情, 只要对照SPI传输模式的时序图来模拟就行了。需要注意的是一定要有个等待时间,以使数据在数据线上稳定下来, 并使设备端有时间取数据。刚开始调试的时候可以适当把等待时间延长一点,当调通了SPI后在降下等待时间。

   我写的等待时间如下:

   #define spi_delay(delay)   \

   { \

       register uint32 i = 0; \

       while(i < delay) { \

            __asm{ \

                 NOP; \

                 NOP; \

                 NOP; \

                 NOP; \

              }; \

              i -= 4; \

         } \

     }


呵呵,整个过程就是这样简单。

⌨️ 快捷键说明

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