📄 parseloadear.c
字号:
ear_cfg->reg_cfg = (REGISTER_CFG *) malloc(sizeof(REGISTER_CFG));
temp_reg_cfg = ear_cfg->reg_cfg;
}
else {
temp_reg_cfg->next = (REGISTER_CFG *) malloc(sizeof(REGISTER_CFG));
temp_reg_cfg = temp_reg_cfg->next;
}
ASSERT(temp_reg_cfg != NULL);
temp_reg_cfg->version_mask = prev_version_mask;
temp_reg_cfg->next = NULL;
temp_reg_cfg->write_type.reg_write_type1 = NULL;
if (ear[iIndex] & 0x8000) { // its version mask, else register header
temp_reg_cfg->version_mask = (A_UINT16) ear[iIndex++];
}
if (prev_version_mask != temp_reg_cfg->version_mask) {
prev_version_mask = temp_reg_cfg->version_mask;
}
//Should be register header
temp_reg_cfg->reg_hdr.field0.value = (A_UINT16) ear[iIndex++];
//printf("ear[%d]=%x:temp_reg_cfg->reg_hdr.field0.value=%x:\n", (iIndex-1), ear[iIndex-1], temp_reg_cfg->reg_hdr.field0.value);
//printf("CM=%d:D=%d:pll=%d:\n", temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present, temp_reg_cfg->reg_hdr.field0.pack0.disabler_present, temp_reg_cfg->reg_hdr.field2.pack2.pll);
ASSERT(temp_reg_cfg->reg_hdr.field0.pack0.bit15 == 0);
if (temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present) {
temp_reg_cfg->reg_hdr.field1.channel_modifier = (A_UINT16) ear[iIndex++];
}
if (temp_reg_cfg->reg_hdr.field0.pack0.disabler_present) {
temp_reg_cfg->reg_hdr.field2.disabler_mask = (A_UINT16) ear[iIndex++];
}
else {
temp_reg_cfg->reg_hdr.field2.disabler_mask = 0;
}
if (temp_reg_cfg->reg_hdr.field2.pack2.pll) {
temp_reg_cfg->reg_hdr.pll_value = (A_UINT16) ear[iIndex++];
}
switch(temp_reg_cfg->reg_hdr.field0.pack0.type) {
case WRITE_TYPE0:
do {
//printf("TYPE0:iIndex=%d\n", iIndex);
if (temp_reg_cfg->write_type.reg_write_type0 == NULL) {
temp_reg_cfg->write_type.reg_write_type0 = (REGISTER_WRITE_TYPE0 *) malloc(sizeof(REGISTER_WRITE_TYPE0));
temp_reg_write_type0 = temp_reg_cfg->write_type.reg_write_type0;
}
else {
temp_reg_write_type0->next = (REGISTER_WRITE_TYPE0 *) malloc(sizeof(REGISTER_WRITE_TYPE0));
temp_reg_write_type0 = temp_reg_write_type0->next;
}
ASSERT(temp_reg_write_type0 != NULL);
temp_reg_write_type0->next = NULL;
temp_reg_write_type0->field0.value = (A_UINT16) ear[iIndex++];
switch(temp_reg_write_type0->field0.pack.tag){
case 0:
case 3:
temp_reg_write_type0->msw = (A_UINT16) ear[iIndex++];
temp_reg_write_type0->lsw = (A_UINT16) ear[iIndex++];
break;
case 1:
case 2:
temp_reg_write_type0->msw = (A_UINT16) ear[iIndex++];
break;
}
ASSERT(iIndex<numLocations);
} while(temp_reg_write_type0->field0.pack.tag != 3);
break;
case WRITE_TYPE1:
//printf("TYPE1:iIndex=%d\n", iIndex);
if (temp_reg_cfg->write_type.reg_write_type1 == NULL) {
temp_reg_cfg->write_type.reg_write_type1 = (REGISTER_WRITE_TYPE1 *) malloc(sizeof(REGISTER_WRITE_TYPE1));
temp_reg_write_type1 = temp_reg_cfg->write_type.reg_write_type1;
temp_reg_write_type1->next = NULL;
}
ASSERT(temp_reg_write_type1 != NULL);
temp_reg_write_type1->field0.value = (A_UINT16) ear[iIndex++];
for(jIndex=0; jIndex<=temp_reg_write_type1->field0.pack.num; jIndex++) {
ASSERT(iIndex<numLocations);
temp_reg_write_type1->data_msw[jIndex] = (A_UINT16) ear[iIndex++];
temp_reg_write_type1->data_lsw[jIndex] = (A_UINT16) ear[iIndex++];
}
break;
case WRITE_TYPE2:
//printf("TYPE2:iIndex=%d\n", iIndex);
do {
if (temp_reg_cfg->write_type.reg_write_type2 == NULL) {
temp_reg_cfg->write_type.reg_write_type2 = (REGISTER_WRITE_TYPE2 *) malloc(sizeof(REGISTER_WRITE_TYPE2));
temp_reg_write_type2 = temp_reg_cfg->write_type.reg_write_type2;
}
else {
temp_reg_write_type2->next = (REGISTER_WRITE_TYPE2 *) malloc(sizeof(REGISTER_WRITE_TYPE2));
temp_reg_write_type2 = temp_reg_write_type2->next;
}
ASSERT(temp_reg_write_type2 != NULL);
temp_reg_write_type2->next = NULL;
temp_reg_write_type2->field0.value = (A_UINT16) ear[iIndex++];
switch(temp_reg_write_type2->field0.pack0.extended){
case 0:
temp_reg_write_type2->field1.value = (A_UINT16) ear[iIndex++];
break;
case 1:
temp_reg_write_type2->num_bits = (A_UINT16) ear[iIndex++];
temp_reg_write_type2->num_data = A_DIV_UP(temp_reg_write_type2->num_bits, 16);
temp_reg_write_type2->data = (A_UINT16 *) malloc(sizeof (A_UINT16) * temp_reg_write_type2->num_data);
for(jIndex=0; jIndex<temp_reg_write_type2->num_data; jIndex++) {
ASSERT(iIndex<numLocations);
temp_reg_write_type2->data[jIndex] = (A_UINT16)ear[iIndex++];
}
break;
}
ASSERT(iIndex<numLocations);
}while(!temp_reg_write_type2->field0.pack0.last);
break;
case WRITE_TYPE3:
//printf("TYPE3:iIndex=%d\n", iIndex);
do {
if (temp_reg_cfg->write_type.reg_write_type3 == NULL) {
temp_reg_cfg->write_type.reg_write_type3 = (REGISTER_WRITE_TYPE3 *) malloc(sizeof(REGISTER_WRITE_TYPE3));
temp_reg_write_type3 = temp_reg_cfg->write_type.reg_write_type3;
}
else {
temp_reg_write_type3->next = (REGISTER_WRITE_TYPE3 *) malloc(sizeof(REGISTER_WRITE_TYPE3));
temp_reg_write_type3 = temp_reg_write_type3->next;
}
ASSERT(temp_reg_write_type3 != NULL);
temp_reg_write_type3->next = NULL;
temp_reg_write_type3->field0.value = (A_UINT16) ear[iIndex++];
temp_reg_write_type3->address = (A_UINT16) ear[iIndex++];
temp_reg_write_type3->data_msw = (A_UINT16) ear[iIndex++];
if (temp_reg_write_type3->field0.pack.num_bits > 16) {
temp_reg_write_type3->data_lsw = (A_UINT16) ear[iIndex++];
}
ASSERT(iIndex<numLocations);
}while(!temp_reg_write_type3->field0.pack.last);
break;
}
if (!ear[iIndex]) break;
}
printParsedFormattedData(ear_cfg);
freeup_earcfg(ear_cfg);
}
void printParsedFormattedData(EAR_CFG *ear_cfg) {
REGISTER_CFG *temp_reg_cfg = NULL;
REGISTER_WRITE_TYPE0 *temp_reg_write_type0=NULL;
REGISTER_WRITE_TYPE1 *temp_reg_write_type1=NULL;
REGISTER_WRITE_TYPE2 *temp_reg_write_type2=NULL;
REGISTER_WRITE_TYPE3 *temp_reg_write_type3=NULL;
A_UINT32 iIndex;
A_UINT16 prev_version_mask;
char *tag_str[] = {"32 bit data", "lower 16 bit data", "upper 16 bit data", "32 bit data and last write in the block"};
temp_reg_cfg = ear_cfg->reg_cfg;
uiPrintf("****** Version Id = %x ****** \n", ear_cfg->version_id);
uiPrintf("****** Version Mask = %x ****** \n", temp_reg_cfg->version_mask);
prev_version_mask = temp_reg_cfg->version_mask;
while(temp_reg_cfg) {
if (prev_version_mask != temp_reg_cfg->version_mask) {
uiPrintf("****** Version Mask = %x ****** \n", temp_reg_cfg->version_mask);
prev_version_mask = temp_reg_cfg->version_mask;
}
uiPrintf("Hdr value = %x::", temp_reg_cfg->reg_hdr.field0.value);
printModeString( (A_UINT16) temp_reg_cfg->reg_hdr.field0.pack0.reg_modality_mask);
if (temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present) {
uiPrintf("Channel modifier = ");
if (temp_reg_cfg->reg_hdr.field1.pack1.bit15) {
uiPrintf("Single channel %0d MHz\n", temp_reg_cfg->reg_hdr.field1.pack1.bit0_14);
}
else
{
uiPrintf("%x::", temp_reg_cfg->reg_hdr.field1.channel_modifier);
}
}
if (temp_reg_cfg->reg_hdr.field0.pack0.disabler_present) {
uiPrintf("Disabler = %x -> ", temp_reg_cfg->reg_hdr.field2.disabler_mask);
if (temp_reg_cfg->reg_hdr.field2.pack2.pll) {
uiPrintf("PLL %x\n", temp_reg_cfg->reg_hdr.pll_value);
}
}
switch(temp_reg_cfg->reg_hdr.field0.pack0.type) {
case 0:
uiPrintf("TYPE 0\n");
temp_reg_write_type0 = temp_reg_cfg->write_type.reg_write_type0;
while(temp_reg_write_type0) {
uiPrintf("Address = %x::", temp_reg_write_type0->field0.pack.address<<2);
uiPrintf("%s\n", tag_str[temp_reg_write_type0->field0.pack.tag]);
uiPrintf("=== > %x\n", temp_reg_write_type0->msw);
if (temp_reg_write_type0->field0.pack.tag == 0 || temp_reg_write_type0->field0.pack.tag == 3) {
uiPrintf("=== > %x ", temp_reg_write_type0->lsw);
}
uiPrintf("\n");
temp_reg_write_type0 = temp_reg_write_type0 -> next;
}
break;
case 1:
uiPrintf("TYPE 1, Group addresses\n");
temp_reg_write_type1 = temp_reg_cfg->write_type.reg_write_type1;
while(temp_reg_write_type1) {
uiPrintf("Number of data = %x\n", temp_reg_write_type1->field0.pack.num);
uiPrintf("Address = %x\n", temp_reg_write_type1->field0.pack.address<<2);
for(iIndex=0; iIndex<=temp_reg_write_type1->field0.pack.num; iIndex++) {
uiPrintf("Data MSW[%d] = %x \n", iIndex, temp_reg_write_type1->data_msw[iIndex]);
uiPrintf("Data LSW[%d] = %x \n", iIndex, temp_reg_write_type1->data_lsw[iIndex]);
}
temp_reg_write_type1 = temp_reg_write_type1 -> next;
}
break;
case 2:
uiPrintf("TYPE 2, Analog registers = ");
temp_reg_write_type2 = temp_reg_cfg->write_type.reg_write_type2;
while(temp_reg_write_type2) {
uiPrintf("%x\n", temp_reg_write_type2->field0.value);
if (temp_reg_write_type2->field0.pack0.extended) {
for(iIndex=0; iIndex<temp_reg_write_type2->num_data; iIndex++) {
uiPrintf("=== > %x\n", temp_reg_write_type2->data[iIndex]);
}
}
else {
uiPrintf("%x\n", temp_reg_write_type2->field1.value);
}
temp_reg_write_type2 = temp_reg_write_type2 -> next;
}
break;
case 3:
uiPrintf("TYPE 3 \n");
temp_reg_write_type3 = temp_reg_cfg->write_type.reg_write_type3;
while(temp_reg_write_type3) {
uiPrintf("Field 0 === > %x::", temp_reg_write_type3->field0.value);
uiPrintf("Opcode = %d\n", temp_reg_write_type3->field0.pack.opcode);
uiPrintf("Address = %x\n", temp_reg_write_type3->address);
if (temp_reg_write_type3->field0.pack.num_bits > 16) {
uiPrintf("Data MSW %x\n", temp_reg_write_type3->data_msw);
uiPrintf("Data LSW %x\n", temp_reg_write_type3->data_lsw);
}
else {
uiPrintf("Data %x\n", temp_reg_write_type3->data_msw);
}
temp_reg_write_type3 = temp_reg_write_type3 -> next;
}
break;
}
temp_reg_cfg = temp_reg_cfg->next;
}
}
int parseLoadEar(char *ear_cfg_filename, A_UINT32 ear[MAX_EAR_LOCATIONS], A_UINT32 *numlocations, int debug)
{
EAR_CFG *ear_cfg = NULL;
A_UINT32 iIndex;
ear_cfg = (EAR_CFG *) malloc(sizeof(EAR_CFG));
ASSERT(ear_cfg != NULL);
ear_cfg->reg_cfg = NULL;
if (parseEarCfgFile(ear_cfg_filename, &ear_cfg) != -1) {
if (debug) printf("creating EAR \n");
*numlocations = createEAR(ear_cfg, ear);
if (debug) printf("created EAR \n");
if (debug) {
printf("printing parsed file \n");
printf("Number of EAR locations = %d\n", *numlocations);
printParsedFormattedData(ear_cfg);
printf("EAR words are \n");
for(iIndex=0; iIndex<*numlocations; iIndex++) {
printf("%x\n", ear[iIndex]);
}
}
freeup_earcfg(ear_cfg);
ear_cfg=NULL;
// uiPrintf("\nThe Number of Ear Location = %d",*numlocations);
return *numlocations;
}
else {
return -1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -