📄 main._c
字号:
#include "dd.h"
#include "crc16.h"
//extern void dd_initialise(void);
//extern void dd_idle(void);
//extern void receive_constant_frame(void);
void transmit_constant_frame(void);
void crc16_reset(void);
unsigned char uart_rx_rf_tx_count;
unsigned char temp_count[4];
unsigned int temp_count1[4];
unsigned char led_state[2];
#define tx_never 1
#define tx_en 1
void main()
{
dd_initialise();
CLI();
dd_read_ADF70XX_version();
//dd_read_filter_cal();
// dd_read_RSSI();
dd_set_ADF7021_Power_off();
dd_set_ADF7021_Power_on();
//test_mode();
//if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE) dd_set_TX_to_RX_mode();
//else dd_set_RX_mode();
dd_set_RX_mode();
//dd_read_filter_cal();
GICR|=0x20; // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)
led_state[0]=0;
led_state[1]=0;
SEI();
#if tx_en
rf_tx_state[0] = 1;
uart_rx_rf_tx_count=9;
#endif
DDRB &= ~(1<<SPI_MISO);
PORTB |= 1<<SPI_MISO;
while(1)
{
if(rf_tx_state[1]==1){
if(rf_tx_state[2]==1){
CLI();
dd_set_ADF7021_Power_off();
temp_count1[0]=0x8ff;
while(temp_count1[0]-->0)
{
}
dd_set_ADF7021_Power_on();
//if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE) dd_set_TX_to_RX_mode();
//else dd_set_RX_mode();
dd_set_RX_mode();
GICR|=0x20; // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)
SEI();
rf_tx_state[1]=0;
rf_tx_state[2]=0;
}
}
if (rf_tx_state[0] == 1){
dd_idle();
transmit_constant_frame();
#if tx_never
rf_tx_state[1]=0;
rf_tx_state[0] = 1;
#else
rf_tx_state[0] = 0;
rf_tx_state[1] = 1;
rf_tx_state[2] = 1;
#endif
//rf_tx_state[2]=0;
}
}
// for(;;) {my_delay(10000); P3 ^= 0x10; }
}
/*****************************************************************************
Function: transmit_constant_frame
==============================================================================
Description:
Transmit a frame including preamble & sync word, payload length,
payload and CRC
*****************************************************************************/
void transmit_constant_frame(void)
{
// prepare tx frame header including preamble, sync word, payload length; the following is just an example
//mac_tx_packet_header.seq_number = 0x0FF4;
//mac_tx_packet_header.short_address = 0xAA;
//mac_tx_packet_header.payload_length = uart_rx_rf_tx_count;
unsigned int delay_count;
unsigned char j,i,byte;
dd_set_ADF7021_Power_off();
delay_count=0x8ff;
PORTA |= 1<<RFMD_EN;
DDRB |= 1<<SPI_MISO;
PORTB |= 1<<SPI_MISO;
while(delay_count-->0)
{
}
// prepare payload length
//0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x12, 0x34, 0x56
dd_port_data_tx_buffer[0]=0xAA;
dd_port_data_tx_buffer[1]=0xAA;
dd_port_data_tx_buffer[2]=0xAA;
dd_port_data_tx_buffer[3]=0xAA;
dd_port_data_tx_buffer[4]=0xAA;
dd_port_data_tx_buffer[5]=0x12;
dd_port_data_tx_buffer[6]=0x34;
dd_port_data_tx_buffer[7]=0x56;
#if tx_never
dd_port_data_tx_buffer[8]=0x09;
dd_port_data_tx_buffer[9]=0x55;
dd_port_data_tx_buffer[10]=0x55;
dd_port_data_tx_buffer[11]=0x55;
dd_port_data_tx_buffer[12]=0x76;
dd_port_data_tx_buffer[13]=0x54;
dd_port_data_tx_buffer[14]=0x32;
dd_port_data_tx_buffer[15]=0x07;
dd_port_data_tx_buffer[16]=0x09;
dd_port_data_tx_buffer[17]=0x09;
#else
dd_port_data_tx_buffer[8]=uart_rx_rf_tx_count;
memcpy(&dd_port_data_tx_buffer[9], uart_rx_buffer, uart_rx_rf_tx_count);
#endif
//memcpy(&dd_port_data_tx_buffer[9], uart_rx_buffer, uart_rx_rf_tx_count);
dd_set_ADF7021_Power_on();
if (has_set_tx_mode_before == 1 & phy_state == PHY_IN_RX_MODE) dd_set_RX_to_TX_mode();
else dd_set_TX_mode();
CLI();
dd_data_port_state = DATA_PORT_TRANSMITTING;
dd_data_packet_phase = PACKET_PHASE_PREAMBLE;
crc16_reset();
SPCR |= 0x80; // Enable I2C/SPI interrupt
/* Enable SPI */
SPCR |= 0x40;
//p_mac_active_tx_frame = &mac_preamble_syncword[0];
dd_port_data_tx_frame_idx = 1;
//SBUF = p_mac_active_tx_frame[dd_port_data_tx_frame_idx];
SPDR = dd_port_data_tx_buffer[dd_port_data_tx_frame_idx];
dd_port_data_tx_frame_idx++;
delay_count=0x8ff;
while(delay_count-->0)
{
}
dd_set_ADF7021_Power_off();
PORTA &= ~(1<<RFMD_EN);
DDRB &= ~(1<<SPI_MISO);
PORTB |= 1<<SPI_MISO;
#if tx_never
my_delay_1(0xffff);
uart_rx_rf_tx_count=9;
#endif
SEI();
}
/*****************************************************************************
Function: receive_constant_frame
==============================================================================
Description:
Receive a frame including preamble & sync word, payload length,
payload and CRC
*****************************************************************************/
void receive_constant_frame(void)
{
CLI();
dd_set_ADF7021_Power_on();
if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE) dd_set_TX_to_RX_mode();
else dd_set_RX_mode();
GICR|=0x20; // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)
SEI();
}
void crc16_reset(void)
{
crc_lo = crc_hi = 0;
}
unsigned int crc16(unsigned char byte)
{
unsigned char combination;
// First calculate the combination term
combination = crc_lo ^ byte;
// Now update the CRC register
crc_lo = crc_hi ^ crc_lut_low[combination];
crc_hi = crc_lut_high[combination];
return (crc_hi << 8) | crc_lo;
}
/*****************************************************************************
* $History: main.c $
*
* ***************** Version 1,0 *****************
* User: Date: 3/22/07
* Function:
- UART RPC(Uart Remote Control)
- Power up in tx (optimised wake up sequence)
- Power up in rx (optimised wake up sequence)
- Transmit packet (preamble+SWD+header+length+constant payload+CRC)
- Receive packet (preamble+SWD+header+length+constant payload+CRC)
- Tx to Rx
- Rx to Tx
- Do RSSI measurement
- Do AFC and IF filter cal adjust readback
- Do ADC readback (Battery, temperature, external ADC) (note different ADC readback sequence dependant
on in power on, tx or rx mode)
****************************************************************************/
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -