Arquitectura Cortex M3

I. ARQUITECTURA ARM CORTEX‐M3:  I.1. Introducción:  Las soluciones System‐on‐chip basadas en procesadores embebidos ARM 

Views 154 Downloads 69 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

I. ARQUITECTURA ARM CORTEX‐M3:  I.1. Introducción:  Las soluciones System‐on‐chip basadas en procesadores embebidos ARM están  pensadas para llegar a diferentes sectores de mercado por lo que deben de dar  cobertura a gran cantidad de posibles aplicaciones.   Por ello ARM tiene varias familias de procesadores basadas en la arquitectura  ARMv7, que se diferencian según las aplicaciones a las que están orientadas:    

Cortex‐A, para aplicaciones que corren en sistemas operativos.  Cortex‐R, para sistemas en tiempo real.  Cortex‐M, para aplicaciones con microcontroladores. 

A finales del 2005 ARM publica la primera versión del Manual de Referencia  de la  familia Cortex‐M3 ó Cortex‐M3 Technical Reference Manual, comenzando así la  comercialización de la nueva familia de procesadores.  El procesador Cortex‐M3 es el primer procesador basado en la arquitectura  ARMv7‐M que ha sido específicamente diseñado para lograr un alto rendimiento en la  relación potencia‐coste para aplicaciones embebidas.  El núcleo del procesador (core) del Cortex‐M3 está basado en una arquitectura de  bus Harvard (memoria de datos y de programa separadas) con 3 niveles en la ejecución  de instrucciones ó 3‐Stage Pipeline. El core incorpora internamente un multiplicador  (de ciclo único) y un divisor con una eficiencia de DMIPS/MHz (Millones de  instrucciones sin coma flotante por segundo).  Además el procesador Cortex‐M3 implementa el set de instrucciones Thumb‐2 que  combinada con características como el almacenamiento de datos no alineados o la  manipulación a nivel de bit, consigue funcionalidades de 32 bits con un coste de  rendimiento equivalente al de los dispositivos actuales de 16 y 8 bits.  I.1.1. Características principales:   Arquitectura ARMv7‐M, optimizada para microcontroladores y  aplicaciones de bajo coste.   Set de instrucciones Thumb‐2. Se consigue una mejor densidad de  código y mayor rapidez de ejecución del mismo.       

 Estructura jerárquica de los periféricos integrados:  o Núcleo del procesador (core) CM3:   Arquitectura de bus Harvard (memorias de programa y de  datos separadas).   Ejecución de instrucciones con 3‐stage pipeline con  branch speculation.   Controlador de interrupciones vectoriales anidadas  (NVIC).  o Unidad de protección de memoria (MPU):   Unidad de protección de memoria (MPU). Componente  opcional. Separa las tareas en ejecución y protege los  datos.   8 Regiones de protección de memoria divididas a su vez  en otras 8 subregiones.   Las regiones pueden estar comprendidas desde 32 bytes  hasta los 4 Gigabytes de memoria direccionables.  o Embedded Trace Macrocell (ETM):   Componente opcional. Reproduce una traza de  instrucciones en tiempo real.  o Watchpoints y unidad de traza (DWT)   Sirve para implementar breakpoints hardware y  proporcionar estadísticas de la ejecución de  instrucciones.  o Flashpatch y unidad de breakpoint (FPB)   Puede implementar hasta 6 breakpoints en el programa y  2 breakpoints de datos (detienen el programa al  referencia a una determinada variable)  o Puerto de depuración (SW‐DP ó SWJ‐DP)   Depuración configurable a través de puerto serie ó  interface JTAG.   

