原创 读取CC2520寄存器实验

2009-2-19 13:06 2131 2 2 分类: 通信

https://static.assets-stash.eet-china.com/album/old-resources/2009/2/19/ca664ce4-1512-46fc-96ef-e41a94487af8.rar工程下载


/***********************************************************************************


  Filename:  reg_read.c


  Description: This application reads the register values of CC2520. The values
      are output on the serial port when Button 1 is pushed.


      Configure the PC HyperTerminal for baudrate 38400 bps, 8 data bits
      no parity, and 1 stop bit.


***********************************************************************************/


/***********************************************************************************
 * INCLUDES
 */
#include <hal_lcd.h>
#include <hal_led.h>
#include <hal_board.h>
#include <hal_uart.h>
#include <hal_rf.h>
#include <hal_assert.h>
#include "util_lcd.h"
#include "util_uart.h"
#include "hal_cc2520.h"
#include "OLED.h"



/***********************************************************************************
 * CONSTANTS
 */


// Define SREG or FREG for output to serial port
#define FREG


#define KVP(v) { v, #v }


typedef struct {
    const uint8 iRegNum;
    const char *szRegName;
} regKvp_t;


 


/***********************************************************************************
 * LOCAL VARIABLES
 */


#ifdef SREG
// CC2520 SREG names
static regKvp_t regLookup[]=
{
    KVP(CC2520_CHIPID),
    KVP(CC2520_VERSION),
    KVP(CC2520_EXTCLOCK),
    KVP(CC2520_MDMCTRL0),
    KVP(CC2520_MDMCTRL1),
    KVP(CC2520_FREQEST),
    KVP(CC2520_RXCTRL),
    KVP(CC2520_FSCTRL),
    KVP(CC2520_FSCAL0),
    KVP(CC2520_FSCAL1),
    KVP(CC2520_FSCAL2),
    KVP(CC2520_FSCAL3),
    KVP(CC2520_AGCCTRL0),
    KVP(CC2520_AGCCTRL1),
    KVP(CC2520_AGCCTRL2),
    KVP(CC2520_AGCCTRL3),
    KVP(CC2520_ADCTEST0),
    KVP(CC2520_ADCTEST1),
    KVP(CC2520_ADCTEST2),
    KVP(CC2520_MDMTEST0),
    KVP(CC2520_MDMTEST1),
    KVP(CC2520_DACTEST0),
    KVP(CC2520_DACTEST1),
    KVP(CC2520_ATEST),
    KVP(CC2520_DACTEST2),
    KVP(CC2520_PTEST0),
    KVP(CC2520_PTEST1),
    KVP(CC2520_DPUBIST),
    KVP(CC2520_ACTBIST),
    KVP(CC2520_RAMBIST),
    KVP(0xFF),
};
#elif defined FREG
// CC2520 FREG names
static regKvp_t regLookup[]=
{
    KVP(CC2520_FRMFILT0),
    KVP(CC2520_FRMFILT1),
    KVP(CC2520_SRCMATCH),
    KVP(CC2520_SRCSHORTEN0),
    KVP(CC2520_SRCSHORTEN1),
    KVP(CC2520_SRCSHORTEN2),
    KVP(CC2520_SRCEXTEN0),
    KVP(CC2520_SRCEXTEN1),
    KVP(CC2520_SRCEXTEN2),
    KVP(CC2520_FRMCTRL0),
    KVP(CC2520_FRMCTRL1),
    KVP(CC2520_RXENABLE0),
    KVP(CC2520_RXENABLE1),
    KVP(CC2520_EXCFLAG0),
    KVP(CC2520_EXCFLAG1),
    KVP(CC2520_EXCFLAG2),
    KVP(CC2520_EXCMASKA0),
    KVP(CC2520_EXCMASKA1),
    KVP(CC2520_EXCMASKA2),
    KVP(CC2520_EXCMASKB0),
    KVP(CC2520_EXCMASKB1),
    KVP(CC2520_EXCMASKB2),
    KVP(CC2520_EXCBINDX0),
    KVP(CC2520_EXCBINDX1),
    KVP(CC2520_EXCBINDY0),
    KVP(CC2520_EXCBINDY1),
    KVP(CC2520_GPIOCTRL0),
    KVP(CC2520_GPIOCTRL1),
    KVP(CC2520_GPIOCTRL2),
    KVP(CC2520_GPIOCTRL3),
    KVP(CC2520_GPIOCTRL4),
    KVP(CC2520_GPIOCTRL5),
    KVP(CC2520_GPIOPOLARITY),
    KVP(CC2520_GPIOCTRL),
    KVP(CC2520_DPUCON),
    KVP(CC2520_DPUSTAT),
    KVP(CC2520_FREQCTRL),
    KVP(CC2520_FREQTUNE),
    KVP(CC2520_TXPOWER),
    KVP(CC2520_TXCTRL),
    KVP(CC2520_FSMSTAT0),
    KVP(CC2520_FSMSTAT1),
    KVP(CC2520_FIFOPCTRL),
    KVP(CC2520_FSMCTRL),
    KVP(CC2520_CCACTRL0),
    KVP(CC2520_CCACTRL1),
    KVP(CC2520_RSSI),
    KVP(CC2520_RSSISTAT),
    KVP(CC2520_TXFIFO_BUF),
    KVP(CC2520_RXFIRST),
    KVP(CC2520_RXFIFOCNT),
    KVP(CC2520_TXFIFOCNT),
    KVP(0xFF),
};
#endif



/***********************************************************************************
 * LOCAL FUNCTIONS
 */
static void appPrintMenu(void);


/******************************************************************************
 * @fn          appPrintMenu
 *
 * @brief       Prints menu on UART
 *
 * @param       none
 *
 * @return      none
 */
static void appPrintMenu(void)
{
    printStr("\033[H\033[2J");                  // Cursor home, erase screen (VT100)
    printStr("------------------------------\n");
    printStr("CC2520 Application Example\n");
    printStr("Read Registers\n");
    printStr("------------------------------\n\n");
}



/*********************************************************************
 * @fn      appPrintRfRegs
 *
 * @brief   Print radio registers
 *
 * @param   none
 *
 * @return  none
 */
static void appPrintRfRegs(void)
{
    regKvp_t *p;


    p= regLookup;


    while ( p->iRegNum != 0xFF) {


        uint16 iRegVal;
        uint8 j;


        // Read radio registers
        #ifdef SREG
        iRegVal = CC2520_MEMRD8(p->iRegNum);
        #elif defined FREG
        iRegVal = CC2520_REGRD8(p->iRegNum);
        #endif


        // Print name and contents
        printKvpHex((char*)p->szRegName,iRegVal);


        p++;
    }
}



/***********************************************************************************
 * @fn          main
 *
 * @brief       This is the main entry of the "Read Regs" application
 *
 * @param       none
 *
 * @return      none
 */
void main (void)
{
  // Initialise board peripherals
  halBoardInit();


  // Initialise hal_rf
  if(halRfInit()==FAILED) {
    HAL_ASSERT(FALSE);
  }


  // Indicate that device is powered
  halLedSet(1);


  // Initialise UART
  halUartInit(HAL_UART_BAUDRATE_38400, 0);


  // Print Logo and splash screen on LCD
  print(32,0,"Reg Read",1);
  appPrintMenu();


  // Puts MCU in endless loop
  while(TRUE) {
    // Wait for user to press S1 to enter menu
    while (!HAL_BUTTON_1_PUSHED());
    halMcuWaitMs(350);


    // Print radio registers
    appPrintRfRegs();
  }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /1 下一条