这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » PTR8000,LPC2210 帮我看看我的PTR8000—LPC2210程序!

共2条 1/1 1 跳转至

PTR8000,LPC2210 帮我看看我的PTR8000—LPC2210程序!!!

院士
2006-09-17 18:14:16     打赏
PTR8000,LPC2210 帮我看看我的PTR8000—LPC2210程序!!!



关键词: PTR8000     LPC2210     帮我     看看     我的         

院士
2006-12-22 22:43:00     打赏
2楼
问 各位大虾:帮我看看我的程序,我用的是LPC2210 ,读配置发送到串口,但显示的10个全是00 ,不知道哪里有问题,我也参考了hotmail 的笔记
帮我看看我的程序!

/************************905.h************************************************/
#include  "config.h"

#define WC          0x00            // Write configuration register command
#define RC          0x10             // Read  configuration register command
#define WTP        0x20             // Write TX Payload  command
#define RTP         0x21            // Read  TX Payload  command
#define WTA        0x22            // Write TX Address  command
#define RTA        0x23            // Read  TX Address  command
#define RRP        0x24    
/****************全部选用p0口 **********************/
#define  nRF905_MOSI    0x00000040   //p0.6 mosi  spi_input
#define  nRF905_CSN     0x00000100   //p0.8 cs  spi_select
#define  nRF905_SCK     0x00000010   //p0.4 clk  spi_ckock
#define  nRF905_MISO    0x00000020   //p0.5 miso  spi_input

#define  nRF905_DR      0x00001000   //p0.12 dr spi_data_ready
#define  nRF905_AM     0x00002000   //p0.13 am  spi_addr_match
#define  nRF905_CD      0x00000400   //p0.10 cd  spi_Carrier Detect
#define  nRF905_uPCLK   0x00000800   //p0.11 cs  spiselect


#define  nRF905_PWR_UP  0x00040000  //p0.18 power  spiselect
#define  nRF905_TRX_CE  0x00080000  //p0.19 Enables chip for receive and transmit
#define  nRF905_TX_EN   0x00200000  //p0.21 TX_EN=”1”TX mode, TX_EN=”0”RX mode
#define  nRF905_VDD     0x00400000  //p0.22
#define  nRF905_CHANGE  0x02000000  //p0.25
#define  nRF905_VDD    (1<<22)  //3.3V
#define    SIZE  32  //这里不能有逗号
uint32 TxBuf[SIZE];//U0Tx,U1Rx
uint32 RxBuf[SIZE];//U0Rx,U1


/***************** spi0.h ******************/
#include  "905.h"
//#include  "uart0.h"
uint8 const RxBufConf[10]={0x01,0x0e,0x44,0x20,0x20,0xe7,0xe7,0xe7,0xe7,0xdf};
uint8 const RxBufConfAdd[]={0xe7,0xe7,0xe7,0xe7};
const unsigned char rfconfig[10]=
{
0x01,           //CH_NO[7:0]
0x0c,           //7,6:no use;5:自动重发=0;4:接收灵敏度降低=0;3,2:发射功率=10dBm;1:433MHz;CH_NO[8]=0
0x44,           //7:no use;6,5,4:发送地址宽度4;3:no use;2,1,0:接收地址宽度4
0x20,           //7,6 no use;5-0:接收数据宽度32
0x20,           //7,6 no use;5-0:发送数据宽度32
0xcc,           //接收地址字节0(设备ID)
0xcc,           //接收地址字节1(设备ID)
0xcc,           //接收地址字节2(设备ID)
0xcc,           //接收地址字节3(设备ID)
0x58            //7:CRC模式8位;6:CRC校验许可;5,4,3:011表示16MHz;2:UP_CLK_EN=0没有外部时钟;1,0:外部时钟频率
};
void   MSpi_Init(void)
{     
     S0PCCR=0x52;
     S0PCR=0x30;//CPOL=1 SCK低有效,MSTR=1主模式,LSBF=0 SPI数据传输高位在前,IE=1硬件中断使能,但软件中断有效。
}  
/************** SPI读写一体化**********/
uint8   nrf905_SpiRW(uint8 data)
{
    S0PINT=0x01;   //CLEAR SPI INTERRIPT VIC使能后有效
    S0PDR=data;
    while(0==(S0PSR&0x80));//等待SPIF值为即等待数据发送完?
    return S0PDR;
}
/*********************** DelayNS() *****************************************/
void  DelayNS(uint32  dly)
{  uint32  i;
   for(; dly>0; dly--)
      for(i=0; i<5000; i++);
}
/***********************4种配置模式 *****************************************/

