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) ; Switch_HDMITX_Bank(1) ;
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB1,pAVIInfoFrame->pktbyte.AVI_DB[0]); for(i = 0,ucData = 0; i < AVI_INFOFRAME_LEN ; i++)
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++)
{ {
HDMITX_WriteI2C_Byte(REG_TX_AVIINFO_DB1+i,pAVIInfoFrame->pktbyte.AVI_DB[i]);
ucData -= pAVIInfoFrame->pktbyte.AVI_DB[i] ; ucData -= pAVIInfoFrame->pktbyte.AVI_DB[i] ;
} }
ErrorF("SetAVIInfo(): ") ; ErrorF("SetAVIInfo(): ") ;
@ -3386,13 +3374,9 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
} }
Switch_HDMITX_Bank(1) ; 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++) 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 -= pAudioInfoFrame->pktbyte.AUD_DB[i] ;
} }
ucData -= 0x80+AUDIO_INFOFRAME_VER+AUDIO_INFOFRAME_TYPE+AUDIO_INFOFRAME_LEN ; 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_HB01, pHDRInfoFrame->info.Ver);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pHDRInfoFrame->info.Len); 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++) 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 -= pHDRInfoFrame->pktbyte.HDR_DB[i] ;
} }
ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ; ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ;
@ -3458,7 +3440,7 @@ SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame)
} }
Switch_HDMITX_Bank(1) ; 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] ; ucData -= pSPDInfoFrame->pktbyte.SPD_DB[i] ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_SPDINFO_PB1+i,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_PROGRESSIVE 200
#define MIN_LINES_INTERLACED 400 #define MIN_LINES_INTERLACED 400
#define STATUS_TIMEOUT_US 25000 #define STATUS_TIMEOUT_US 25000
#define MAINLOOP_INTERVAL_US 10000
#define PCNT_TOLERANCE 50 #define PCNT_TOLERANCE 50
#define HSYNC_WIDTH_TOLERANCE 8 #define HSYNC_WIDTH_TOLERANCE 8
@ -910,7 +911,8 @@ int main()
alt_u32 input_vec; 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_changed = 0;
alt_u8 auto_input_ctr = 0; alt_u8 auto_input_ctr = 0;
alt_u8 auto_input_current_ctr = AUTO_CURRENT_MAX_COUNT; alt_u8 auto_input_current_ctr = AUTO_CURRENT_MAX_COUNT;
@ -918,6 +920,9 @@ int main()
int init_stat, man_input_change; int init_stat, man_input_change;
// Start system timer
alt_timestamp_start();
init_stat = init_hw(); init_stat = init_hw();
if (init_stat >= 0) { if (init_stat >= 0) {
@ -937,11 +942,10 @@ int main()
while (1) {} while (1) {}
} }
// start timer for auto input
alt_timestamp_start();
// Mainloop // Mainloop
while(1) { while(1) {
start_ts = alt_timestamp();
// Read remote control and PCB button status // Read remote control and PCB button status
input_vec = IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE); input_vec = IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE);
remote_code = input_vec & RC_MASK; remote_code = input_vec & RC_MASK;
@ -961,8 +965,8 @@ int main()
} }
// Auto input switching // Auto input switching
if (auto_input != AUTO_OFF && cm.avinput != AV_TESTPAT && !cm.sync_active && !menu_active 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) { && (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. // 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); 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 // For input linked profile loading below
auto_input_changed = 1; auto_input_changed = 1;
// reset timer // set auto_input_timestamp
alt_timestamp_start(); auto_input_timestamp = alt_timestamp();
} }
man_input_change = parse_control(); man_input_change = parse_control();
@ -1103,9 +1107,9 @@ int main()
// record last input if it was selected manually // record last input if it was selected manually
if (def_input == AV_LAST) if (def_input == AV_LAST)
write_userdata(INIT_CONFIG_SLOT); 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; 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(row1, avinput_str[cm.avinput], LCD_ROW_LEN+1);
strncpy(row2, " NO SYNC", LCD_ROW_LEN+1); strncpy(row2, " NO SYNC", LCD_ROW_LEN+1);
ui_disp_status(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_ctr = 0;
auto_input_current_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; return 0;

View File

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

View File

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

View File

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