本文整理汇总了C++中pal_trx_reg_read函数的典型用法代码示例。如果您正苦于以下问题:C++ pal_trx_reg_read函数的具体用法?C++ pal_trx_reg_read怎么用?C++ pal_trx_reg_read使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pal_trx_reg_read函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: tfa_ed_sample
/**
* @brief Perform a single ED measurement
*
* @return ed_value Result of the measurement
* If the build switch TRX_REG_RAW_VALUE is defined, the transceiver's
* register value is returned.
*/
uint8_t tfa_ed_sample(void)
{
trx_irq_reason_t trx_irq_cause;
uint8_t ed_value;
tal_trx_status_t trx_status;
/* Make sure that receiver is switched on. */
do
{
trx_status = set_trx_state(CMD_RX_ON);
}
while (trx_status != RX_ON);
/*
* Disable the transceiver interrupts to prevent frame reception
* while performing ED scan.
*/
pal_trx_bit_write(SR_RX_PDT_DIS, RX_DISABLE);
/* Write dummy value to start measurement. */
pal_trx_reg_write(RG_PHY_ED_LEVEL, 0xFF);
/* Wait for ED measurement completion. */
pal_timer_delay(TAL_CONVERT_SYMBOLS_TO_US(ED_SAMPLE_DURATION_SYM));
do
{
trx_irq_cause = (trx_irq_reason_t)pal_trx_reg_read(RG_IRQ_STATUS);
}
while ((trx_irq_cause & TRX_IRQ_CCA_ED_READY) != TRX_IRQ_CCA_ED_READY);
/* Read the ED Value. */
ed_value = pal_trx_reg_read(RG_PHY_ED_LEVEL);
#ifndef TRX_REG_RAW_VALUE
/*
* Scale ED result.
* Clip values to 0xFF if > -35dBm
*/
if (ed_value > CLIP_VALUE_REG)
{
ed_value = 0xFF;
}
else
{
ed_value = (uint8_t)(((uint16_t)ed_value * 0xFF) / CLIP_VALUE_REG);
}
#endif
/* Clear IRQ register */
pal_trx_reg_read(RG_IRQ_STATUS);
/* Enable reception agian */
pal_trx_bit_write(SR_RX_PDT_DIS, RX_ENABLE);
/* Switch receiver off again */
set_trx_state(CMD_TRX_OFF);
return ed_value;
}
开发者ID:nandojve,项目名称:embedded,代码行数:64,代码来源:tfa.c
示例2: switch_pll_on
/**
* @brief Switches the PLL on
*/
static void switch_pll_on(void)
{
uint32_t start_time;
uint32_t current_time;
/* Check if trx is in TRX_OFF; only from PLL_ON the following procedure is applicable */
if (pal_trx_bit_read(SR_TRX_STATUS) != TRX_OFF)
{
ASSERT("Switch PLL_ON failed, because trx is not in TRX_OFF" == 0);
return;
}
/* Clear all pending trx interrupts */
pal_trx_reg_read(RG_IRQ_STATUS);
/* Get current IRQ mask */
uint8_t trx_irq_mask = pal_trx_reg_read(RG_IRQ_MASK);
/* Enable transceiver's PLL lock interrupt */
pal_trx_reg_write(RG_IRQ_MASK, TRX_IRQ_0_PLL_LOCK);
ENTER_TRX_REGION(); // Disable trx interrupt handling
/* Switch PLL on */
pal_trx_reg_write(RG_TRX_STATE, CMD_PLL_ON);
pal_get_current_time(&start_time);
/* Wait for transceiver interrupt: check for IRQ line */
while (PAL_TRX_IRQ_HIGH() == false)
{
/* Handle errata "potential long PLL settling duration". */
pal_get_current_time(¤t_time);
if (pal_sub_time_us(current_time, start_time) > PLL_LOCK_DURATION_MAX_US)
{
uint8_t reg_value;
reg_value = pal_trx_reg_read(RG_PLL_CF);
if (reg_value & 0x01)
{
reg_value &= 0xFE;
}
else
{
reg_value |= 0x01;
}
pal_trx_reg_write(RG_PLL_CF, reg_value);
pal_get_current_time(&start_time);
}
/* Wait until trx line has been raised. */
}
/* Clear PLL lock interrupt at trx */
pal_trx_reg_read(RG_IRQ_STATUS);
/* Clear MCU's interrupt flag */
pal_trx_irq_flag_clr();
LEAVE_TRX_REGION(); // Enable trx interrupt handling again
/* Restore transceiver's interrupt mask. */
pal_trx_reg_write(RG_IRQ_MASK, trx_irq_mask);
}
开发者ID:johncobb,项目名称:xmega_macless_rtb_demo,代码行数:59,代码来源:tal.c
示例3: tal_generate_rand_seed
/**
* @brief Generates a 16-bit random number used as initial seed for srand()
*
* This function generates a 16-bit random number by means of using the
* Random Number Generator from the transceiver.
* The Random Number Generator generates 2-bit random values. These 2-bit
* random values are concatenated to the required 16-bit random seed.
*
* The generated random 16-bit number is feed into function srand()
* as initial seed.
*
* The transceiver state is initally set to RX_ON.
* After the completion of the random seed generation, the
* trancseiver is set to TRX_OFF.
*
* As a prerequisite the preamble detector must not be disabled.
*
* Also in case the function is called from a different state than TRX_OFF,
* additional trx state handling is required, such as reading the original
* value and restoring this state after finishing the sequence.
* Since in our case the function is called from TRX_OFF, this is not required
* here.
*/
void tal_generate_rand_seed(void)
{
uint16_t seed = 0;
uint8_t cur_random_val = 0;
/* RPC could influence the randomness; therefore disable it here. */
uint8_t previous_RPC_value = pal_trx_reg_read(RG_TRX_RPC);
pal_trx_reg_write(RG_TRX_RPC, 0xC1);
/*
* We need to disable TRX IRQs while generating random values in RX_ON,
* we do not want to receive frames at this point of time at all.
*/
ENTER_TRX_REGION();
/* Ensure that PLL has locked and receive mode is reached. */
tal_trx_status_t trx_state;
do
{
trx_state = set_trx_state(CMD_RX_ON);
}
while (trx_state != RX_ON);
/* Ensure that register bit RX_PDT_DIS is set to 0. */
pal_trx_bit_write(SR_RX_PDT_DIS, RX_ENABLE);
/*
* The 16-bit random value is generated from various 2-bit random values.
*/
for (uint8_t i = 0; i < 8; i++)
{
/* Now we can safely read the 2-bit random number. */
cur_random_val = pal_trx_bit_read(SR_RND_VALUE);
seed = seed << 2;
seed |= cur_random_val;
PAL_WAIT_1_US(); // wait that the random value gets updated
}
set_trx_state(CMD_FORCE_TRX_OFF);
/*
* Now we need to clear potential pending TRX IRQs and
* enable the TRX IRQs again.
*/
pal_trx_reg_read(RG_IRQ_STATUS);
pal_trx_irq_flag_clr();
LEAVE_TRX_REGION();
/* Set the seed for the random number generator. */
srand(seed);
/* Restore RPC settings. */
pal_trx_reg_write(RG_TRX_RPC, previous_RPC_value);
}
开发者ID:subpos,项目名称:atmel_ranging_toolbox_zigbit,代码行数:77,代码来源:tal_init.c
示例4: trx_init
static trx_retval_t trx_init(void)
{
tal_trx_status_t trx_status;
uint8_t poll_counter = 0;
/* Ensure control lines have correct levels. */
RST_HIGH();
SLP_TR_LOW();
/* Wait typical time. */
DELAY_US(P_ON_TO_CLKM_AVAILABLE_TYP_US);
/* Apply reset pulse */
RST_LOW();
DELAY_US(RST_PULSE_WIDTH_US);
RST_HIGH();
/* Verify that TRX_OFF can be written */
do {
/* Wait not more than max. value of TR1. */
if (poll_counter == P_ON_TO_CLKM_ATTEMPTS) {
return TRX_FAILURE;
}
/* Wait a short time interval. */
DELAY_US(TRX_POLL_WAIT_TIME_US);
poll_counter++;
/* Check if AT86RF231 is connected; omit manufacturer id check */
} while ((pal_trx_reg_read(RG_VERSION_NUM) != AT86RF231_VERSION_NUM) ||
(pal_trx_reg_read(RG_PART_NUM) != AT86RF231_PART_NUM));
/* Set trx to off mode */
pal_trx_reg_write(RG_TRX_STATE, CMD_TRX_OFF);
/* Verify that the trx has reached TRX_OFF. */
poll_counter = 0;
do {
/* Wait a short time interval. */
DELAY_US(TRX_POLL_WAIT_TIME_US);
trx_status = (tal_trx_status_t) pal_trx_bit_read(SR_TRX_STATUS);
/* Wait not more than max attempts for state transition */
if (poll_counter == SLEEP_TO_TRX_OFF_ATTEMPTS) {
return TRX_FAILURE;
}
poll_counter++;
} while (trx_status != TRX_OFF);
tal_trx_status = TRX_OFF;
return TRX_SUCCESS;
}
开发者ID:ThucVD2704,项目名称:femto-usb-blink-example,代码行数:52,代码来源:at86rf231.c
示例5: trx_init
/**
* @brief Initializes the transceiver
*
* This function is called to initialize the transceiver.
*
* @return MAC_SUCCESS if the transceiver state is changed to TRX_OFF and the
* current device part number and version number are correct;
* FAILURE otherwise
*/
static retval_t trx_init(void)
{
tal_trx_status_t trx_status;
uint8_t poll_counter = 0;
PAL_RST_HIGH();
PAL_SLP_TR_LOW();
/* Wait typical time of timer TR1. */
pal_timer_delay(P_ON_TO_CLKM_AVAILABLE_TYP_US);
/* Apply reset pulse */
PAL_RST_LOW();
pal_timer_delay(RST_PULSE_WIDTH_US);
PAL_RST_HIGH();
#if !(defined FPGA_EMULATION)
do
{
/* Wait not more than max. value of TR1. */
if (poll_counter == P_ON_TO_CLKM_ATTEMPTS)
{
return FAILURE;
}
/* Wait a short time interval. */
pal_timer_delay(TRX_POLL_WAIT_TIME_US);
poll_counter++;
/* Check if AT86RF233 is connected; omit manufacturer id check */
}
while (pal_trx_reg_read(RG_PART_NUM) != PART_NUM_AT86RF233);
#endif /* !defined FPGA_EMULATION */
/* Verify that TRX_OFF can be written */
pal_trx_reg_write(RG_TRX_STATE, CMD_TRX_OFF);
/* Verify that the trx has reached TRX_OFF. */
poll_counter = 0;
do
{
/* Wait a short time interval. */
pal_timer_delay(TRX_POLL_WAIT_TIME_US);
trx_status = (tal_trx_status_t)pal_trx_bit_read(SR_TRX_STATUS);
/* Wait not more than max. value of TR15. */
if (poll_counter == P_ON_TO_TRX_OFF_ATTEMPTS)
{
#if (DEBUG > 0)
pal_alert();
#endif
return FAILURE;
}
poll_counter++;
}
while (trx_status != TRX_OFF);
tal_trx_status = TRX_OFF;
return MAC_SUCCESS;
}
开发者ID:subpos,项目名称:atmel_ranging_toolbox_zigbit,代码行数:69,代码来源:tal_init.c
示例6: trx_ed_irq_handler_cb
/**
* @brief ED Scan Interrupt
*
* This function handles an ED done interrupt from the transceiver.
*/
static void trx_ed_irq_handler_cb(void)
{
uint8_t ed_value;
/* Read the ED Value. */
ed_value = pal_trx_reg_read(RG_PHY_ED_LEVEL);
/*
* Update the peak ED value received, if greater than the previously
* read ED value.
*/
if (ed_value > max_ed_level)
{
max_ed_level = ed_value;
}
/* Start next ED sampling */
sampler_counter--;
if (sampler_counter > 0)
{
// write dummy value to start measurement
pal_trx_reg_write(RG_PHY_ED_LEVEL, 0xFF);
}
else
{
tal_state = TAL_ED_DONE;
}
}
开发者ID:nandojve,项目名称:embedded,代码行数:33,代码来源:tal_ed.c
示例7: rtb_tstamp_irq_init
/**
* Function initializing the Timestamp IRQ to get synchronized
* as required for ranging.
*/
void rtb_tstamp_irq_init(void)
{
pal_trx_irq_dis();
pal_trx_reg_read(RG_IRQ_STATUS);
pal_trx_bit_write(SR_ARET_TX_TS_EN, 0x01);
pal_trx_bit_write(SR_IRQ_2_EXT_EN, 0x01); //Enable Timestamping over DIG2 on the at86rf233
PORTC.INTFLAGS = PORT_INT1IF_bm;
TCC1_CTRLB &= ~TC1_CCAEN_bm;
TIMER_SRC_DURING_TRX_AWAKE();
PORTC.INT1MASK = PIN1_bm; //DIG2 over PortC 1
/* Reset register, until time out is triggered is 65535 ms */
TCC1_CNT = 0;
PORTC.PIN1CTRL = PORT_ISC1_bm;
TCC1_INTFLAGS = TC1_CCAIF_bm;
TCC1_INTCTRLB = TC_CCAINTLVL_HI_gc;
TCC1_CTRLB |= TC1_CCAEN_bm;
}
开发者ID:subpos,项目名称:atmel_ranging_toolbox_zigbit,代码行数:31,代码来源:rtb_hw_233r_xmega.c
示例8: trx_irq_handler_cb
/**
* @brief Transceiver interrupt handler
*
* This function handles the transceiver generated interrupts.
*/
void trx_irq_handler_cb(void)
{
trx_irq_reason_t trx_irq_cause;
trx_irq_cause = (trx_irq_reason_t)pal_trx_reg_read(RG_IRQ_STATUS);
if (trx_irq_cause & TRX_IRQ_TRX_END)
{
/*
* TRX_END reason depends on if the trx is currently used for
* transmission or reception.
*/
if ((tal_state == TAL_TX_AUTO) || (tal_state == TAL_TX_BASIC))
{
/* Switch to transceiver's default state: switch receiver on. */
set_trx_state(CMD_RX_AACK_ON);
handle_tx_end_irq(); // see tal_tx.c
}
else /* Other tal_state than TAL_TX_... */
{
/* Handle rx done interrupt. */
handle_received_frame_irq(); // see tal_rx.c
}
}
}/* trx_irq_handler_cb() */
开发者ID:mknapik,项目名称:avr-MAC,代码行数:32,代码来源:tiny_tal_irq_handler.c
示例9: switch_pll_on
/**
* @brief Switches the PLL on
*/
static void switch_pll_on(void)
{
trx_irq_reason_t irq_status;
uint32_t start_time, now;
/* Check if trx is in TRX_OFF; only from PLL_ON the following procedure is applicable */
if (pal_trx_bit_read(SR_TRX_STATUS) != TRX_OFF)
{
ASSERT("Switch PLL_ON failed, because trx is not in TRX_OFF" == 0);
return;
}
/* use the IRQ status register checking for the actual PLL status */
pal_trx_irq_dis();
pal_trx_reg_write(RG_IRQ_MASK, TRX_IRQ_PLL_LOCK); /* allow PLL lock IRQ only*/
pal_trx_reg_read(RG_IRQ_STATUS); /* clear PLL lock bit */
/* Switch PLL on */
pal_trx_reg_write(RG_TRX_STATE, CMD_PLL_ON);
/* Check if PLL has been locked. */
pal_get_current_time(&start_time);
while (1)
{
irq_status = (trx_irq_reason_t)pal_trx_reg_read(RG_IRQ_STATUS);
if (irq_status & TRX_IRQ_PLL_LOCK)
{
break; // PLL is locked now
}
/* Check if polling needs too much time. */
pal_get_current_time(&now);
if (pal_sub_time_us(now, start_time) > (10 * PLL_LOCK_TIME_US))
{
/* leave poll loop and throw assertion */
#if (DEBUG > 0)
ASSERT("PLL switch failed" == 0);
#endif
break;
}
}
pal_trx_irq_flag_clr();
pal_trx_reg_write(RG_IRQ_MASK, TRX_IRQ_TRX_END); /* enable TRX_END interrupt */
pal_trx_irq_en();
}
开发者ID:mknapik,项目名称:avr-MAC,代码行数:49,代码来源:tiny_tal.c
示例10: switch_rf_to_txprep
static void switch_rf_to_txprep(trx_id_t trx_id)
{
uint16_t reg_offset = RF_BASE_ADDR_OFFSET * trx_id;
pal_trx_reg_write(RF215_RF, reg_offset + RG_RF09_CMD, RF_TXPREP);
/* Wait for TXPREP */
rf_cmd_state_t state;
do {
state = (rf_cmd_state_t)pal_trx_reg_read(RF215_RF,
reg_offset +
RG_RF09_STATE);
} while (state != RF_TXPREP);
/* Clear TRXRDY interrupt */
uint8_t irqs = pal_trx_reg_read(RF215_RF, trx_id + RG_RF09_IRQS);
tal_rf_irqs[trx_id] |= irqs & ((uint8_t)(~((uint32_t)RF_IRQ_TRXRDY))); /*
* avoid
* Pa091 */
pal_trx_irq_flag_clr(RF215_RF);
}
开发者ID:thegeek82000,项目名称:asf,代码行数:18,代码来源:tal_irq_handler.c
示例11: pal_trx_bit_read
/**
* @brief Subregister read
*
* @param addr Offset of the register
* @param mask Bit mask of the subregister
* @param pos Bit position of the subregister
*
* @return value of the read bit(s)
*/
uint8_t pal_trx_bit_read(uint8_t addr, uint8_t mask, uint8_t pos)
{
uint8_t ret;
ret = pal_trx_reg_read(addr);
ret &= mask;
ret >>= pos;
return ret;
}
开发者ID:nandojve,项目名称:embedded,代码行数:19,代码来源:pal_trx_access.c
示例12: tal_ed_start
/*
* \brief Starts ED Scan
*
* This function starts an ED Scan for the scan duration specified by the
* MAC layer.
*
* \param scan_duration Specifies the ED scan duration in symbols
*
* \return MAC_SUCCESS - ED scan duration timer started successfully
* TAL_BUSY - TAL is busy servicing the previous request from MAC
* TAL_TRX_ASLEEP - Transceiver is currently sleeping
* FAILURE otherwise
*/
retval_t tal_ed_start(uint8_t scan_duration)
{
/*
* Check if the TAL is in idle state. Only in idle state it can
* accept and ED request from the MAC.
*/
if (TAL_IDLE != tal_state)
{
if (tal_trx_status == TRX_SLEEP)
{
return TAL_TRX_ASLEEP;
}
else
{
Assert("TAL is TAL_BUSY" == 0);
return TAL_BUSY;
}
}
/*
* Disable the transceiver interrupts to prevent frame reception
* while performing ED scan.
*/
pal_trx_irq_dis(); /* Disable transceiver main interrupt. */
set_trx_state(CMD_FORCE_PLL_ON);
pal_trx_reg_read(RG_IRQ_STATUS); /* Clear existing interrupts */
pal_trx_bit_write(SR_RX_PDT_DIS, RX_DISABLE);
pal_trx_irq_init((FUNC_PTR)trx_ed_irq_handler_cb);
pal_trx_bit_write(SR_IRQ_MASK, TRX_IRQ_CCA_ED_READY); /* enable interrupt */
pal_trx_irq_en(); /* Enable main transceiver interrupt. */
/* Make sure that receiver is switched on. */
if (set_trx_state(CMD_RX_ON) != RX_ON)
{
/* Restore previous configuration */
pal_trx_bit_write(SR_RX_PDT_DIS, RX_ENABLE);
pal_trx_irq_init((FUNC_PTR)trx_irq_handler_cb);
pal_trx_reg_write(RG_IRQ_MASK, TRX_IRQ_DEFAULT); /* enable TRX_END interrupt */
pal_trx_irq_en(); /* Enable main transceiver interrupt. */
return FAILURE;
}
// write dummy value to start measurement
pal_trx_reg_write(RG_PHY_ED_LEVEL, 0xFF);
/* Perform ED in TAL_ED_RUNNING state. */
tal_state = TAL_ED_RUNNING;
max_ed_level = 0; // reset max value
sampler_counter = CALCULATE_SYMBOL_TIME_SCAN_DURATION(scan_duration) / ED_SAMPLE_DURATION_SYM;
return MAC_SUCCESS;
}
开发者ID:bswe,项目名称:6.1,代码行数:68,代码来源:tal_ed.c
示例13: trx_irq_handler_cb
/**
* @brief Transceiver interrupt handler
*
* This function handles the transceiver generated interrupts.
*/
void trx_irq_handler_cb(void)
{
trx_irq_reason_t trx_irq_cause;
trx_irq_cause = (trx_irq_reason_t)pal_trx_reg_read(RG_IRQ_STATUS);
#if (defined BEACON_SUPPORT) || (defined ENABLE_TSTAMP)
#if (DISABLE_TSTAMP_IRQ == 1)
if (trx_irq_cause & TRX_IRQ_2_RX_START)
{
/*
* Get timestamp.
*
* In case Antenna diversity is used or the utilization of
* the Timestamp IRQ is disabled, the timestamp needs to be read now
* the "old-fashioned" way.
*
* The timestamping is generally only done for
* beaconing networks or if timestamping is explicitly enabled.
*/
pal_trx_read_timestamp(&tal_timestamp);
}
#endif /* #if (DISABLE_TSTAMP_IRQ == 1) */
#endif /* #if (defined BEACON_SUPPORT) || (defined ENABLE_TSTAMP) */
if (trx_irq_cause & TRX_IRQ_3_TRX_END)
{
/*
* TRX_END reason depends on if the trx is currently used for
* transmission or reception.
*/
#if ((MAC_START_REQUEST_CONFIRM == 1) && (defined BEACON_SUPPORT))
if ((tal_state == TAL_TX_AUTO) || tal_beacon_transmission)
#else
if (tal_state == TAL_TX_AUTO)
#endif
{
/* Get the result and push it to the queue. */
if (trx_irq_cause & TRX_IRQ_6_TRX_UR)
{
handle_tx_end_irq(true); // see tal_tx.c
}
else
{
handle_tx_end_irq(false); // see tal_tx.c
}
}
else /* Other tal_state than TAL_TX_... */
{
/* Handle rx interrupt. */
handle_received_frame_irq(); // see tal_rx.c
}
}
}/* trx_irq_handler_cb() */
开发者ID:nandojve,项目名称:embedded,代码行数:59,代码来源:tal_irq_handler.c
示例14: run_at86rfx_reg_access_test
/**
* \brief Test the read and write of register on AT86RFx module
*
* This function will test the read and write functionalities of register
* It will first write a known value (state) to register and reads the
* register to confirm the same value.
*
* \param test Current test case.
*/
static void run_at86rfx_reg_access_test(const struct test_case *test)
{
bool status;
trx_cmd_t value;
pal_trx_reg_write(RG_TRX_STATE, CMD_RX_ON);
value = (trx_cmd_t) pal_trx_reg_read(RG_TRX_STATE);
status = (CMD_RX_ON == value) ? true : false;
test_assert_true(test, status == true,
"Error Read/write AT86RFx register access failed");
}
开发者ID:kerichsen,项目名称:asf,代码行数:21,代码来源:unit_tests.c
示例15: pal_trx_bit_write
/**
* @brief Subregister write
*
* @param[in] reg_addr Offset of the register
* @param[in] mask Bit mask of the subregister
* @param[in] pos Bit position of the subregister
* @param[out] new_value Data, which is muxed into the register
*/
void pal_trx_bit_write(uint8_t reg_addr, uint8_t mask, uint8_t pos, uint8_t new_value)
{
uint8_t current_reg_value;
current_reg_value = pal_trx_reg_read(reg_addr);
current_reg_value &= (uint8_t)~(uint32_t)mask; // Implicit casting required to avoid IAR Pa091.
new_value <<= pos;
new_value &= mask;
new_value |= current_reg_value;
pal_trx_reg_write(reg_addr, new_value);
}
开发者ID:nandojve,项目名称:embedded,代码行数:20,代码来源:pal_trx_access.c
示例16: trx_ed_irq_handler_cb
/**
* \brief ED Scan Interrupt
* This function handles an ED done interrupt from the transceiver.
*
*/
static void trx_ed_irq_handler_cb(void)
{
uint8_t ed_value;
trx_irq_reason_t trx_irq_cause;
trx_irq_cause = (trx_irq_reason_t)pal_trx_reg_read(RG_IRQ_STATUS);
if (trx_irq_cause & TRX_IRQ_CCA_ED_READY)
{
/* Read the ED Value. */
ed_value = pal_trx_reg_read(RG_PHY_ED_LEVEL);
/*
* Update the peak ED value received, if greater than the previously
* read ED value.
*/
if (ed_value > max_ed_level)
{
max_ed_level = ed_value;
}
sampler_counter--;
if (sampler_counter > 0)
{
// write dummy value to start measurement
pal_trx_reg_write(RG_PHY_ED_LEVEL, 0xFF);
}
else
{
tal_state = TAL_ED_DONE;
}
}
#if (_DEBUG_ > 0)
if (trx_irq_cause & (~(TRX_IRQ_PLL_LOCK | TRX_IRQ_CCA_ED_READY)))
{
Assert("Unexpected interrupt" == 0);
}
#endif
}
开发者ID:bswe,项目名称:6.1,代码行数:45,代码来源:tal_ed.c
示例17: rtb_tstamp_irq_exit
/**
* Function disabling the Timestamp IRQ as utilized for ranging.
*/
void rtb_tstamp_irq_exit(void)
{
TCC1_INTCTRLB = TC_CCAINTLVL_OFF_gc;
TCC1_CTRLB &= ~TC1_CCAEN_bm;
/* Clear status register. */
pal_trx_reg_read(RG_IRQ_STATUS);
/* Enable main Trx IRQ. */
pal_trx_irq_en();
/* Re-enable all interrupts. */
pal_global_irq_enable();
}
开发者ID:subpos,项目名称:atmel_ranging_toolbox_zigbit,代码行数:18,代码来源:rtb_hw_233r_xmega.c
示例18: trx_init
/**
* @brief Initializes the transceiver
*
* This function is called to initialize the transceiver.
*
* @return MAC_SUCCESS if the transceiver state is changed to TRX_OFF and the
* current device part number and version number are correct;
* FAILURE otherwise
*/
static retval_t trx_init(void)
{
tal_trx_status_t trx_status;
uint8_t poll_counter = 0;
/* Ensure control lines have correct levels. */
PAL_RST_HIGH();
PAL_SLP_TR_LOW();
pal_timer_delay(P_ON_TO_CLKM_AVAILABLE_TYP_US);
/* Apply reset pulse */
PAL_RST_LOW();
pal_timer_delay(RST_PULSE_WIDTH_US);
PAL_RST_HIGH();
/* Verify that the trx has reached TRX_OFF. */
poll_counter = 0;
do
{
/* Wait a short time interval. */
pal_timer_delay(TRX_POLL_WAIT_TIME_US);
trx_status = (tal_trx_status_t)pal_trx_bit_read(SR_TRX_STATUS);
/* Wait not more than max. value of TR2. */
if (poll_counter == RESET_TO_TRX_OFF_ATTEMPTS)
{
#if (DEBUG > 0)
pal_alert();
#endif
return FAILURE;
}
poll_counter++;
}
while (trx_status != TRX_OFF);
tal_trx_status = TRX_OFF;
#if !defined(FPGA_EMULATION)
/* Check if actually running on an ATmegaRFR2 device. */
if (ATMEGARFR2_PART_NUM != pal_trx_reg_read(RG_PART_NUM))
{
return FAILURE;
}
#endif
return MAC_SUCCESS;
}
开发者ID:nandojve,项目名称:embedded,代码行数:57,代码来源:tal_init.c
示例19: trx_irq_handler_cb
void trx_irq_handler_cb(void)
{
trx_irq_reason_t trx_irq_cause;
trx_irq_cause = (trx_irq_reason_t) pal_trx_reg_read(RG_IRQ_STATUS);
if (trx_irq_cause & TRX_IRQ_TRX_END) {
/*
* TRX_END reason depends on if the trx is currently used for
* transmission or reception.
*/
if (tal_state == TAL_TX_AUTO) {
handle_tx_end_irq();
} else { /* Other tal_state than TAL_TX_... */
/* Handle rx interrupt. */
handle_received_frame_irq();
}
}
}
开发者ID:AndreyMostovov,项目名称:asf,代码行数:19,代码来源:at86rf212.c
示例20: generate_rand_seed
static void generate_rand_seed(void)
{
uint16_t seed = 0;
uint8_t cur_random_val = 0;
set_trx_state(CMD_RX_ON);
/*
* We need to disable TRX IRQs while generating random values in RX_ON,
* we do not want to receive frames at this point of time at all.
*/
ENTER_TRX_REGION();
/*
* The 16-bit random value is generated from various 2-bit random values.
*/
for (uint8_t i = 0; i < 8; i++) {
/* Now we can safely read the 2-bit random number. */
cur_random_val = pal_trx_bit_read(SR_RND_VALUE);
seed = seed << 2;
seed |= cur_random_val;
}
set_trx_state(CMD_FORCE_TRX_OFF);
/*
* Now we need to clear potential pending TRX IRQs and
* enable the TRX IRQs again.
*/
pal_trx_reg_read(RG_IRQ_STATUS);
CLEAR_TRX_IRQ();
LEAVE_TRX_REGION();
/* Set the seed for the random number generator. */
srand(seed);
}
开发者ID:AndreyMostovov,项目名称:asf,代码行数:36,代码来源:at86rf212.c
注:本文中的pal_trx_reg_read函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论