ATTiny24/44/84 使用USI接口实现SPI发送功能
2018-02-22 本文已影响0人
沧海一声笑的DIY宇宙
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;
}
这里发送完后就能收到数据。