ATTiny24/44/84 使用USI接口实现SPI发送功能 (2016-08-28 19:48:41)

USI发送数据使用的寄存器USIDR和接收是同一个。

实现发送的功能更简单点。

连接方式,MEGA设为slave。

ATTiny   MEGA

DO         MOSI

USCK     SCK

PA0         SS

首先把SCK引脚和DO引脚设为输出,另外需要设置片选的ss。由于Tiny没有ss脚,随便选个脚,用软件的方式实现吧。

uint8_ttransfer(uint8_t spiData)

{

  // 设置需要传送的数据

  USIDR = spiData;

  //

  USISR = _BV(USIOIF);

do{

 // 这里USICLK设置为1后,会让位移寄存器进行一次位移,也就是发送1bit的数据。这里看起来像是传送速率的控制

// USITC是USCK接口产生时钟

USICR = _BV(USIWM0) | _BV(USICS1) | _BV(USICLK) | _BV(USITC);

 // 这里用USIOIF来做为发送是否完成的检测

}while((USISR & _BV(USIOIF)) == 0);

returnUSIDR;

}

这里发送完后就能收到数据。

你可能感兴趣的:(ATTiny24/44/84 使用USI接口实现SPI发送功能 (2016-08-28 19:48:41))