A ver me parece que te estás liando con algo muy simple..
El hook, lo has de poner justo debajo de donde ponga ldr rx,.direccion (solo poner bx rx)
Y luego vas al pointer de esa direccion (esta mas abajo del ldr, de hecho te indica en el mismo ldr la ubicacion de ese puntero..) y lo cambias por el puntero de tu rutina.
En tu rutina cargas una variable/flag/byte boleano y miras si es 0.
Si es 0, cargas el valor que tenia antes ldr rx, y la instruccion que borraste para meter el bx rx.
Si no, pones el ratio a 0.
Para finalizar llamas a la funcion justo debajo del bx, con un simple bx r10, o algun registro de I/O vacio.