搜索
bottom↓
回复: 0

【求助】【网蜂用户】请问怎么把自己的SPI程序添加到z-stack

[复制链接]

出0入0汤圆

发表于 2013-4-3 19:46:51 | 显示全部楼层 |阅读模式
RT,我在裸机上调试通过了的SPI通信(CC2530为从机,主机为另外一块单片机),可是放到协议栈里面怎么也不调不通,都不知道问题出现在哪里。
程序功能是:从机CC2530通过SPI接收主机(其他MCU)以500ms间隔循环发送的L1#、L2#,#作为结束符,接收后判断若收到的是L1#则从机的LED1闪烁1次,若收到L2#则LED2闪烁一次。
代码如下:
SPI_Rx.c:
/**********************************************
            SPI Slave Receive Mode
**********************************************/

#include "ioCC2530.h"

#define uint unsigned int
#define uchar unsigned char

#define LED1 P1_0
#define LED2 P1_1

char Rxdata[3];
uchar flag = 1;
uchar datanumber = 0;
uchar temp;

void Delayms(uint z)
{
        int x,y;
        for(x=0;x<z;x++)
          for(y=0;y<1774;y++) ;
}

void SPI_Initial()
{
        P1DIR |= 0x03;          // P1_0、P1_1 as output
        LED1 = 1;      
        LED2 = 1;               // LED off
        
//      UTX1IF = 0;
//      IEN0 |= 0x88;
        
        PERCFG |= 0x02;       // 0000 0010, map USART1 to its alternative 2 location. P1_4: SSN, P1_5: SCK, P1_6: MOSI, P1_7: MISO
        P1SEL |= 0xF0;        // 1111 0000, P1_4, P1_5, P1_6, and P1_7 are peripherals

        U1CSR &= ~0x80; U1CSR |= 0x60;        // ~1000 0000, 0110 0000, SPI Slave Mode
        U1GCR &= ~0xC0; U1GCR |= 0x20;        // ~1100 0000, 0010 0000,MSB
        U1BAUD = 216; U1GCR |= 11;            // Set baud rate to 115200
}

void Led1Flash(uint j)                         //LED1 Flash j times
{
        int i;
        for(i=0;i<j;i++)
        {
          LED1 = 0;
          Delayms(300);
          LED1 = 1;
          Delayms(300);
        }
}

void Led2Flash(uint m)                         //LED1 Flash j times
{
        int n;
        for(n=0;n<m;n++)
        {
          LED2 = 0;
          Delayms(300);
          LED2 = 1;
          Delayms(300);
        }
}

void SPI_Rx()
{
        while (!(U1CSR&0x04)); U1CSR &= 0xFB;
        temp = U1DBUF;
        U1DBUF &= 0;
        
                if( flag == 1 )
                {
                    if( temp != 0 )
                    {
                      if((temp!='#')&&(datanumber<3)) // '#' as final           
                          Rxdata[datanumber++] = temp;
                       else flag = 2;
                       temp = 0;
                    }
                }
               
                if( flag == 2 )
                {
                     if( Rxdata[0] == 'L' )
                       switch(Rxdata[1]-48)           //ASIC Code to number
                       {
                          case 1:{Led1Flash(1); break;}
                          case 2:{Led2Flash(1); break;}
                       }        
                     flag = 1;
                     datanumber = 0;                     //Pointer clear 0
                }
}
/*
#pragma vector = URX1_VECTOR
__interrupt void SPI_RXLED(void)
{
      URX0IF = 0;    // clear interrupt flag
      temp = U1DBUF;
      if( flag == 1 )
      {
          if( temp != 0 )
          {
            if((temp!='#')&&(datanumber<3)) // '#' as final
              Rxdata[datanumber++] = temp;
            else flag = 2;
            temp = 0;
          }
      }
      if( flag == 2 )
      {
          if( Rxdata[0] == 'L' )
              switch(Rxdata[1]-48)           //ASIC Code to number
            {
                  case 1:{Led1Flash(1); break;}
                  case 2:{Led2Flash(1); break;}
            }        
          flag = 1;
          datanumber = 0;                     //Pointer clear 0
      }        
}
*/

最后注释掉的是中断,可以通过中断方式接收,但是放到协议栈里面去编译报错。。

头文件代码如下:
SPI_Rx.h:
#ifndef __SPI_RX_H__
#define __SPI_RX_H__


#define uint unsigned int
#define uchar unsigned char

extern unsigned char SPI_Initial(void);
extern void SPI_Rx(void);
extern void SPI_RXLED(void);

#endif

主函数代码:
SPI_main.c:
#include "ioCC2530.h"
#include "SPI_Rx.h"

void main()
{
      CLKCONCMD &= ~0x40;            
      while (CLKCONSTA & 0x40);   
      CLKCONCMD &= ~0x47;
      SPI_Initial();
      while(1)
      {
        SPI_Rx();
      }
}

请问一下,怎么把以上代码放到z-stack协议栈里面去并实现控制LED1  LED2的功能?
我在SampleApp.c里面的SampleApp_Init( uint8 task_id )函数里面加入初始化函数:SPI_Initial();
然后想通过修改网蜂点对点通信的代码实现,然后就在SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数里修改,在教程里面那个点对点发送函数    SampleApp_SendPointToPointMessage()之前添加一行代码:  SPI_Rx();

小弟不才,初学zigbee,还望请论坛网友和网蜂的相关工程师帮忙指导一下。。毕竟网上没有看到什么z-stack关于SPI通信的内容。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 10:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表