Te sugiero que uses el temporizador central para la generación de retrasos …
Core Timer es el detalle de los registros del coprocesador (contar y comparar): aquí
El temporizador central (registro de conteo) incrementa cada segundo reloj del sistema. Entonces, su frecuencia de conteo es Fosc / 2. La bandera y la interrupción (si la interrupción está habilitada) cuando Count es igual a Comparar.
- ¿Debería unirme al entrenamiento de verano para sistemas integrados o debería comenzar a aprender solo?
- Sistemas Embebidos: Quiero construir un simple emisor de señal Wifi cuando la energía está conectada. ¿Qué equipo barato puedo comprar y cómo puedo configurarlo?
- ¿Qué tipo de pasantías son mejores si uno está interesado en sistemas integrados, investigación o capacitación industrial?
- ¿Cuáles son las cosas que debo saber absolutamente sobre el microprocesador y el microcontrolador para estudiar sistemas embebidos?
- ¿Cuál es el mejor instituto de formación para empotrados y IOT en Jaipur?
Deje tomar Fosc = 120 MHz, el recuento se incrementará a 60MHz.
La función de retraso simple puede ser:
#define Sys_Clock 120 * 1000 * 1000
#define Core_Timer_Clock Sys_Clock / 2 // = 60,000,000
#define CT_Us_2_Cnts (x) x * Core_Timer_Clock / 1,000,000 // = x * 60
#define CT_Ms_2_Cnts (x) x * Core_Timer_Clock / 1,000 // = x * 60,000
void delay_ms_using_core_timer (uint32 delay_ms)
{
registrarse currnt_cnts = _CP0_GET_COUNT ();
registrar delay_cnts = CT_Ms_2_Cnts (x); //// por retraso en Milli Second
// registrar delay_cnts = CT_Us_2_Cnts (x) // para retraso en Micro Second
while (_CP0_GET_COUNT <delay_cnts + currnt_cnts); // El puntero se queda aquí delay
}
La función anterior es un método que usa el temporizador central, se puede usar otro método.
Se puede encontrar más ayuda en Microchip Forum.
Gracias.