self.seqgenrst = 0
How i should mention in this example
TAG_PORTS =Port 1 & Port 2
GENSEQNUM = ENABLE
SEQ_REC_PORTS = POrt 3 & Port 4
how to enter the values in this data ??
typedef struct {
uint8_t RTAGOFFSET_10;
uint8_t RTAGOFFSET_9;
uint8_t RTAGOFFSET_8;
uint8_t RTAGOFFSET_7;
uint8_t RTAGOFFSET_6;
uint8_t RTAGOFFSET_5;
uint8_t RTAGOFFSET_4;
uint8_t RTAGOFFSET_3;
uint8_t RTAGOFFSET_2;
uint8_t RTAGOFFSET_1;
uint8_t RTAGOFFSET_0;
uint16_t REPLACE_PORTS;
uint16_t TAG_PORTS;
uint16_t IND_REC_PORTS;
uint16_t SEQ_REC_PORTS;
uint16_t IND_REC_TIMEOUT;
uint16_t SEQRECOFFSET;
uint16_t GENSEQNUM;
uint8_t tstled;
uint8_t rstled;
uint8_t seqgenrst;
uint8_t index;
} CB_SGIR_Entry;
void SGIR_Entry(const CB_SGIR_Entry* entry, uint32_t* Write_SGIR_Entry) {
int ADDR_RANGE = 5;
for (int i = 0; i < ADDR_RANGE; i++) Write_SGIR_Entry[i] = 0;
Write_SGIR_Entry[0] = ((entry->RTAGOFFSET_0 & 0x1) << 0)
| ((entry->RTAGOFFSET_1 & 0x1) << 1)
| ((entry->RTAGOFFSET_2 & 0x1) << 2)
| ((entry->RTAGOFFSET_3 & 0x1) << 3)
| ((entry->RTAGOFFSET_4 & 0x1) << 4)
| ((entry->RTAGOFFSET_5 & 0x1) << 5)
| ((entry->RTAGOFFSET_6 & 0x1) << 6)
| ((entry->RTAGOFFSET_7 & 0x1) << 7)
| ((entry->RTAGOFFSET_8 & 0x1) <<
| ((entry->RTAGOFFSET_9 & 0x1) << 9)
| ((entry->RTAGOFFSET_10 & 0x1) << 10);
Write_SGIR_Entry[1] = ((entry->REPLACE_PORTS & 0xFFFF) << 0)
| ((entry->TAG_PORTS & 0xFFFF) << 16);
Write_SGIR_Entry[2] = ((entry->IND_REC_PORTS & 0xFFFF) << 0)
| ((entry->SEQ_REC_PORTS & 0xFFFF) << 16);
Write_SGIR_Entry[3] = ((entry->IND_REC_TIMEOUT & 0xFFFF) << 0)
| ((entry->SEQRECOFFSET & 0xFFFF) << 16);
Write_SGIR_Entry[4] = ((entry->GENSEQNUM & 0xFFFF) << 0)
| ((entry->tstled & 0x1) << 16)
| ((entry->rstled & 0x1) << 17)
| ((entry->seqgenrst & 0x1) << 18);
}
void write_SGIR(const CB_SGIR_Entry* entry) {
uint32_t SWREG_BASE = 0x00000000;
uint32_t CB_SGIR_OFFSET = 0xFF000238;
uint32_t CB_SGIR_CTRL_OFFSET = 0xFF00024C;
uint32_t VALID = (1U << 31);
uint32_t RDWRSET = (1U << 30);
uint32_t TARGETEDTBL = (0U << 6);
uint32_t ADDR_RANGE = 5;
uint32_t TABLE_SIZE = 64;
volatile uint32_t* const CB_SGIR_TABLE = (uint32_t*)(SWREG_BASE + CB_SGIR_OFFSET);
volatile uint32_t* const CB_SGIR_CTRL = (uint32_t*)(SWREG_BASE + CB_SGIR_CTRL_OFFSET);
uint32_t Write_SGIR_Entry[ADDR_RANGE];
SGIR_Entry(entry, Write_SGIR_Entry);
uint32_t control_word = VALID | RDWRSET | (TARGETEDTBL) | (entry->index & 0x3F);
for (int i = 0; i < ADDR_RANGE; i++) {
CB_SGIR_TABLE[i] = Write_SGIR_Entry[i];
}
*CB_SGIR_CTRL = control_word;
}
void ConfigSGIR(uint8_t index,uint16_t tag_ports,uint16_t replace_ports,uint16_t ind_rec_ports,uint16_t seq_rec_ports,
uint16_t ind_rec_timeout,uint16_t seqrec_offset,uint16_t genseqnum,uint8_t seqgenrst,uint8_t tstled,uint8_t rstled,
uint8_t rtagoffset[11]) {
CB_SGIR_Entry entry = {0};
entry.index = index;
entry.TAG_PORTS = tag_ports;
entry.REPLACE_PORTS = replace_ports;
entry.IND_REC_PORTS = ind_rec_ports;
entry.SEQ_REC_PORTS = seq_rec_ports;
entry.IND_REC_TIMEOUT = ind_rec_timeout;
entry.SEQRECOFFSET = seqrec_offset;
entry.GENSEQNUM = genseqnum;
entry.seqgenrst = seqgenrst;
entry.tstled = tstled;
entry.rstled = rstled;
entry.RTAGOFFSET_0 = rtagoffset[0];
entry.RTAGOFFSET_1 = rtagoffset[1];
entry.RTAGOFFSET_2 = rtagoffset[2];
entry.RTAGOFFSET_3 = rtagoffset[3];
entry.RTAGOFFSET_4 = rtagoffset[4];
entry.RTAGOFFSET_5 = rtagoffset[5];
entry.RTAGOFFSET_6 = rtagoffset[6];
entry.RTAGOFFSET_7 = rtagoffset[7];
entry.RTAGOFFSET_8 = rtagoffset[8];
entry.RTAGOFFSET_9 = rtagoffset[9];
entry.RTAGOFFSET_10 = rtagoffset[10];
write_SGIR(&entry);
}
int main(){
ConfigSGIR(0, (1 << 1) | (1 << 2), 0, 0, 0, 0, 0, 1, 0, 0, 0, rtagoffsets0);
}
whether this code is correct to execute for Creating a Dynamic Entry ??