mirror of
https://github.com/marqs85/ossc
synced 2025-04-09 22:56:34 +03:00
fix lockup issue due to counter reaching max value
This commit is contained in:
parent
6ae321a9ff
commit
1ba02417d5
@ -1 +1 @@
|
||||
Subproject commit b11dd7718e6d367cbaef8a362ce206510fd87ed0
|
||||
Subproject commit dfb0af0ed3b4e9e72e444eba2b1c149b5adad2cc
|
@ -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
@ -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;
|
||||
|
@ -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
|
||||
|
Binary file not shown.
4
sys.qsys
4
sys.qsys
@ -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" />
|
||||
|
34
sys.sopcinfo
34
sys.sopcinfo
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user