o Multiplicadores de ciclo único e instrucciones de división   Multiplicaciones de 32 bits en un único ciclo.   Operaciones de división con y sin signo entre 2 y 12 ciclos.  o Mapa de memoria preconfigurado.  o 4 Gigabytes de memoria direccionables.  o Manipulación a nivel de bits en bit‐banding:   Acceso directo a datos de tipo bit.   2 Regiones de bit‐banding de 1 Megabyte cada una.   Las operaciones a nivel de bit no pueden ser  interrumpidas por las actividades de otro bus.  o Almacenamiento y acceso a datos no alineados:   Almacenamiento continuo de datos de diferente tamaño.   Acceso a datos en un único ciclo de acceso del core.  o Modos sleep integrados:   Modo sleep now para pasar inmediatamente a modo de  bajo consumo.   Modo sleep exit para pasar a bajo consumo después de  atender a una interrupción.   Capacidad de poner en power saving (modo de bajo  consumo tras transcurrir un determinado tiempo) a otros  componentes del sistema.    I.1.2. Principales ventajas:   Alta funcionalidad  o 1.25 DMIPS/MHz  o El uso del set de instrucciones Thumb‐2 proporciona una mejor  densidad de código y mayor rapidez de ejecución que en otras  familias o tecnologías. 

 Bajo coste de manufactura por el alto nivel de integración, menor  requerimiento de memoria y reducción de pines para reducir el coste  del encapsulado.   Eficiencia energética.   Mayor facilidad para mantenerse mucho tiempo en el mercado:  o Facilidad de diseño (NVIC, ETM, MPU, depuración integrada).  o Facilidad de desarrollo del software (set de instrucciones Thumb‐ 2, NVIC).   Buena elección para migrar diseños basados en 8 ó 16 bits a 32 bits, ya  que el modelo de programación es compatible con la arquitectura  tradicional de ARM  I.1.3.  Ejecución de instrucciones (execution pipeline stages):  El núcleo del procesador ejecuta las instrucciones en tres pasos: 

       

  Cuando una instrucción en ejecución pasa del primer al segundo paso de ejecución, la  siguiente instrucción pasa al primero y así continuamente en los tres pasos. De esta  manera se consigue acelerar la ejecución de instrucciones.  A continuación se describen los tres procesos:   Fe: Es llevado acabo por la prefetch unit del núcleo del procesador. En este paso  el core carga la instrucción de donde corresponda.   De: Éste es el paso en el que la instrucción se decodifica. Si en este paso la  instrucción decodificada resulta ser un salto condicional se produce un branch  o bifurcación, en donde se ha de elegir la siguiente instrucción a ejecutar (la  que debe entrar en el primer paso).  Lo complicado es saber cuál es esta  instrucción cuando aún no se ha ejecutado la anterior. Para ello el procesador  usa una técnica llamada branch prediction ó branch speculation, que consiste  en una circuitería que “predice” la siguiente instrucción a ejecutar. Si resulta  ser correcta el proceso sigue con normalidad, si no se tendrá que pasar por  todo el proceso de nuevo, aumentando el tiempo de ejecución.   Ex: Ejecución de la instrucción. Tras esta fase se conoce si la dirección cargada  tras el branch era correcta o no.  Ésta no pretende ser una explicación detallada del proceso de ejecución de  instrucciones, pues ese no es el tema central del TFC, ni del capítulo, pero basta para  hacerse una idea del proceso.     I.2. Modelo del programador (Programmer’s model):    El procesador lleva implementada la arquitectura ARMv7. Incluye el set de  instrucciones Thumb‐2 de 16 y 32 bits, pero no puede ejecutar instrucciones ARM.  Para mayor información de la arquitectura ARMv7‐M ó del set de instrucciones  Thumb‐2 consultar el documento ARMv7‐M Architecture Reference Manual en la  página web de ARM.  I.2.1. Modos de funcionamiento:   

El procesador soporta dos modos de operación:  

Threat mode: Entra en este modo tras un reset, aunque también  puede entrar como resultado de un retorno de excepción. El  código puede correr en este modo tenga o no privilegios  (privileged code y unprivileged code respectivamente). 



 

 

Handler mode: Entra en este modo como resultado de una  excepción. En este modo todo el código es privilegiado  (privileged code). 

El procesador, además,  puede operar en 2 estados de operación:  

Thumb state: ejecución normal, corriendo instrucciones thumb  de 16 y 32 bits. 



Debug state: Cuando está depurando. 

El procesador soporta los siguientes tipos de datos:  

Palabras de 32 bits (words). 



Medias palabas de 16 bits (halfwords). 



Bytes (8 bits). 

  I.2.2. Acceso privilegiado y no privilegiado:    El código puede ser ejecutado como privilegiado o no privilegiado. Si se ejecuta  como no privilegiado no se tiene acceso a algunos recursos:  

Uso de algunas instrucciones (como CPS, que sirve para el manejo de los  registros de enmascaramiento de interrupciones). 