void nrf905_Off(void)
{
  IO0CLR|= nRF905_PWR_UP;
}
void nrf905_StandBy(void)
{
    IO0SET |= nRF905_PWR_UP;      //Standby和SPI编程
    IO0CLR |= nRF905_TRX_CE;
    IO0CLR |= nRF905_TX_EN;
}
void nrf905_TxOn(void)
{
    IO0SET |= nRF905_PWR_UP;      //ShockBurst  TX
    IO0SET |= nRF905_TRX_CE;
    IO0SET |= nRF905_TX_EN;
}
void nrf905_RxOn(void)
{
    IO0SET |= nRF905_PWR_UP;      //ShockBurst  TX
    IO0SET |= nRF905_TRX_CE;
    IO0CLR |= nRF905_TX_EN;
}
/***********************Ptr8000配置 *****************************************/

void   Config905(void)
{    
  uint8 i;
  IO0SET |= nRF905_PWR_UP;      //Standby和SPI编程
  IO0CLR |= nRF905_TRX_CE;
  IO0CLR |= nRF905_TX_EN;//待机配置
  IO0CLR=nRF905_CSN ;
  nrf905_SpiRW(WC);                  // Write config command
  for(i=0;i<10;i++)
  {      
  nrf905_SpiRW(RxBufConf[i]);
  }              
  IO0SET=nRF905_CSN ;                 // Disable Spi ;
    
}
/*******************测试配置程序**********/
void nrf905_SpiTest(void)
{  uint16 i;
   
   IO0CLR |= nRF905_CSN;                  
   nrf905_SpiRW(RC);     //读配置
   for(i=0;i<10;i++)
     {
    RxBuf[i]=nrf905_SpiRW(0);
    UART0_SendByte(RxBuf[i]);//必须是字节方式发送!!!!!!
    while((U0LSR&0x20)==0);         
   }   
    IO0SET |= nRF905_CSN;
    /*DelayNS(10);UART0_SendStr(SEND_STRING); */
}
/***********************发送数据包子程序 *****************************************/

void TxPacket(void)//senddata
{   uint8  i;
    nrf905_TxOn();//nRF905_TRX_CE 不需要为1,first because IO1 useful
    IO0CLR=nRF905_CSN;
    nrf905_SpiRW(WTA);
    for(i=0;i<4;i++)
    {nrf905_SpiRW( RxBufConfAdd[i]);
    }
    IO0SET=nRF905_CSN;//disable spi
    DelayNS(10);
    IO0CLR=nRF905_CSN;    
    nrf905_SpiRW(WTP);
    for(i=0;i<SIZE;i++)
    {        
        nrf905_SpiRW(TxBuf[i]);// attention TxBuf[i]  should be initialize
    }
    IO0SET=nRF905_CSN;
    IO0SET=nRF905_TRX_CE;//启动发射
    DelayNS(10);
    IO0CLR=nRF905_TRX_CE;
    }
