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

📄 aal2txrxbyte.c

📁 摩托罗拉Motolola公司网络处理器C3的示范代码.实现了ATM的AAL2层交换功能.想了解网络处理器的可以
💻 C
字号:
/* *  Copyright (c) 2000, 2001, 2002 C-Port Corporation, a Motorola Company *  All Rights Reserved * *  The information contained in this file is C-Port Corporation *  confidential and proprietary. *  Any reproduction, use or disclosure, in whole or in part, of this *  program, including any attempt to obtain a human-readable version of this *  program, without the express, prior written consent of C-Port *  Corporation or Motorola Incorporated is strictly prohibited. * */#define RXBYTE#include <stdio.h>#include <sdpUcode.h>#include <dcpRegisterDefs.h>#include <dcpRegistersCp.h>#include <atm.h>#include <rcSdpAal2TxApiIf.h>/*---------------------------------------------------------------------------*/#define EXTRACT   ((int) &((SdpRxCregs*)NULL)->extract)#define RXSTATUS  ((int) &((SdpRxCregs*)NULL)->rxStatus)#define AAL2TXEXTRACT (EXTRACT + (int) &((ExtractSpc*)NULL)->Aal2TxExtSpc)#define RC_OWN_FLG    (RXSTATUS_OWN    >> 8)#define IREG_ATM_SDU_BYTES_COUNT                Ireg0voidSDPmain(){   Description = ("AAL2 Tx Microcode for the SDP RxByte Processor.");    /* Disable the SDP FIFO overrun functionality */    // Abus(Literal(OVERRUNCLR));    // Bbus(IregsB(STATUSreg));    // ALU(XOR);    // IregsA(STATUSreg);    // Actions(IregsAwrite);    // Branch(ALWAYS, Upc+1);/*---------------------------------------------------------------------------*/LabelDef(NEXT_EXTRACT);        DCPSIM_MESSAGE(NEXT_EXTRACT);        /* Initialize ATM SDU Bytes count to 0 */    IregInit(IREG_ATM_SDU_BYTES_COUNT, 0x00, UseAbus);    Branch(ALWAYS, Upc+1);    /* Check the extract space ownership */        CregsAddrWrite(RXSTATUS);    Branch(ALWAYS, Upc+1);    Branch(ALWAYS, Upc+1);/*---------------------------------------------------------------------------*//*  Poll for the Extract Space availability */LabelDef(EXTRACT_POLL);        DCPSIM_MESSAGE(EXTRACT_POLL);    // Debug code added for fixing on D0    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x00);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 1);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x00);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 2);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x00);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 3);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x00);    // Branch(ALWAYS, Upc + 1);    Abus(Creg);    ALU(PassA);    Branch(ALWAYS, Upc+1);    Branch(ALUneg, Label(EXTRACT_POLL));        /* Extract space is owned by RxByte. Get the address of AtmSduBytesCount into Creg */        CregsAddrWrite(AAL2TXEXTRACT + (int) &((Aal2TxExtractSpace*)NULL)->AtmSduBytesCount);    Branch(ALWAYS, Upc+1);    Branch(ALWAYS, Upc+1);        /* Initialize this location contents to 0 */    Abus(Literal(0));    ALU(PassA);    Actions(CregsWrite);    Pbus(ALUout);    Branch(ALWAYS, Upc+1);        /*  Check if input data stream is ready in Input FIFO */    Actions(RepeatUntil);    Branch(RxDataValid, Upc+1);    // Debug code added for fixing on D0    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG);    // Branch(ALWAYS, Upc + 1);    // CregInit(0xD0);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 1);    // Branch(ALWAYS, Upc + 1);    // CregInit(0xE0);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 2);    // Branch(ALWAYS, Upc + 1);    // CregInit(0xF0);    // Branch(ALWAYS, Upc + 1);/*---------------------------------------------------------------------------*//*  Data stream is coming from TxByte processor, process it */LabelDef(PROCESS_INPUT_DATA);        DCPSIM_MESSAGE(PROCESS_INPUT_DATA);    Actions(UnloadFIFO + DataOutValid+ IregIncr(IREG_ATM_SDU_BYTES_COUNT));    Abus(Payload);    ALU(PassA);    Pbus(ALUout);    Branch(Data9, Label(WRITE_ATM_SDU_BYTES_COUNT_TO_EXT_SPC));    Branch(ALWAYS, Label(PROCESS_INPUT_DATA));/*---------------------------------------------------------------------------*//* Write ATM SDU Bytes count into the extract space field */LabelDef(WRITE_ATM_SDU_BYTES_COUNT_TO_EXT_SPC);        DCPSIM_MESSAGE (WRITE_ATM_SDU_BYTES_COUNT_TO_EXT_SPC);    /* This piece of code has been put to add 10 cycles between     * the last byte of data sent to CPRC and the scope switch */    CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG);    Branch(ALWAYS, Upc + 1);    CregInit(0x0D);    Branch(ALWAYS, Upc + 1);    CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 1);    Branch(ALWAYS, Upc + 1);    CregInit(0x0E);    Branch(ALWAYS, Upc + 1);    CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 2);    Branch(ALWAYS, Upc + 1);    CregInit(0x0F);    Branch(ALWAYS, Upc + 1);    CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 3);    Branch(ALWAYS, Upc + 1);    IregToCregs(IREG_ATM_SDU_BYTES_COUNT);    Branch(ALWAYS, Upc + 1);        /* Get the address of AtmSduBytesCount into Creg */        CregsAddrWrite(AAL2TXEXTRACT + (int) &((Aal2TxExtractSpace*)NULL)->AtmSduBytesCount);    Branch(ALWAYS, Upc+1);    Branch(ALWAYS, Upc+1);        /* Transfer contents of IREG_ATM_SDU_BYTES_COUNT to Extract Space */        IregToCregs(IREG_ATM_SDU_BYTES_COUNT);        Branch(ALWAYS, Upc+1);/*---------------------------------------------------------------------------*//* Handover Extract Space to RC */LabelDef(HANDOVER_EXTRACT_SPACE_TO_RC);        DCPSIM_MESSAGE (HANDOVER_EXTRACT_SPACE_TO_RC);    CregsAddrWrite(RXSTATUS);    Branch(ALWAYS, Upc+1);    Branch(ALWAYS, Upc+1);    Abus(Literal(RC_OWN_FLG));    ALU(PassA);    Actions(CregsWrite);    Pbus(ALUout);    Branch(ALWAYS, Upc+1);    // Debug code added for fixing on D0    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x01);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 1);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x02);    // Branch(ALWAYS, Upc + 1);    // CregsAddrWrite(AAL2TX_RX_BYTE_CTRL_REG + 2);    // Branch(ALWAYS, Upc + 1);    // CregInit(0x03);    // Branch(ALWAYS, Upc + 1);        /* Now it requires to reset the count and start all over again for the         * next data stream.         */        Branch(ALWAYS, Label(NEXT_EXTRACT));/*---------------------------------------------------------------------------*/}

⌨️ 快捷键说明

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