Здравствуйте! Пытаюсь связать два модуля TR24F - безрезультатно. Написал код(привожу ниже). По SPI регистры параметрируются, но как-то через раз, читаются отлично. Прерывание при отсылке на передатчике происходит, значит пакет с данными прошел, а вот на приемнике глухо. Регистры 0, 9-16 на стороне приемника и передатчика учтены и поставлены правильно. Помогите найти ошибку. Пишу на CVAVR под Atmega8 Код (Text): Код: #define RDY PORTC.4 //27 out #define SCK PORTC.2 //25 out #define DAT PORTC.0 // 23 in/out #define INDAT PINC.0// 23 #define DAT_DDR DDRC.0 // 23 #define EN PORTC.5 //28 out #define PSB PORTD.1 //3 out #define INT PIND.2 // 4 in //#define DRSSI PIND.6 flash unsigned char regs[25]={ 0xA8,// 0x28 T/R Channel index 0x03,// Crystal Frequency and RF Power 0x78,// Data Function Control 0x87,// RSSI Function Control 0x20,// RSSI Value 0x0F,// Data format control 0x30,// Multi Burst Packet Repeat Control 0x21,// Power Ramp Control 0x03,// Addres Length 0x02,// Destination Addres 0x34 0x02,// Destination Addres 0x22 0x02,// Destination Addres 0x55 0x00,// Destination Addres 0x00,// Destination Addres 0x01,// Device Addres 0x01,// Device Addres 0x01,// Device Addres 0x00,// Device Addres 0x00,// Device Addres 0x00,// Reserved 0x00,// PLL Pre-Turn-On Time 0xB4,// PLL Lock Time 0x00,// Reserved 0x22,// Option 0x04 // RX Turn On Time } ; void spi_access_mode(void) { DAT=1; PSB=1; EN=1; RDY=0; SCK=0; #asm("nop") }; void active_mode(void) { DAT=1; PSB=1; EN=0; SCK=0; RDY=1; #asm("nop") }; // Output eight-bit value using selected bit-bang pins void spi_bitbang_out(char value) { char x; for(x=8;x>0;x--){ if(value & 0x80)DAT=1; else DAT=0; #asm("nop") SCK=1; value<<=1; #asm("nop") SCK=0; #asm("nop") } } ; // Input eight-bit value using selected bit-bang pins char spi_bitbang_in() { unsigned char x=0; unsigned char y; x=0; for(y=8;y>0;y--){ SCK=1; #asm("nop") x<<=1; if(INDAT==1){x|=0b00000001;} SCK=0; #asm("nop") } // Store next bit return(x); } void spi_write_regs(unsigned char addres,unsigned char data) { spi_access_mode(); DAT_DDR=1; spi_bitbang_out(addres|0x80); // Send address spi_bitbang_out(data); // Send data EN=0; } ; unsigned char spi_read_reg(unsigned char addres) { unsigned char data; spi_access_mode(); DAT_DDR=1; spi_bitbang_out(addres); // Send address DAT_DDR=0; data=spi_bitbang_in(); //read data EN=0; return(data); }; void tr24f_init(void) {unsigned char y; for(y=0;y<24;y++) spi_write_regs(y,regs[y]); }; unsigned char *fifo_read(unsigned char data_length) {unsigned char *data, y; active_mode(); DAT_DDR=0; for(y=data_length;y>0;y--) data[y]=spi_bitbang_in(); return(data); }; void fifo_write(unsigned char *data,unsigned char data_length) { unsigned char y; active_mode(); DAT_DDR=1; delay_us(20); spi_bitbang_out(regs[0x09]); spi_bitbang_out(regs[0x0A]); spi_bitbang_out(regs[0x0B]); for(y=data_length;y>0;y--) spi_bitbang_out(data[y]); spi_bitbang_out(1); spi_bitbang_out(1); spi_bitbang_out(1); RDY=0; };