首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于MC13213(MC9SGB/GT60)的Smac4.1c 的基本功能应用项目不断更新中。。

先自己贴一帖。
freescale提供了自己的SMAC协议源程序和一些基本的应用项目。
不过由于本人license的问题,好像没有仿真的权限,请教下达人是怎么回事?系统报229
XX的错误。
求助
-SMAC的项目源码中的Radioini()是在哪个头文件或者.C文件里的?
16K以下的代码,文件个数小于32个,LICENSE是免费的。Radioini()在对应的开发板的 .C文件中,比如说13213-NCB.C中。

基于MC13213(MC9SGB/GT60)的Smac4.1c 的基本功能应用项目不断更新中。。

[此贴子已经被作者于2007-5-17 9:50:16编辑过]


[此贴子已经被作者于2007-5-21 15:31:56编辑过]

这里有个基于smac发包的PROJECT,达人能否帮忙看下。这样在MC13213开发板上能否实现发包功能。

好像不能上传文件,那就发下我的主程序,劳烦大虾看下。 


void main(void) {tRxPacket rx_packet;  //SMAC structure for RX packets
 tTxPacket tx_packet; //SMAC structure for TX packets

 byte rx_data_buffer[20]; //Data buffer to hold RX data, if you want larger packets change 20 to what you need.
 byte tx_data_buffer[20]; //Data buffer to hold TX data, if you want larger packets change 20 to what you need.

 UINT16 packet_count;
 
      //Initialize the packet.
  tx_packet.u8DataLength = 0;   //Set TX default to 0
  tx_packet.pu8Data = &tx_data_buffer[0]; //Load the address of our txbuffer into tx structure.

  rx_packet.u8DataLength = 0;   //Set RX default to 0
  rx_packet.pu8Data = &rx_data_buffer[0]; //Load the address of our rxbuffer into rx structure
  rx_packet.u8MaxDataLength = 100;  //Define the max buffer we are interested in.
  rx_packet.u8Status = 0;   //initialize the status packet to 0.
 


   MCUInit();  //Initialize the mcu, setup GPIOs, SPI, clock scheme, etc.
   RadioInit();
   app_init();
    
  MLMESetMC13192ClockRate(0);   /* Set initial Clk speed from MC13192s CLKO*/
  UseExternalClock();  /* switch clock sources to EXTERNAL clock */
 
     /* include your start up code here */ 
   EnableInterrupts;   /* Turn on system interrupts */
  MLMESetChannelRequest(0);   //Set channel zero, can be changed to users preference 
   MLMEMC13192PAOutputAdjust(NOMINAL_POWER); //Set Nominal power setting 
 
 
  app_status = INITIAL_STATE;  //Set the initial app_status of the application state variable to INITIAL_STATE
  
                            //Loop forever
 for (;;) {

  switch (app_status) {
   case INITIAL_STATE:   //For TX    
    app_status = IDLE_STATE; //Switch app status to TX_STATE
    for (i=0; i<18; i++) {
       tx_data_buffer = i;
    }
    tx_packet.u8DataLength = 18; //Set the data length of the packet.  in this case, 6.
    packet_count=0;
    break;
    
        
   case TX_STATE:       //Load the tx buffer with the ZigBee packet.
    if (MCPSDataRequest(&tx_packet) == SUCCESS) //TX Packet, Blocking will stay here until the packet is in the air
    LED1 ^=1;            //MLME_RX_enable_request

(&rx_packet,DELAY_COUNT); //Now turn on the RX with a timeout of DELAY_COUNT
    if (packet_count < 999)
       app_status = DELAY_STATE ;    //Set app_status as waiting for ack.
       else
       app_status = FINAL_STATE;    
    
               packet_count++;
    break;
    
   case RX_STATE:
    MLMERXEnableRequest(&rx_packet,0); //Zero means wait forever with RX ON.
    break;
    
   case RESET_STATE: //MC13192 Reset, reinitialize and return to default state (TX_STATE).
    RadioInit();
    app_status = INITIAL_STATE;
    break;
    
   case RECEIVER_ALWAYS_ON:
    break;
    
   case WAITING_FOR_ACK:
    break;
    
   case SET_LEDS:
    
    /* This state takes the power value from the ack and turns on the appropriate LEDs */
    
    LED1 ^= 1; /* Toggle LED1 whenever an ack is received. (blinks LED1) */
    LED2 = LED_OFF; LED3 = LED_OFF; LED4 = LED_OFF;
    app_status = DELAY_STATE; //Take the app state and wait for some time to retransmit.
    break;
    
   case DELAY_STATE:
    //Sets the TX rate, small DELAY_COUNT means TX rate is fast while larger values slow it down.
     
    app_status = TX_STATE; //After the delay, retransmit
     break;
     
       case IDLE_STATE:
          break;
    
      case FINAL_STATE:
          tx_packet.pu8Data[0] = 'D';
           tx_packet.pu8Data[1] = 'O';
          tx_packet.pu8Data[2] = 'N';
          tx_packet.pu8Data[3] = 'E';
          tx_packet.pu8Data[4] = 'D';
          tx_packet.pu8Data[5] = 'O';
          tx_packet.pu8Data[6] = 'N';
          tx_packet.pu8Data[7] = 'E';
          tx_packet.pu8Data[8] = '\0';
          tx_packet.u8DataLength = 9;       
        for (i=0; i<20; i++) {
           for (loop = 0; loop < DELAY_COUNT; loop++);
           MCPSDataRequest(&tx_packet);
           app_status = FINAL_STATE;
        }
        LED1 = LED_OFF;
        app_status = IDLE_STATE;
       
     default:
   break;
   
  }
  

 }
}

 


 

[此贴子已经被作者于2007-5-21 15:53:50编辑过]

SMAC是分包发送的,如果你要传送文件,你需要修改串口程序。
请教下包和文件如何区分?
for (i=0; i<18; i++) {
tx_data_buffer = i;
}如果发送的内容为以上那么这算是包还是文件
我的项目的目标是想实现两个点对点对发,发端发送1000个包数据都为1,发送数据时闪灯,收端接受到正确数据时闪灯。
用SMAC4。1中的哪种应用项目可以实现?
现在在物理层,每次可以传送的包的最大长度是125Byte.所以如果你要发送文件的话,可以分包传送。在SMAC4.1中可以参考Wireless Uart这个样例程序。
jimmytan, 麻烦告诉我下这个状态机它是怎么运行的?(就是上面循环部分)我的理解是先进行初始化状态,然后进入IDEL状态。IDEL状态不做任何动作,那么如何进行发包工作呢?

[此贴子已经被作者于2007-5-26 21:14:24编辑过]

我这里发包好像不行程序运行 while (gu8RTxMode != IDLE_MODE)时,跳转到一块
FFF8 STX ,X
FFF9 STX ,X
FFFA STX ,X
FFFB STX ,X
FFFC STX ,X
FFFD STX ,X
FFFE BEST 4,0xA7
是的,你对程序的理解基本上正确的。初始化以后,一般13192会是idle或者RX收的状态

你上面帖子的程序明显是程序跑飞了,在跑到地址FFF8去了,FFF8里面没有内容,默认的数据是FF,就是STX,X语句。建议你查看一下堆栈是否足够
堆栈这块如何设置,是否就是数组生成的部分?
在GB/GT60的PRM文件中可以设置堆栈的大小。
海纳百川  有容乃大
是否是STACKSIZE 0x50
这个值有没最大范围?255?
返回列表