/*********************** 发送数据*****************************************/
void Transmitter(void)
{    uint8  i;
    for (i=0;i<32;i++)
    TxBuf[i]=i+i;
    TxPacket();
    while((IO0PIN&nRF905_DR)==0);
    DelayNS(10);
    nrf905_RxOn();
}
/*********************** 接收数据包子程序 *****************************************/
void RxPacket(void)
{   uint32  i;
    nrf905_RxOn();
    IO0CLR=nRF905_CSN;
    DelayNS(650);
    nrf905_SpiRW(RRP);
    for(i=0;i<32;i++)//ptr8000 receice autimation
        {
            RxBuf[i]=nrf905_SpiRW(0);
        }                
    IO0SET=nRF905_CSN;//disable spi
    while((nRF905_DR&0x100)==1)//modify access!
    {    IO0CLR=nRF905_TRX_CE;//disable spi待机接受
        IO0CLR=nRF905_CSN;
        for(i=0;i<32;i++)
        {    if(RxBuf[i]!=(i+i));
            return;
            UART0_SendByte(RxBuf[i]);
        }    
        IO0SET=nRF905_CSN;
    }
    DelayNS(100);
     while(1)    
   {   
      UART0_SendStr(SEND_STRING);//it's okay
      DelayNS(10);
    }       
  Transmitter();//重新发回!!!
}

/***********uart0.h*********************************************************
* 文件名:SENDSTR.C
* 功能:向串口发送数据。
* 说明:使用外部11.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz;
*      通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
****************************************************************************/
#include  "config.h"
#include  "905.h"


#define  UART_BPS    115200            /* 定义通讯波特率 */
/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Ini(void)
{  uint16 Fdiv;

   U0LCR = 0x83;                    // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U0DLM = Fdiv / 256;                            
   U0DLL = Fdiv % 256;                        
   U0LCR = 0x03;
}
                

/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data        要发送的数据
* 出口参数:无
****************************************************************************/
void  UART0_SendByte(uint8 data)
{
     U0THR = data;                    // 发送数据

   while( (U0LSR&0x40)==0 );        // 等待数据发送完毕
}
/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt        要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void  UART0_SendStr(uint8 const *str)
{  while(1)
   {  if( *str == '\0' ) break;
      UART0_SendByte(*str++);        // 发送数据
   }
}

uint8 const  SEND_STRING[] = "It's okay,Mr Hua.B!!\n";
/*********************用串口将接受的数据发送出去** *****************************************/
void  UART0_SendBuf(uint8  *str)
{  uint8 i;
    for(i=0;i<SIZE;i++)
   
      UART0_SendByte(RxBuf[i]);        // 发送数据 ateenation RxBuf[i]
   while((U0LSR&0x20)==0);
}
/*******************主程序main.c ***************************************************/
#include  "config.h"
#include  "uart0.h"
#include  "905.h"
#include  "spi0.h"
#define      BEEPCON  0x00000080;    /* P0.7引脚控制B1,低电平蜂鸣 */
int  main(void)
{  
   //uint8 i;
    PINSEL0 = 0x00005505;            // 设置I/O连接到UART0  spi0 其中spi 口状态未定。
    IO0DIR =0xfdffc3ff; //0xffff03ff;  //p0.10~p0.13 input
    
    
   IO0SET=nRF905_VDD;      //p0.22
   UART0_Ini();
   MSpi_Init();    
   DelayNS(100);
   Config905();     
   nrf905_SpiTest();
   /*nrf905_TxOn();//okay
   TxPacket(); //it's okay!
   DelayNS(50); //
   nrf905_RxOn();// okay delay 1m!
   RxPacket();//okay
   return(0);
  
}
1: 水潭里有实战程序~~~ 2: 望hotpower再给予一点帮助!!谢谢!hotpower 我在测试的过程中发现 用test配置程序,读出的全部是00共 10个,而我用uart0发送字符串,显示正确,在写程序是引用了hotpower的思想和代码,及 zx1121的 笔记,再次表示感谢!最近我用io模拟时出现类同情况。在单步运行时发现MOSI电平信号变化,应该时写进去了,我在hotpower的主页上发表了我的io模拟发送程序,望hotpower给予帮助。
mail:baohua@mail.ustc.edu.cn
QQ:289734494

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]