We were using 2 boards for project, Pinaka on Artix-7-35t and Parashu on Artix-7-100t loaded the same with .mcs as you provided PARASHU-05122020.mcs & PINAKA-05122020.mcs
Problem-
a)same application .hex code downloaded into 35T(pinaka) & 100T(parashu). 100T has more propensity to misbehave eg. displays garbage on LCD connected, fails to read modbus once in while (timeout error).
b)overall 100T is slower by 5-6 times compared to 35T
c)Sometimes 100T sets at Control transferred to RAM as displayed on the terminal.
Query-
Plz suggest a solution, is there any H/W problem i.e. FPGA code in .mcs file for 100T? 35T board works without interruption in above 3 cases a,b,c.
what we did is added a 60ms delay in ring buffer function and it sorted issue regarding one as reading keyboard log efficiently but was unable to solve other issues.
ringbuffer code here you can see i have added delay of 60 ms so that it can log upto 10 12 characters at same time, if i dont add it , will not get the characters also see below where the array is used
void uart0_ringbuff_ISR(void)
{
// printf("-------ISR_uart1_entered--------n");
DEBUG2(">");
while(PCUART->status & STS_RX_NOT_EMPTY)
{
// youtube starts
uart0_temp = PCUART -> rcv_reg;
//time delay by swapnil
delay_milli(60);
Rx_Buffer_UART0[RX_Wr_Index_UART0] = uart0_temp;
if(++RX_Wr_Index_UART0> RX_BUFFER_SIZE_UART0)
RX_Wr_Index_UART0 = 0;
if(++RX_Counter_UART0>RX_BUFFER_SIZE_UART0)
{
RX_Counter_UART0 = RX_BUFFER_SIZE_UART0;
RX_Buffer_Overflow_UART0 = 1;
}
// printf("Rx counter = %d",RX_Counter_UART0);
RX_No_of_byte_UART0 = RX_Counter_UART0;
}
DEBUG2("-n");
}
void getstring_UART0()
{
while(RX_Counter_UART0 > 1)
{
//printf by swapnil
if(0x0d == Rx_Buffer_UART0[RX_Rd_Index_UART0])
{
if(++RX_Rd_Index_UART0>RX_BUFFER_SIZE_UART0)
RX_Rd_Index_UART0=0;
RX_Counter_UART0--;
if(0x0a == Rx_Buffer_UART0[RX_Rd_Index_UART0])
{
if(++RX_Rd_Index_UART0>RX_BUFFER_SIZE_UART0)
RX_Rd_Index_UART0 = 0;
RX_Counter_UART0--;
while(uart0_head!=RX_Rd_Index_UART0)
{
RX_DATA_UART0[uart0_tail++] = Rx_Buffer_UART0[uart0_head];
// printf("%c",RX_DATA_UART1[head]);
if(++uart0_head>RX_BUFFER_SIZE_UART0)
uart0_head = 0;
}
RX_DATA_UART0[uart0_tail] = ''; // null termination of string
uart0_tail = 0;
// RX_DATA_UART1[head] = ''; // null termination of string
uart0_frame_detection = UART0_FRAME_COMPLETED;
break;
}
else
{
if(++RX_Rd_Index_UART0>RX_BUFFER_SIZE_UART0)
RX_Rd_Index_UART0 = 0;
RX_Counter_UART0--;
}
}
else
{
if(++RX_Rd_Index_UART0>RX_BUFFER_SIZE_UART0)
RX_Rd_Index_UART0 = 0;
RX_Counter_UART0--;
}
}
}
Swapnil Jadhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.