PDP11: Fix PCLK device to properly behave with a 0 value interval (65536)
Also migrate to usecs remaining API to simplify producing the remaining interval value.
This commit is contained in:
parent
d456bac8fc
commit
dbed84c370
1 changed files with 3 additions and 1 deletions
|
@ -274,6 +274,8 @@ else {
|
||||||
uint32 delay = DMASK & ((pclk_csr & CSR_UPDN) ? (DMASK + 1 - val) : val);
|
uint32 delay = DMASK & ((pclk_csr & CSR_UPDN) ? (DMASK + 1 - val) : val);
|
||||||
int32 rv;
|
int32 rv;
|
||||||
|
|
||||||
|
if (delay == 0)
|
||||||
|
delay = DMASK + 1;
|
||||||
rv = CSR_GETRATE (pclk_csr); /* get rate */
|
rv = CSR_GETRATE (pclk_csr); /* get rate */
|
||||||
sim_activate_after (&pclk_unit, xtim[rv] * delay); /* schedule interrupt */
|
sim_activate_after (&pclk_unit, xtim[rv] * delay); /* schedule interrupt */
|
||||||
}
|
}
|
||||||
|
@ -288,7 +290,7 @@ if (!sim_is_active (&pclk_unit))
|
||||||
return pclk_ctr;
|
return pclk_ctr;
|
||||||
|
|
||||||
rv = CSR_GETRATE (pclk_csr); /* get rate */
|
rv = CSR_GETRATE (pclk_csr); /* get rate */
|
||||||
val = (uint32)((sim_activate_time (&pclk_unit) / sim_timer_inst_per_sec ()) * (1000000 / xtim[rv]));
|
val = (uint32)((sim_activate_time_usecs (&pclk_unit) / xtim[rv]));
|
||||||
val &= DMASK;
|
val &= DMASK;
|
||||||
if (pclk_csr & CSR_UPDN)
|
if (pclk_csr & CSR_UPDN)
|
||||||
val = DMASK + 1 - val;
|
val = DMASK + 1 - val;
|
||||||
|
|
Loading…
Add table
Reference in a new issue