📄 aal2txrxbyte.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 + -