Помогите с кодом для приемопередатчика MRF49XA.
Например для передачи простого байта.
Кода для передатчика:
А вот код для приемника не могу понять как написать и даже сомневаюсь в правильности кода передатчика. Даташит прикрепил. помогите кто сталкивался и кто хорошо умеет читать на английском.
Раздел: Периферия и внешние устройства
Например для передачи простого байта.
Кода для передатчика:
#include <mega8535.h>
#include <delay.h>
/******************************************************
***** MRF49XA COMAMAND BYTE TO REGISTERS *****
*****************************************************/
#define COMMAND_BYTE_STSREG 0x00
#define COMMAND_BYTE_GENCREG 0x80
#define COMMAND_BYTE_AFCCREG 0xC4
#define COMMAND_BYTE_TXCREG 0x98
#define COMMAND_BYTE_TXBREG 0xB8
#define COMMAND_BYTE_CFSREG 0xA0
#define COMMAND_BYTE_RXCREG 0x94
#define COMMAND_BYTE_BBFCREG 0xC2
#define COMMAND_BYTE_RXFIFOREG 0xB2
#define COMMAND_BYTE_FIFORSTREG 0xCA
#define COMMAND_BYTE_SYNBREG 0xCE
#define COMMAND_BYTE_DRSREG 0xC6
#define COMMAND_BYTE_PMCREG 0x82
#define COMMAND_BYTE_WTSREG 0xE0
#define COMMAND_BYTE_DCSREG 0xC8
#define COMMAND_BYTE_BCSREG 0xC0
#define COMMAND_BYTE_PLLCREG 0xCC
/*****************************************************
***** MRF49XA DATA SETTING TO REGISTERS *****
****************************************************/
#define GENCREG_OPS1 0x18 //433MHz 12.5pF
#define AFCCREG_OPS1 0xD7
#define TXCREG_OPS1 0x30
#define TXBREG_OPS1 0x00
#define CFSREG_OPS1 0xC8 // 430.5MHz Fval = 200
#define RXCREG_OPS1 0xA1
#define BBFCREG_OPS1 0x2C
#define RXFIFOREG_OPS1
#define FIFORSTREG_OPS1 0x81
#define SYNBREG_OPS1
#define DRSREG_OPS1 0x23
#define PMCREG_OPS1 0x00
#define WTSREG_OPS1
#define DCSREG_OPS1
#define BCSREG_OPS1
#define PLLCREG_OPS1
/******************************************
***** SPI DIRECTION REGISTER *****
******************************************/
#define SPI_PORT_SS 0
#define SPI_PORT_MOSI 5
#define SPI_PORT_MISO 6
#define SPI_PORT_SCK 7
/******************************************
***** SPI CHIP SELECT CONTROL *****
******************************************/
#define SPI_ACTIVE_SS(PORT,BIT) PORT &= ~(1<<BIT)
#define SPI_UNACTIVE_SS(PORT,BIT) PORT |= (1<<BIT)
/**********************************************
***** SPI 16-BIT DATA RECEIVE ACCESS *****
**********************************************/
void SPI_write ( unsigned char command_byte, unsigned char data )
{
SPI_ACTIVE_SS(PORTB,SPI_PORT_SS);
SPDR = command_byte;
while (!(SPSR & (1<<SPIF)));
SPDR = data;
while (!(SPSR & (1<<SPIF)));
SPI_UNACTIVE_SS(PORTB,SPI_PORT_SS);
}
unsigned char SPI_read(unsigned char command_byte)
{
SPI_ACTIVE_SS(PORTB,SPI_PORT_SS);
SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
SPI_UNACTIVE_SS(PORTB,SPI_PORT_SS);
return SPDR;
}
void mrf49xa_initialization (void)
{
delay_ms(10);
SPI_write(COMMAND_BYTE_FIFORSTREG,FIFORSTREG_OPS1);
SPI_write(COMMAND_BYTE_FIFORSTREG,FIFORSTREG_OPS1|0x02);
SPI_write(COMMAND_BYTE_GENCREG, GENCREG_OPS1);
SPI_write(COMMAND_BYTE_AFCCREG, AFCCREG_OPS1);
SPI_write(COMMAND_BYTE_CFSREG,CFSREG_OPS1);
SPI_write(COMMAND_BYTE_DRSREG,DRSREG_OPS1);
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1);
SPI_write(COMMAND_BYTE_RXCREG,RXCREG_OPS1);
SPI_write(COMMAND_BYTE_TXCREG, TXCREG_OPS1);
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1 | 0x20);
delay_ms(5);
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1 | 0x80);
SPI_write(COMMAND_BYTE_GENCREG, GENCREG_OPS1 | 0x40);
SPI_write(COMMAND_BYTE_FIFORSTREG,FIFORSTREG_OPS1);
SPI_write(COMMAND_BYTE_FIFORSTREG,FIFORSTREG_OPS1|0x02);
}
void mrf49_send_byte(unsigned char data)
{
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1);
SPI_write(COMMAND_BYTE_GENCREG, GENCREG_OPS1|0x80);
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1|0x20);
SPI_write(COMMAND_BYTE_TXBREG,0xAA);
SPI_write(COMMAND_BYTE_TXBREG,data);
SPI_write(COMMAND_BYTE_PMCREG,PMCREG_OPS1|0x80);
SPI_write(COMMAND_BYTE_GENCREG, GENCREG_OPS1|0x40);
SPI_write(COMMAND_BYTE_FIFORSTREG,FIFORSTREG_OPS1|0x02);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
DDRB = (1<<SPI_PORT_SCK)|(1<<SPI_PORT_MOSI)|(1<<SPI_PORT_SS);
SPI_UNACTIVE_SS(PORTB, SPI_PORT_SS);
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x01;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 4000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
mrf49xa_initialization();
while (1)
{
//if (PINA&0x01)
delay_ms(1000);
mrf49_send_byte(254);
// Place your code here
};
}
А вот код для приемника не могу понять как написать и даже сомневаюсь в правильности кода передатчика. Даташит прикрепил. помогите кто сталкивался и кто хорошо умеет читать на английском.
Раздел: Периферия и внешние устройства