Académique Documents
Professionnel Documents
Culture Documents
EN EL CORTEX M
Una Rapsodia
M.I M.I Eduardo Ramrez Snchez
Detalles de un proyecto: Ejemplo un Termostato
Los principales pasos para el desarrollo de un proyecto
Subrutina 1
Subrutina 2
Subrutina 3
Subrutina 4
En la parte superior del lazo hay una pequea rutina que es la que lleva
el paso a travs del lazo, as que este se ejecuta a intervalos regulares.
Un reloj es mantenido como la primer tarea del lazo.
Este reloj puede ser usado como entrada a otras tareas o subrutinas para
decidir que har la subrutina en cada pasada a travs del lazo
Reloj ---TIC
Subrutina 2
Subrutina 3
Subrutina 4
Main
CCIF activa
Programe CCIF
Para que ocurra
en 50ms
TIC=TIC+1
TIC=20?
Limpiar TIC
Sub 2
Sub 3
Sub 4
Sub 5
Sub n
Sub 2
MODO THREAD MODO HANDLER
TIEMPO
Kernel en tiempo real Tarea = Hilo
Espera por evento
(2)
Tarea de Evento que esta
baja prioridad (1) esperando una
Tarea de mayor
Tiempo
prioridad
Lazo
infinito Tarea de
Lazo
(5) alta infinito
prioridad
(6)
Tarea de
baja prioridad
(7)
KERNEL
REGISTROS
Modos de Operacin del CORTEX M
Modo Thread (aplicacin) esto es: Cuando el Cortex es encendido
automticamente entra en modo thread. El modo thread es el
modo en que la mayora de los programas de la aplicacin son
ejecutados. El CPU pasa la mayor parte de su tiempo en modo
thread y entra en interrupcin solo para ejecutar excepcion de
fallas o interrupciones de los perifericos.
Modo Handler (excepcin) . El Cortex cambia a modo handler solo
cuando existe una excepcin de falla o una interrupcin de un
perifrico para atraer la atencin del CPU y este ejecute una
interrupcin (rutina de interrupcin) . Cuando retorna de una
interrupcin el CPU regresa automticamente a .modo thread.
31 3 2 1 0
Reservado FPCA ASP nPRIV
Registro de CONTROL
nPRIV = 0 privilegiado
= 1 no privilegiado
reservado 876543210
numero de excepcin IPSR
15 14 13 12 11 10
N Z C V Q IT[7:6] T reservado IT[5:0] numero de excepcin PSR
PSR = APSR + EPSR + IPSRI
1024K Flash
ROM
0X000FFFFF
0X20000000
256K
RAM 0X2003FFFF
0X40000000
Puertos de
E/S 0X400FFFFF
0XE0000000
E/S
Interna
PPB 0XE0041FFF
0XE0042000
0XFFFFFFFF
En el inicio de un Reset todas las interrupciones estn deshabilitadas. Para habilitar
cualquier interrupcin se requiere de tres pasos:
DMAIM
Los registros ENn habilitan las interrupciones
Los registros DISn deshabilitan las interrupciones
Sirve para detectar niveles o bordes
reservado
Si un bit se activa indica que se ha enviado una interrupcin al NVIC
reservado
Limpia Interrupcin
/*
* Este programa genera el cdigo 1010,1001,0101, 0110 en el puerto A
* y cada vez que hay una interrupcin en el pin PJ0 cambia de estado elled de PN0
*/
#define PORTADAT (*((volatile unsigned int*)0x400583FC))
#define PORTADIR (*((volatile unsigned int*)0x40058400))
#define PORTADEN (*((volatile unsigned int*)0x4005851C)) //*
#define RCGCGPIO (*((volatile unsigned int*)0x400FE608))
#define PORTJDAT (*((volatile unsigned int*)0x400683FC))
#define PORTJDIR (*((volatile unsigned int*)0x40060400))
#define PORTJDEN (*((volatile unsigned int*)0x4006051C)) //*
#define PORTJPUR (*((volatile unsigned int*)0x40060510))
#define PORTNDAT (*((volatile unsigned int*)0x400643FC))
#define PORTNDIR (*((volatile unsigned int*)0x40064400))
#define PORTNDEN (*((volatile unsigned int*)0x4006451C))
#define NVIC_EN1_R (*((volatile unsigned int*)0xE000E104))
#define NVIC_PRI0_R (*((volatile unsigned int*)0xE000E400))
#define PORTJIS (*((volatile unsigned int*)0x40060404))
#define PORTJIBE (*((volatile unsigned int*)0x40060408))
#define PORTJIEV (*((volatile unsigned int*)0x4006040C))
#define PORTJIM (*((volatile unsigned int*)0x40060410))
#define PORTJICR (*((volatile unsigned int*)0x4006041C))
}
/* retarda n milisegundos (16 MHz CPU clock) */
void delayMs(int n)
{
int i, j;
for(i = 0 ; i < n; i++)
for(j = 0; j < 3180; j++)
{} /* no hacer nada por 1 ms */
}
void intj_r(void)
{