⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetassembler.c

📁 chipcon公司无线芯片cc1100的主机通信程序 具有一定的参考价值
💻 C
字号:
/*****************************************************************************
 *                                                                           *
 *        **********                                                         *
 *       ************                                                        *
 *      ***        ***                                                       *
 *      ***   +++   ***                                                      *
 *      ***   + +   ***                                                      *
 *      ***   +                CHIPCON CC1010 Wireless audio project         *
 *      ***   + +   ***                                                      *
 *      ***   +++   ***         PacketAssembler for the master unit          *
 *      ***       ***                                                        *
 *       ***********                                                         *
 *        *********                                                          *
 *                                                                           *
 *****************************************************************************
 * This source file is part of a software project for a Full Duplex,         *
 * single-chip, wireless intercom, written for the CC1010 chip               *
 * (RF-transceiver chip with integrated 8051 micro-controller).              *
 *****************************************************************************
 * Author:              OAE                                                  *
 *****************************************************************************
 * Revision history:                                                         *
 *                                                                           *
 * $Log: PacketAssembler.c,v $
 * Revision 1.1  2003/08/04 12:34:27  tos
 * Initial version in CVS.
 *
 *                                                                           *
 *                                                                           *
 ****************************************************************************/

#include <chipcon/reg1010.h>
#include <chipcon/cc1010eb.h>
#include <chipcon/hal.h>

// Define buffers constants
#define BUFFER_SIZE 256
#define BUFFER0 0
#define BUFFER1 1

// Set up RAM buffers at absolute addresses
byte xdata transmitbuffer0[BUFFER_SIZE] _at_ 0x0000;
byte xdata transmitbuffer1[BUFFER_SIZE] _at_ 0x0100;

// Define buffer pointers 
const byte xdata *transmit_buffer_start_ptr0 = &transmitbuffer0[0];
const byte xdata *transmit_buffer_start_ptr1 = &transmitbuffer1[0];
byte xdata *transmit_buffer_write_ptr;

// Variables for transmit buffer
byte transmitwritecounter = 0;
bit readytobuffer = 0;
byte transmitcode = 0;
bit currenttransmitbuffer = 0;

// Function prototypes
byte DpcmEncoder (byte sample, bit returncode);


/**************************************************************************
* PacketAssembler() - Routine for packet assembling                       *
***************************************************************************
* Description:                                                            *
*   Used to build a packet of encoded speech samples, which is stored     *
*   in the transmit buffer.                                               *
***************************************************************************
* Input arguments:                                                        *
*   byte sample: Unsigned PCM speech sample (0-255).                      *
* Return value:                                                           *
*   bit: Status flag which indicates position of the write buffer pointer.*
**************************************************************************/
bit PacketAssembler(byte sample)
{
    /* A predicted sample (not the coded difference) is saved
    at the first buffer position */
    if (transmitwritecounter == 0)
    {  
        // Switch buffer
        currenttransmitbuffer = !currenttransmitbuffer;

        /* Encode the sample to get a new encoder predicted sample
        Save the predicted sample in buffer */
        if (currenttransmitbuffer == BUFFER0)
            *(transmit_buffer_write_ptr = transmit_buffer_start_ptr0)
            = DpcmEncoder(sample,0);
        else
            *(transmit_buffer_write_ptr = transmit_buffer_start_ptr1)
            = DpcmEncoder(sample,0);
        
        // Initialize the readytobuffer flag
        readytobuffer = 0;

        // Increment write counter
        transmitwritecounter++;

    }// End if

    else// (transmitwritecounter != 0)
    {
        // Code a sound sample
        transmitcode |= DpcmEncoder(sample,1);

        // Buffer the transmitcode when containing two coded samples (2*4 bit)
        if (readytobuffer)
        {
            // Save the encoded byte in buffer	
            *transmit_buffer_write_ptr = transmitcode;

            // Increment write counter
            transmitwritecounter++;

            // Reset transmitcode
            transmitcode = 0;

        }// End if
        else //(!readytobuffer)
        {
            // Shift the contents in transmitcode to the MSB end of the byte
            transmitcode <<= 4;

            // Increment write pointer
            transmit_buffer_write_ptr++;

        }// End else

        // Toggle readytobuffer
        readytobuffer = !readytobuffer;

    }// End else

    // Return buffer position flag
    return (transmitwritecounter == BUFFER_SIZE -1);

}//End function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -