Gracias por las ideas, les comento como lo logre por si a alguien mas le sirve:
dentro de la interrupcion externa, coloque un while, para que no salga de la interrupcion mientras el boton este presionado, dentro del while hay un delay de 1ms, y cuando termina el delay se le suma 1 a una variable auxiliar, en cuanto el boton se suelte, checo cuantas veces ocurrio el ciclo, que es de 1 ms, y con eso conozco el tiempo que duro el boton presionado
felicidades por tu solución
hay flujos que te permitirían librar el processor tanto de el interrupt que del while dentro de el
si usas interrupciones y lo que presiona el boton y un humano y no una maquina jejejej (lo digo por lo de la velocidad entre down-up)
recuerda que la interrupción entra solo cuando cambia el estado no todo el tiempo que lo tienes presionado
1)entra interrupt boton (down)
2)x=tiempo contador
3)sales de la interrupción
el processor es libre de hacer otras cosas
3)entra interrupt boton (up)
4)y=tiempo contador
5)sales de la interrupción
y al final y-x=tiempo de presión del boton
el contador tiene que estar incrementando sobre algun timer
si usas un pooling del boton pasa lo mismo cada ves
miras el estado del boton cuando el boton deja de estar presionado
lees el contador y tienes tu resultado.
es buena practica evitar introducir código en las interrupciones y meno aun meter ciclos
saludos y felicidades