fix lockup issue due to counter reaching max value

This commit is contained in:
marqs 2023-09-19 22:39:21 +03:00
parent 6ae321a9ff
commit 1ba02417d5
8 changed files with 8051 additions and 8065 deletions

@ -1 +1 @@
Subproject commit b11dd7718e6d367cbaef8a362ce206510fd87ed0
Subproject commit dfb0af0ed3b4e9e72e444eba2b1c149b5adad2cc

View File

@ -3324,21 +3324,9 @@ SetAVIInfoFrame(AVI_InfoFrame *pAVIInfoFrame)
}
Switch_HDMITX_Bank(1) ;
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB1,pAVIInfoFrame->pktbyte.AVI_DB[0]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB2,pAVIInfoFrame->pktbyte.AVI_DB[1]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB3,pAVIInfoFrame->pktbyte.AVI_DB[2]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB4,pAVIInfoFrame->pktbyte.AVI_DB[3]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB5,pAVIInfoFrame->pktbyte.AVI_DB[4]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB6,pAVIInfoFrame->pktbyte.AVI_DB[5]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB7,pAVIInfoFrame->pktbyte.AVI_DB[6]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB8,pAVIInfoFrame->pktbyte.AVI_DB[7]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB9,pAVIInfoFrame->pktbyte.AVI_DB[8]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB10,pAVIInfoFrame->pktbyte.AVI_DB[9]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB11,pAVIInfoFrame->pktbyte.AVI_DB[10]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB12,pAVIInfoFrame->pktbyte.AVI_DB[11]);
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB13,pAVIInfoFrame->pktbyte.AVI_DB[12]);
for(i = 0,ucData = 0; i < 13 ; i++)
for(i = 0,ucData = 0; i < AVI_INFOFRAME_LEN ; i++)
{
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB1+i,pAVIInfoFrame->pktbyte.AVI_DB[i]);
ucData -= pAVIInfoFrame->pktbyte.AVI_DB[i] ;
}
ErrorF("SetAVIInfo(): ") ;
@ -3386,13 +3374,9 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
}
Switch_HDMITX_Bank(1) ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_AUDINFO_CC,pAudioInfoFrame->pktbyte.AUD_DB[0]);
HDMITX_WriteI2C_Byte(REG_TX_PKT_AUDINFO_SF,pAudioInfoFrame->pktbyte.AUD_DB[1]);
HDMITX_WriteI2C_Byte(REG_TX_PKT_AUDINFO_CA,pAudioInfoFrame->pktbyte.AUD_DB[3]);
HDMITX_WriteI2C_Byte(REG_TX_PKT_AUDINFO_DM_LSV,pAudioInfoFrame->pktbyte.AUD_DB[4]) ;
for(i = 0,ucData = 0 ; i< 5 ; i++)
{
HDMITX_WriteI2C_Byte(REG_TX_PKT_AUDINFO_CC+i,pAudioInfoFrame->pktbyte.AUD_DB[i]);
ucData -= pAudioInfoFrame->pktbyte.AUD_DB[i] ;
}
ucData -= 0x80+AUDIO_INFOFRAME_VER+AUDIO_INFOFRAME_TYPE+AUDIO_INFOFRAME_LEN ;
@ -3422,11 +3406,9 @@ SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame)
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pHDRInfoFrame->info.Ver);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pHDRInfoFrame->info.Len);
for(i = 0; i < HDR_INFOFRAME_LEN ; i++)
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pHDRInfoFrame->pktbyte.HDR_DB[i]);
for(i = 0,ucData = 0 ; i< HDR_INFOFRAME_LEN ; i++)
{
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pHDRInfoFrame->pktbyte.HDR_DB[i]);
ucData -= pHDRInfoFrame->pktbyte.HDR_DB[i] ;
}
ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ;
@ -3458,7 +3440,7 @@ SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame)
}
Switch_HDMITX_Bank(1) ;
for(i = 0,ucData = 0 ; i < 25 ; i++)
for(i = 0,ucData = 0 ; i < SPD_INFOFRAME_LEN ; i++)
{
ucData -= pSPDInfoFrame->pktbyte.SPD_DB[i] ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_SPDINFO_PB1+i,pSPDInfoFrame->pktbyte.SPD_DB[i]) ;

File diff suppressed because it is too large Load Diff

View File

@ -45,6 +45,7 @@
#define MIN_LINES_PROGRESSIVE 200
#define MIN_LINES_INTERLACED 400
#define STATUS_TIMEOUT_US 25000
#define MAINLOOP_INTERVAL_US 10000
#define PCNT_TOLERANCE 50
#define HSYNC_WIDTH_TOLERANCE 8
@ -910,7 +911,8 @@ int main()
alt_u32 input_vec;
alt_u32 auto_input_timestamp = 300 * (alt_timestamp_freq() >> 10);
alt_timestamp_type start_ts;
alt_timestamp_type auto_input_timestamp = 0;
alt_u8 auto_input_changed = 0;
alt_u8 auto_input_ctr = 0;
alt_u8 auto_input_current_ctr = AUTO_CURRENT_MAX_COUNT;
@ -918,6 +920,9 @@ int main()
int init_stat, man_input_change;
// Start system timer
alt_timestamp_start();
init_stat = init_hw();
if (init_stat >= 0) {
@ -937,11 +942,10 @@ int main()
while (1) {}
}
// start timer for auto input
alt_timestamp_start();
// Mainloop
while(1) {
start_ts = alt_timestamp();
// Read remote control and PCB button status
input_vec = IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE);
remote_code = input_vec & RC_MASK;
@ -961,8 +965,8 @@ int main()
}
// Auto input switching
if (auto_input != AUTO_OFF && cm.avinput != AV_TESTPAT && !cm.sync_active && !menu_active
&& alt_timestamp() >= auto_input_timestamp && auto_input_ctr < AUTO_MAX_COUNT) {
if ((auto_input != AUTO_OFF) && (cm.avinput != AV_TESTPAT) && !cm.sync_active && !menu_active
&& (alt_timestamp() >= auto_input_timestamp + 300 * (alt_timestamp_freq() >> 10)) && (auto_input_ctr < AUTO_MAX_COUNT)) {
// Keep switching on the same physical input when set to Current input or a short time after losing sync.
auto_input_keep_current = (auto_input == AUTO_CURRENT_INPUT || auto_input_current_ctr < AUTO_CURRENT_MAX_COUNT);
@ -1001,8 +1005,8 @@ int main()
// For input linked profile loading below
auto_input_changed = 1;
// reset timer
alt_timestamp_start();
// set auto_input_timestamp
auto_input_timestamp = alt_timestamp();
}
man_input_change = parse_control();
@ -1103,9 +1107,9 @@ int main()
// record last input if it was selected manually
if (def_input == AV_LAST)
write_userdata(INIT_CONFIG_SLOT);
// Reset auto input timer when input is manually changed
// Set auto_input_timestamp when input is manually changed
auto_input_ctr = 0;
alt_timestamp_start();
auto_input_timestamp = alt_timestamp();
}
}
@ -1165,7 +1169,8 @@ int main()
strncpy(row1, avinput_str[cm.avinput], LCD_ROW_LEN+1);
strncpy(row2, " NO SYNC", LCD_ROW_LEN+1);
ui_disp_status(1);
alt_timestamp_start();// reset auto input timer
// Set auto_input_timestamp
auto_input_timestamp = alt_timestamp();
auto_input_ctr = 0;
auto_input_current_ctr = 0;
}
@ -1187,7 +1192,17 @@ int main()
}
}
usleep(300); // Avoid executing mainloop multiple times per vsync
while (alt_timestamp() < start_ts + MAINLOOP_INTERVAL_US*(TIMER_0_FREQ/1000000)) {}
// restart timer if past half-range
if (start_ts > 0x7fffffff) {
alt_timestamp_start();
if (auto_input_timestamp > start_ts)
auto_input_timestamp -= start_ts;
else
auto_input_timestamp = 0;
//printf("Timer restart\n");
}
}
return 0;

View File

@ -24,7 +24,7 @@
#include "sysconfig.h"
#define FW_VER_MAJOR 1
#define FW_VER_MINOR 05
#define FW_VER_MINOR 06
#define PROFILE_VER_MAJOR 1
#define PROFILE_VER_MINOR 05

View File

