|
本帖最后由 MiniCat 于 2012-4-5 11:02 编辑
AVR MEGA8 与SI4432 SPI,现在4432返回来的都是乱码,不知道是什么原因,麻烦各位大侠帮看看。程序如下:
void spi_init(void)
{
SPCR = 0x73;
}
void SpiWriteAddressData(uchar add, uchar data)
{
nSET_CLR;
Delay_us(3);
add|=REG_WRITE;
SPDR=add;
while(!(SPSR&(1<<SPIF)));
SPDR=data;
while(!(SPSR&(1<<SPIF)));
Delay_us(3);
nSET_SET;
}
uchar SpiReadAddressData(uchar add)
{
nSET_CLR;
Delay_us(3);
add&=REG_READ;
SPDR=add;
while(!(SPSR&(1<<SPIF)));
SPDR=0x00;
while(!(SPSR&(1<<SPIF)));
Delay_us(3);
nSET_SET;
return SPDR;
}
端口初始化:
void port_init(void)
{
PORTB = 0x17;
DDRB = 0x2D;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x03;
DDRD = 0x76;
}
相关宏定义:
//**********SI4432************//
#define GPIO_0 (PIND & (1<<PD7))
#define IRQ_L ((PINB & (1<<PB1))==0)
#define IRQ_H ((PINB & (1<<PB1))==1)
#define SDN_SET PORTB |=BIT(PB0)
#define SDN_CLR PORTB &=~BIT(PB0)
#define nSET_SET PORTB |=BIT(PB2)
#define nSET_CLR PORTB &=~BIT(PB2)
#define REG_READ (0x7F)
#define REG_WRITE (0x80)
SPI初始化:
void Si4432_init(void)
{
SDN_CLR; //开RF模块
Delay_ms(1000);
SpiWriteAddressData( OperatingFunctionControl1 , 0x80); //软复位
Delay_ms(1); //timeout for SW POR interrupt(~1ms)
SpiWriteAddressData( InterruptEnable1 , 0x00); //禁止所有中断
SpiWriteAddressData( InterruptEnable2 , 0x00);
//SpiWriteAddressData( CrystalOscillatorLoadCapacitance , 0x7F); //Add by T.L.Steve
SpiWriteAddressData( TXRampControl , 0x7F); //Add by T.L.Steve
SpiWriteAddressData( AFCLoopGearshiftOverride , 0x00);
SpiWriteAddressData( FrequencyBandSelect , 0x53); //set frequency
SpiWriteAddressData( NominalCarrierFrequency1 , 0x4b); //433HZ
SpiWriteAddressData( NominalCarrierFrequency0 , 0x00);
SpiWriteAddressData( ModulationModeControl1 , 0x00);
SpiWriteAddressData( ModulationModeControl2 , 0x22); //asynchronous mode FSK
SpiWriteAddressData( HeaderControl2 , 0x02); //no head; sync word 3 and 2
SpiWriteAddressData( HeaderControl1 , 0x00);
SpiWriteAddressData( PreambleLength , 0x04); // 2 byte
SpiWriteAddressData( PreambleDetectionControl , 0x10); //8bit
SpiWriteAddressData( SyncWord3 , 0x2d);
SpiWriteAddressData( SyncWord2 , 0xa4);
SpiWriteAddressData( DataAccessControl , 0x88); //enable TX handling
SpiWriteAddressData( IFFilterBandwidth , 0x03); //BW=90kHZ
SpiWriteAddressData( ClockRecoveryOversamplingRatio , 0xa1);
SpiWriteAddressData( ClockRecoveryOffset2 , 0x20);
SpiWriteAddressData( ClockRecoveryOffset1 , 0x4e);
SpiWriteAddressData( ClockRecoveryOffset0 , 0xa5);
SpiWriteAddressData( ClockRecoveryTimingLoopGain1 , 0x00);
SpiWriteAddressData( ClockRecoveryTimingLoopGain0 , 0x36);
SpiWriteAddressData( TXDataRate1 , 0x02); //9600BPS
SpiWriteAddressData( TXDataRate0 , 0x75);
SpiWriteAddressData( FrequencyDeviation , 0x48);
SpiWriteAddressData( ClockRecoveryGearshiftOverride , 0x13);
SpiWriteAddressData( GPIO0Configuration , 0x1f);
SpiWriteAddressData( GPIO1Configuration , 0x12); //GPIO_1 TX state
SpiWriteAddressData( GPIO2Configuration , 0x15); //GPIO_2 RX state
SpiWriteAddressData( OperatingFunctionControl2 , 0x03);//清接收、发射FIFO
SpiWriteAddressData( OperatingFunctionControl2 , 0x00);//恢复接收、发射FIFO正常
SpiWriteAddressData( OperatingFunctionControl1 , 0x05);//进入“接收模式”和“预备模式”
Delay_ms(1000);
}
硬件连接:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|