Acceder a la mayoría de registros des “espacio de control del sistema”  (System Control Space, SCS). 

  El modo Thread es privilegiado tras el reset, pero puede cambiarse a no  privilegiado cambiando el bit de control CONTROL[0] (registro de control de propósito  especial. Tiene 2 bits, uno indica el modo de ejecución de las instrucciones, y el otro  cómo se usará la pila); con la instrucción MSR.    En el Thread mode no se puede cambiar la ejecución del código a privilegiado.  Para ello primero hay que pasar a Handler mode.           

I.2.3. Registros:   

El procesador tiene los siguientes registros de 32 bits:  R0  R1   R2  R3  R4  R5  R6  R7  R8  R9  R10  R11  R12  R13 (SP)  R14 (LR)  R15 (PC)  xPSR 

R0 – R7: Low registers.   R8 – R12: High registers.  R0 – R12: Registros de propósito general.  R13: Puntero de pila. Puede contener la  dirección sp_main (cuando se ejecuta privileged code) ó  sp_process (cuando se ejecuta unprivileged code).  R14: Link register.   R15: Contador de programa (Program counter).  xPSR: Special purpose program status register.       

  A continuación se detallará el uso de los registros mencionados:   Low registers: Registros del R0 al R7. Son accesibles con todas las  instrucciones que los especifiquen.   High registers: Registros del R8 al R12. Sólo son accesibles a través de  instrucciones de 32 bits (no de 16 bits).   Stack pointer (SP): El registro R13 es usado como puntero de pila. En  Handler mode contiene SP_main (código privilegiado), en Thread mode  puede contener SP_main ó SP_process (código no privilegiado).   Link register (LR): El registro R14 recibe la dirección que retorna el  contador de programa cuando ejecuta las instrucciones de salto BL  (Branch with link) ó BLX (Branch with link and exchange). También  puede usarse como retorno de excepción. Si no se está usando con  nada de lo anterior, puede usarse como registro de propósito general.   Program counter (PC): El registro R15 es el contador de programa 

 Special purpose program status register (xPSR): El registro xPSR  está  formado a su vez por 3 registros a los que se puede acceder de forma  individual (APSR, IPSR, EPSR): 

  o APSR (Aplication PSR): Contiene los flags de condición. Antes de  entrar una excepción el procesador salva los flags de condición en la  pila.  Para acceder a éste registro se usan las instrucciones MSR y  MRS:  N: Resultado negativo o menor que (1), ó positivo o mayor que  (0).  Z: Resultado igual a 0 (1), ó distinto de 0 (0).  C: Hay carry ó borrow (1), o no lo hay (0).  V: Hay overflow (1), o no lo hay (0).  Q: Flag de saturación.  o IPSR (Interrupt PSR): Contiene la Interrupt Service Routine (ISR).  Número de la interrupción que está activada.  o EPSR (Execution PSR): El registro EPSR no es directamente accesible.  2 Eventos pueden identificarlo:  Una interrupción ocurrida durante las instrucciones durante las  instrucciones LDS ó STM.  Ejecución de una instrucción if‐then.   

 

El registro EPSR tiene dos campos solapados:  

Interruptable‐Continuable Instruction (ICI): Mantiene la  información requerida en instrucciones de carga ó  almacenamiento múltiple desde el momento en el que ocurre  la interrupción. 



If‐then (IT): Contiene los bits de estado para la ejecución de la  instrucción if‐then. 

  Como los campos ICI e IT están solapados, las cargas ó almacenamientos  múltiples dentro de un bloque if‐then no pueden ser interrupt‐continued.    I.2.4.  Formatos de memoria:    El procesador ve la memoria como una serie lineal de bytes numerados en  orden ascendente desde 0.     El procesador puede acceder a las palabras de datos en memoria en formato  Little endian (por defecto en procesadores ARM) ó big endian. En el formato Little  endian el byte de menor dirección en la palabra, es el byte menos significativo de la  palabra. El procesador tiene un pin de configuración (BIGEND) para configurar el  modo. Éste pin es sampleado tras un reset. Cualquier cambio en dicho pin después del  reset es ignorado.    El acceso al System Control Space (SCS), es siempre little endian. Lo mismo  ocurre con el acceso al Private Peripheral Bus (PPB).    I.2.5. Set de instrucciones:    El procesador de la familia Cortex‐M3 puede ejecutar las siguientes instrucciones  Thumb‐2 de 16 y 32 bits:   

