#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/cpufunc.h>
#define DDR_SPI DDRB
#define DD_MOSI DDB5
#define DD_MISO DDB6
#define DD_SCK DDB7
#include "uart.h"
void spi_init(void) {
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
FILE usart0_str = FDEV_SETUP_STREAM(USART0SendByte, USART0ReceiveByte, _FDEV_SETUP_RW);
void print_block(uint8_t *block_address, uint16_t length)
{
uint16_t i, j;
uint8_t byte;
for(i = 0; i < length / 16; i++)
{
for(j = 0; j < 16; j++)
{
printf("%02x", block_address
[i
* 16 + j
]); }
for(j = 0; j < 16; j++)
{
byte = block_address[i * 16 + j];
if ((byte >= 32) && byte <= 126)
else
}
}
}
int main(void) {
//uint8_t i;
uint8_t byte;
USART0Init();
stdin=stdout=&usart0_str;
_delay_ms(1);
spi_init();
byte = 0x00;
//for(i = 0; i < 10; i++){
SPDR = 0xFF;
while(!(SPSR & (1<<SPIF))){
byte++;
}
byte = 0x00;
SPDR = 0xFF;
while(!(SPSR & (1<<SPIF))){
byte++;
}
byte = 0x00;
// }
while (1) {
_NOP();
}
return 1;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxhdnIvaW8uaD4KI2luY2x1ZGUgPHV0aWwvZGVsYXkuaD4KI2luY2x1ZGUgPGF2ci9pbnRlcnJ1cHQuaD4KI2luY2x1ZGUgPGF2ci9jcHVmdW5jLmg+CgojZGVmaW5lIEREUl9TUEkgRERSQgojZGVmaW5lIEREX01PU0kgRERCNQojZGVmaW5lIEREX01JU08gRERCNgojZGVmaW5lIEREX1NDSyAgRERCNwoKI2luY2x1ZGUgInVhcnQuaCIKCnZvaWQgc3BpX2luaXQodm9pZCkgewogICAgRERSX1NQSSA9ICgxPDxERF9NT1NJKXwoMTw8RERfU0NLKTsKICAgIFNQQ1IgPSAoMTw8U1BFKXwoMTw8TVNUUil8KDE8PFNQUjApOwp9CgpGSUxFIHVzYXJ0MF9zdHIgPSBGREVWX1NFVFVQX1NUUkVBTShVU0FSVDBTZW5kQnl0ZSwgVVNBUlQwUmVjZWl2ZUJ5dGUsIF9GREVWX1NFVFVQX1JXKTsKCnZvaWQgcHJpbnRfYmxvY2sodWludDhfdCAqYmxvY2tfYWRkcmVzcywgdWludDE2X3QgbGVuZ3RoKQp7CiAgICB1aW50MTZfdCBpLCBqOwogICAgdWludDhfdCBieXRlOwogICAgCiAgICBmb3IoaSA9IDA7IGkgPCBsZW5ndGggLyAxNjsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJTA0eDogIiwgaSAqIDE2KTsKICAgICAgICAKICAgICAgICBmb3IoaiA9IDA7IGogPCAxNjsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIlMDJ4IiwgYmxvY2tfYWRkcmVzc1tpICogMTYgKyBqXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHByaW50ZigiICIpOwogICAgICAgIGZvcihqID0gMDsgaiA8IDE2OyBqKyspCiAgICAgICAgewogICAgICAgICAgICBieXRlID0gYmxvY2tfYWRkcmVzc1tpICogMTYgKyBqXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgoYnl0ZSA+PSAzMikgJiYgYnl0ZSA8PSAxMjYpCiAgICAgICAgICAgIHByaW50ZigiJWMiLCBieXRlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICBwcmludGYoIi4iKTsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KfQoKaW50IG1haW4odm9pZCkgewogICAgLy91aW50OF90IGk7CiAgICB1aW50OF90IGJ5dGU7CiAgICAKICAgIFVTQVJUMEluaXQoKTsKICAgIHN0ZGluPXN0ZG91dD0mdXNhcnQwX3N0cjsKICAgIAogICAgX2RlbGF5X21zKDEpOwogICAgc3BpX2luaXQoKTsKICAgIHByaW50ZigiU3RhcnRcclxuIik7CiAgICBieXRlID0gMHgwMDsKICAgIAogICAgLy9mb3IoaSA9IDA7IGkgPCAxMDsgaSsrKXsKICAgIFNQRFIgPSAweEZGOwogICAgd2hpbGUoIShTUFNSICYgKDE8PFNQSUYpKSl7CiAgICAgICAgYnl0ZSsrOwogICAgfQogICAgCiAgICBwcmludGYoIiVkXHJcbiIsIGJ5dGUpOwogICAgYnl0ZSA9IDB4MDA7CiAgICAKICAgIFNQRFIgPSAweEZGOwogICAgd2hpbGUoIShTUFNSICYgKDE8PFNQSUYpKSl7CiAgICAgICAgYnl0ZSsrOwogICAgfQogICAgCiAgICBwcmludGYoIiVkXHJcbiIsIGJ5dGUpOwogICAgYnl0ZSA9IDB4MDA7CiAgICAKICAgIC8vIH0KICAgIAogICAgcHJpbnRmKCJTdG9wXG4iKTsKCgogICAgd2hpbGUgKDEpIHsKICAgICAgICBfTk9QKCk7CiAgICB9CiAgICAKICAgIHJldHVybiAxOwp9