Originally Posted by crazyc
Well, I reverted it but it sets a flag in interrupt_start if main_state is WRITE_SECTOR and cur_live.state is WRITE_BYTE. Then in live_run when cur_live.state is WRITE_BYTE_DONE it calls interrupt_start and returns.

Implementing that deffo seems to fix the problems I was seeing, and it makes sense that it would work this way as the datasheet says that the only way of terminating a write multiple is by a foced interrupt.