Instrucciones de 16 bits:    Operation  Add register value and C flag to register value  Add immediate 3‐bit value to register  Add immediate 8‐bit value to register  Add low register value to low register value  Add high register value to low or high register value  Add 4* (immediate 8‐bit value) with PC to register  Add 4* (immediate 8‐bit value) with SP to register  Add 4* (immediate 7‐bit value) to SP  Bitwise AND register values  Arithmetic shift right by immediate number  Arithmetic shift right by number in register  Branch conditional  Branch unconditional  Bit clear  Software breakpoint 

Assembler  ADC ,   ADD , , #  ADD , #  ADD , ,   ADD ,   ADD , PC, # *  4  ADD , SP, # *  4  ADD SP, # * 4  AND ,   ASR , , #  ASR ,   B   B   BIC ,   BKPT  

Branch with link  Branch with link and exchange  Branch and exchange  Compare not zero and branch  Compare zero and branch  Compare negation of register value with another register value  Compare immediate 8-bit value  Compare registers  Compare high register to low or high register  Change processor state  Copy high or low register value to another high or low register  Bitwise exclusive OR register values  Condition the following instruction Condition the following two instructions Condition the following three instructions Condition the following four instructions  Multiple sequential memory word loads  Load memory word from base register address + 5-bit immediate offset  Load memory word from base register address + register offset  Load memory word from PC address + 8-bit immediate offset  Load memory word from SP address + 8-bit immediate offset  Load memory byte [7:0] from register address + 5-bit immediate offset  Load memory byte [7:0] from register address + register offset  Load memory halfword [15:0] from register address + 5-bit immediate offset  Load halfword [15:0] from register address + register offset  Load signed byte [7:0] from register address + register offset  Load signed halfword [15:0] from register address + register offset  Logical shift left by immediate number  Logical shift left by number in register  Logical shift right by immediate number  Logical shift right by number in register  Move immediate 8-bit value to register  Move low register value to low register  Move high or low register value to high or low register  Multiply register values  Move complement of register value to register  Negate register value and store in register  No operation  Bitwise logical OR register values  Pop registers from stack  Pop registers and PC from stack  Push registers onto stack  Push LR and registers onto stack  Reverse bytes in word and copy to register  Reverse bytes in two halfwords and copy to register  Reverse bytes in low halfword [15:0], sign-extend, and copy to register  Rotate right by amount in register  Subtract register value and C flag from register value  Send event  Store multiple register words to sequential memory locations  Store register word to register address + 5-bit immediate offset  Store register word to register address  Store register word to SP address + 8-bit immediate offset  Store register byte [7:0] to register address + 5-bit immediate offset  Store register byte [7:0] to register address  Store register halfword [15:0] to register address + 5-bit immediate offset 

BL   BLX   BX   CBNZ ,  CBZ ,  CMN ,   CMP , #  CMP ,   CMP ,   CPS ,   CPY   EOR ,   IT IT IT IT   LDMIA !,   LDR , [, # * 4]  LDR , [, ]  LDR , [PC, # * 4]  LDR, , [SP, # * 4]  LDRB , [, #]  LDRB , [, ]  LDRH , [, # * 2]  LDRH , [, ]  LDRSB , [, ]  LDRSH , [, ]  LSL , , #  LSL ,   LSR , , #  LSR ,   MOV , #  MOV ,   MOV ,   MUL ,   MVN ,   NEG ,   NOP   ORR ,   POP   POP   PUSH   PUSH   REV ,   REV16 ,   REVSH ,   ROR ,   SBC ,   SEV   STMIA !,   STR , [, # * 4]  STR , [, ]  STR , [SP, # * 4]  STRB , [, #]  STRB , [, ]  STRH , [, # * 2] 

Store register halfword [15:0] to register address + register offset  Subtract immediate 3-bit value from register  Subtract immediate 8-bit value from register value  Subtract register values  Subtract 4 (immediate 7-bit value) from SP  Operating system service call with 8-bit immediate call code  Extract byte [7:0] from register, move to register, and sign-extend to 32 bits  Extract halfword [15:0] from register, move to register, and sign-extend to 32 bits  Test register value for set bits by ANDing it with another register value  Extract byte [7:0] from register, move to register, and zero-extend to 32 bits  Extract halfword [15:0] from register, move to register, and zero-extend to 32 bits  Wait for event  Wait for interrupt 