@ -536,8 +536,8 @@
<parameter name="alwaysRun" value="false" />
<parameter name="counterSize" value="32" />
<parameter name="fixedPeriod" value="false" />
<parameter name="period" value="1" />
<parameter name="periodUnits" value="USEC" />
<parameter name="period" value="0xffffffff" />
<parameter name="periodUnits" value="CLOCKS" />
<parameter name="resetOutput" value="false" />
<parameter name="snapshot" value="true" />
<parameter name="systemFrequency" value="27000000" />

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<EnsembleReport name="sys" kind="sys" version="1.0" fabric="QSYS">
<!-- Format version 21.1 842 (Future versions may contain additional information.) -->
<!-- 2023.01.31.22:14:55 -->
<!-- 2023.09.18.23:29:06 -->
<!-- A collection of modules and connections -->
<parameter name="AUTO_GENERATION_ID">
<type>java.lang.Integer</type>
<value>1675196095</value>
<value>1695068946</value>
<derived>false</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -4643,7 +4643,7 @@ parameters are a RESULT of the module parameters. -->
<slaveName>avalon_slave_debug</slaveName>
<name>pulpino_0.avalon_slave_debug</name>
<baseAddress>0</baseAddress>
<span>8192</span>
<span>32768</span>
</memoryBlock>
<memoryBlock>
<isBridge>false</isBridge>
@ -9753,7 +9753,7 @@ parameters are a RESULT of the module parameters. -->
</parameter>
<parameter name="addressSpan">
<type>java.math.BigInteger</type>
<value>8192</value>
<value>32768</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -9841,7 +9841,7 @@ parameters are a RESULT of the module parameters. -->
</parameter>
<parameter name="explicitAddressSpan">
<type>java.math.BigInteger</type>
<value>8192</value>
<value>0</value>
<derived>false</derived>
<enabled>true</enabled>
<visible>true</visible>
@ -10740,19 +10740,19 @@ the requested settings for a module instance. -->
</assignment>
<assignment>
<name>embeddedsw.CMacro.LOAD_VALUE</name>
<value>26</value>
<value>4294967294</value>
</assignment>
<assignment>
<name>embeddedsw.CMacro.MULT</name>
<value>0.000001</value>
<value>3.7037037037037036e-8</value>
</assignment>
<assignment>
<name>embeddedsw.CMacro.PERIOD</name>
<value>1</value>
<value>0xffffffff</value>
</assignment>
<assignment>
<name>embeddedsw.CMacro.PERIOD_UNITS</name>
<value>us</value>
<value>clocks</value>
</assignment>
<assignment>
<name>embeddedsw.CMacro.RESET_OUTPUT</name>
@ -10764,7 +10764,7 @@ the requested settings for a module instance. -->
</assignment>
<assignment>
<name>embeddedsw.CMacro.TICKS_PER_SEC</name>
<value>1000000</value>
<value>0</value>
</assignment>
<assignment>
<name>embeddedsw.CMacro.TIMEOUT_PULSE_OUTPUT</name>
@ -10816,7 +10816,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="period">
<type>java.lang.String</type>
<value>1</value>
<value>0xffffffff</value>
<derived>false</derived>
<enabled>true</enabled>
<visible>true</visible>
@ -10824,7 +10824,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="periodUnits">
<type>java.lang.String</type>
<value>USEC</value>
<value>CLOCKS</value>
<derived>false</derived>
<enabled>true</enabled>
<visible>true</visible>
@ -10882,7 +10882,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="periodUnitsString">
<type>java.lang.String</type>
<value>us</value>
<value>clocks</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -10890,7 +10890,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="valueInSecond">
<type>double</type>
<value>1.0E-6</value>
<value>0.0</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -10898,7 +10898,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="loadValue">
<type>java.lang.String</type>
<value>26</value>
<value>4294967294</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -10906,7 +10906,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="mult">
<type>double</type>
<value>1.0E-6</value>
<value>3.7037037037037036E-8</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>
@ -10914,7 +10914,7 @@ the requested settings for a module instance. -->
</parameter>
<parameter name="ticksPerSec">
<type>double</type>
<value>1000000.0</value>
<value>0.0</value>
<derived>true</derived>
<enabled>true</enabled>
<visible>false</visible>