it does look to me like the ADC timer period is set to 61ms on TT:
[ https://github.com/tehn/mod/blob/master/teletype/main.c#L2279 ]
but i should add that i didn’t directly contribute to any eurorack source code and am only inferring from what i see in github. the comments haven’t changed so i assume that 1 heartbeat tick still equals 1 ms, but maybe the core clock was changed and comments weren’t updated. (actually looking at board conf files, seems like maybe core clock was bumped down to 6Mhz instead of 12Mhz?? then heartbeat timer interval is actually 2ms, because the timer reload value has not changed. but i await correction.)
anyway my point is a little different. my point was that if there is a lot of processing in any of the soft-timer callback functions, enough to exceed 1ms (not sure how likely this is, probably not likely at all really,) then ADC could be pushed to the next heartbeat after clock or delay servicing. which could do weird things if you do something on the ext clock or metro callback that is dependent on value from ADC. (in a really bad edge case, you might never see the ADC value change, because a new hard-timer interrupt would come in before you get to processing the last ADC soft-timer calback, but you’ve already processed the clock-polling soft-timer callback.)
but to answer your question: no, ADC reading in itself shouldn’t be a slow operation. it’s reading 16 bits over SPI with a 20Mhz clock [ https://github.com/tehn/mod/blob/master/skeleton/init.c#L135 ], plus toggling chip selects and placing the results in memory. so like 1µs or something.
but, i don’t know exactly what else is being done in the ADC polling callback [ https://github.com/tehn/mod/blob/master/teletype/main.c#L391 ]. maybe tele_set_val()
is potentially heavy.
i don’t quite follow why you would necessarily want ADC to be processed on every tick. i mean sure, in theory its good to do everything fast… but on aleph we allowed that interval to be arbitrarily throttled according to the user’s judgement, because it might propagate through the operator network and set off a lot of things, maybe triggering DSP updates and other blocking/peripheral stuff. i think there is similar potential in the teletype, so it maybe makes sense to limit polling to 50ms or something to accommodate the worst cases.
… ah wait… i take some of that back. i think all soft timers will be processed eventually if they are successfully added to the event queue. a hard timer interrupt can’t directly preempt soft timer processing. but it can max out the event queue, which looks similar.
i think all things based on this soft-timer system would be well served by having an obvious indicator when the event queue is maxed. lord knows this can happen on the aleph if you do too much stuff in a bees patch. maybe it’s not a problem in TT.