STRH , [, ]  SUB , , #  SUB , #  SUB , ,   SUB SP, # * 4  SVC   SXTB ,   SXTH ,   TST ,   UXTB ,   UXTH ,   WFE   WFI  

 

Instrucciones de 32 bits:    Operation 

Assembler 

Add register value, immediate 12-bit value, and C bit 

ADC{S}.W , , # 

Add register value, shifted register value, and C bit 

ADC{S}.W , , {, } 

Add register value and immediate 12-bit value 

ADD{S}.W , , # 

Add register value and shifted register value  Add register value and immediate 12-bit value 

ADD{S}.W , {, } 

Bitwise AND register value with immediate 12-bit value 

AND{S}.W , , # 

Bitwise AND register value with shifted register value  Arithmetic shift right by number in register  Conditional branch  Clear bit field  Insert bit field from one register value into another  Bitwise AND register value with complement of immediate 12-bit value  Bitwise AND register value with complement of shifted register value  Branch with link  Branch with link (immediate)  Unconditional branch  Clear exclusive clears the local record of the executing processor that an address has had a request for an exclusive access.  Return number of leading zeros in register value  Compare register value with two’s complement of immediate 12-bit value  Compare register value with two’s complement of shifted register value  Compare register value with immediate 12-bit value  Compare register value with shifted register value  Data memory barrier  Data synchronization barrier 

AND{S}.W , , Rm>{, } 

Exclusive OR register value with immediate 12-bit value 

EOR{S}.W , , # 

Exclusive OR register value with shifted register value  Instruction synchronization barrier 

EOR{S}.W , , {, } 

ADDW.W , , # 

ASR{S}.W , ,   B{cond}.W   BFC.W , #, #  BFI.W , , #, #  BIC{S}.W , , #  BIC{S}.W , , {, }  BL   BL   B.W   CLREX   CLZ.W ,   CMN.W , #  CMN.W , {, }  CMP.W , #  CMP.W , {, }  DMB   DSB  

ISB  

Load multiple memory registers, increment after or decrement before Memory word from base register address + immediate 12-bit offset  Memory word to PC from register address + immediate 12-bit offset  Memory word to PC from base register address immediate 8-bit offset, postindexed  Memory word from base register address immediate 8-bit offset, postindexed  Memory word from base register address immediate 8-bit offset, preindexed  Memory word to PC from base register address immediate 8-bit offset, preindexed  Memory word from register address shifted left by 0, 1, 2, or 3 places  Memory word to PC from register address shifted left by 0, 1, 2, or 3 places  Memory word from PC address immediate 12-bit offset  Memory word to PC from PC address immediate 12-bit offset  Memory byte [7:0] from base register address + immediate 12-bit offset  Memory byte [7:0] from base register address immediate 8-bit offset, postindexed  Memory byte [7:0] from register address shifted left by 0, 1, 2, or 3 places  Memory byte [7:0] from base register address immediate 8-bit offset, preindexed  Memory byte from PC address immediate 12-bit offset  Memory doubleword from register address 8-bit offset 4, preindexed  Memory doubleword from register address 8-bit offset 4, postindexed  Load register exclusive calculates an address from a base register value and an immediate offset, loads a word from memory, writes it to a register  Load register exclusive halfword calculates an address from a base register value and an immediate offset, loads a halfword from memory, writes it to a register  Load register exclusive byte calculates an address from a base register value and an immediate offset, loads a byte from memory, writes it to a register  Memory halfword [15:0] from base register address + immediate 12-bit offset  Memory halfword [15:0] from base register address immediate 8-bit offset, preindexed  Memory halfword [15:0] from base register address immediate 8-bit offset, postindexed  Memory halfword [15:0] from register address shifted left by 0, 1, 2, or 3 places  Memory halfword from PC address immediate 12-bit offset  Memory signed byte [7:0] from base register address + immediate 12-bit offset  Memory signed byte [7:0] from base register address immediate 8-bit offset, postindexed  Memory signed byte [7:0] from base register address immediate 8-bit offset, preindexed  Memory signed byte [7:0] from register address shifted left by 0, 1, 2, or 3 places  Memory signed byte from PC address immediate 12-bit offset 

LDM{IA|DB}.W {!}, LDR.W , [, #]  LDR.W PC, [, #]  LDR.W PC, [Rn], #