我在想代码应该不会有问题,最大问题是SPI.H库里的传输函数,总觉得不太对。呵呵
- #include <stdio.h>
- #include <Arduino.h>
- #include <avr/pgmspace.h>
- #include<SPI.h>
- #define uchar unsigned char
- //initial i.o port
- void IO_Initila(void)
- {
- // digitalWrite(SS, LOW);
- pinMode(MISO,OUTPUT);
- pinMode(SS, INPUT);
- pinMode(SCK, INPUT);
- pinMode(MOSI, INPUT);
- SPCR |= _BV(SPE);
-
- }
- //SlaveInit
- void SPI_SlaveInit(void)
- {
- SPCR=(1<<SPE);
- SPCR |= _BV(DORD);
- SPCR |= _BV(CPOL);
- SPCR |= _BV(CPHA);
- }
- void setup()
- {
- pinMode(12,OUTPUT);
- pinMode(13,OUTPUT);
- digitalWrite(12,HIGH);//ACKPIN 每个8 bits数据发送之后的最后一个时钟周期变低
- Serial.begin(115200);
- }
- void loop()
- {
- IO_Initila();
- SPI_SlaveInit();
- while(digitalRead(SS)==0)
- {
- Serial.print("read:");
- Serial.print(SPI.transfer(0xFF));
- Serial.print("-");
- Serial.print(SPI.transfer(0x41));
- Serial.print("-");
- Serial.print(SPI.transfer(0x5A));
- Serial.print("-");
- Serial.print(SPI.transfer(0xFF));
- Serial.print("-");
- Serial.println(SPI.transfer(0xFD));
- delayMicroseconds(2);
- pinMode(SS, OUTPUT);
- digitalWrite(SS,HIGH);
- }
- }
- //改SPI.H的函数
- byte SPIClass::transfer(byte _data) {
- SPDR = _data;
- while (!(SPSR & _BV(SPIF)))
- ;
- delayMicroseconds(6);//ACKPIN 每个8 bits数据发送之后的最后一个时钟周期变低
- digitalWrite(12,LOW);
- delayMicroseconds(6);
- digitalWrite(12,HIGH);
- return SPDR;
- }
-
复制代码 |