问题:
表现现象为第一个SPI时钟慢于后边的时钟,第一个字节慢于后边的字节,波形:
代码如下:
//optimizations for speed
static uint8_t usr_spi_read_write(uint8_t data)
{
uint8_t recv = 0;
SPI_SCK_L;
if(data & 0x80) SPI_MOSI_H;
else SPI_MOSI_L;
SPI_SCK_H;
if(SPI_MISO) recv |= 0x80;
……此处省略, ---0x40-0x02---
SPI_SCK_L;
if(data & 0x01) SPI_MOSI_H;
else SPI_MOSI_L;
SPI_SCK_H;
if(SPI_MISO) recv |= 0x01;
return recv;
}
调用:
分析可能原因:
mcu可能具有指令缓存功能,FLASH LATENCY配置为3,flash第一次调用时mcu需要从flash取指令,第二次执行时发现指令相同不再从flash取指,节约了flash取指时间,因此速度变快,再次调用时缓存已被其他指令覆盖,需要再次取指,造成每个第一次调用时间均加长。mcu从flash执行相同指令时速度可能更快