|
|
| (No se muestran 17 ediciones intermedias del mismo usuario) |
| Línea 1: |
Línea 1: |
| | Embedded Systems<br/> |
| | [[C2 - Conceptos Fundamentales]]<br/> |
| | [[C4 - Lógica Digital]]<br/> |
| | [[C5 - Introducción a C]]<br/> |
| | [[C6 - Microcontroller Ports]]<br/> |
| | [[C7 - Design and Development Process]]<br> |
| | [[C10 - Finite State Machine]]<br> |
| | [[C11 - UART: The serial interface]]<br> |
| | [[C12 - Interrupts]]<br> |
| | <br/> |
| | |
| Información Complementaria<br/> | | Información Complementaria<br/> |
| <br/> | | <br/> |
| Línea 4: |
Línea 15: |
| <br/> | | <br/> |
| [http://www.utm.mx/~fsantiag/Micros.htm http://www.utm.mx/~fsantiag/Micros.htm]<br/> | | [http://www.utm.mx/~fsantiag/Micros.htm http://www.utm.mx/~fsantiag/Micros.htm]<br/> |
| <br/>
| |
| [[File: arm_cortex_m.gif]]<br/>
| |
| Imagen Cortex-M ARM (CPU, Memoria, Perifericos, ...)<br/>
| |
| <br/>
| |
| *Arquitectura Harvard. ICode bus conecta con la ROM y System bus conecta con la RAM
| |
| *NVIC se encarga d elas interrupciones
| |
| *Algunos perifericos internos se conectan directamente con el procesador por el bus PPB
| |
| <br/> | | <br/> |
| Imagen CPU Cortex-M4 ARM<br/> | | Imagen CPU Cortex-M4 ARM<br/> |
| Línea 29: |
Línea 33: |
| *Decodificación | | *Decodificación |
| *Ejecución | | *Ejecución |
| Tipos de memoria:
| |
| *Memoria de Código
| |
| **Es en la que se almacena el programa
| |
| **Es no volátil
| |
| **Es la comunmente llamada ROM, y la tecnologia flash es una de las utilizadas para almacenar la ROM
| |
| ***La memoria flash se borra mediante impulsos eléctricos. Es una sucesora de la EEPROM
| |
| *Memoria de Datos
| |
| **Es la que almacena las variables del programa
| |
| **Es volátil
| |
| **Es la comunmente llamada RAM. La tecnologia que se utiliza para los microcontroladores es la SRAM
| |
| **También nos podemos encontrar con microcontroladores que ademas tienen memoria EEPROM para guardar datos cuando se corta la electricidad
| |
| Sistema de memoria:
| |
| *Arquitectura Von Neumann
| |
| **La Memoria de Código y la de Datos comparten el Bus hacia la CPU
| |
| *Arquitectura Harvard
| |
| **Hay un bus para la Memoria de Código y otro bus para la Memori de datos
| |
| <br/>
| |
| <br/>
| |
| <b>Tema 2</b><br/>
| |
| <br/>
| |
| <b>Memoria microcontroladores</b><br/>
| |
| <br/>
| |
| [http://es.wikipedia.org/wiki/Microcontrolador#Memoria Tipos de memoria]<br/>
| |
| [http://es.wikipedia.org/wiki/SRAM Memoria RAM (SRAM)]<br/>
| |
| [http://es.wikipedia.org/wiki/EEPROM Memoria ROM (EEPROM)]<br/>
| |
| [http://es.wikipedia.org/wiki/Memoria_flash Memoria ROM (Flash)]<br/>
| |
| <br/>
| |
| <b>Tipos de I/O</b><br/>
| |
| *Parallel - binary data are available simultaneously on a group of lines
| |
| *Serial - binary data are available one bit at a time on a single line
| |
| *Analog - data are encoded as an electrical voltage, current, or power
| |
| *Time - data are encoded as a period, frequency, pulse width, or phase shift
| |
| <br/>
| |
| <br/>
| |
| <b>ISA (Instruction Set Architecture)</b><br/>
| |
| <br/>
| |
| <b>[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/CHDBIBGJ.html Registros ARM ISA]</b><br/>
| |
| Recursos<br/>
| |
| [http://www.depeca.uah.es/depeca/repositorio/asignaturas/31944/ARM_i%20(SOFT).pdf http://www.depeca.uah.es/depeca/repositorio/asignaturas/31944/ARM_i%20(SOFT).pdf]<br/>
| |
| <br/>
| |
| [[File:registers.gif]]<br/>
| |
| <br/>
| |
| *R1...R12 - General Purpose Registers
| |
| **AAPCS (ARM Architecture Procedure Call Satandard) (parte de la ABI (ARM Application Binary Interface)) utiliza los registros R0, R1, R2 y R3 para pasar parámetros a las funciones de C
| |
| **Los parámetros que devuelven las funciones se colocan en el R0 según el AAPCS
| |
| **In this class, the SP will always be the main stack pointer (MSP), not the Process Stack Pointer (PSP).
| |
| *R13 - Stack Points (Almacena la dirección del elemento top de la pila)
| |
| *R14 - Link Register (Almacena la dirección devuelta por las subrutinas)
| |
| *R15 - Program Counter (Almacena la dirección de la siguiente instrucción a ejecutar)
| |
| Special Registers<br/>
| |
| *PSR - Process Status Register - Combina:
| |
| **APSR - Application Program Status Register
| |
| **IPSR - Interrupt Program Status Register
| |
| **EPSR - Execution Program Status Register
| |
| **Se puede consultar el registro PSR (que nos devuelve toda la información que contienen los tres registros), o consultar cada registro individulamente
| |
| **Los bits N, Z, V, C y Q nos dan información sobre el resultado de la anterior operación de la ALU
| |
| ***N resultado negativo
| |
| ***Z resultado es 0
| |
| ***V overflow signed numbers
| |
| ***C overflow unseigned numbers
| |
| ***Q indica que ha habido una saturacion
| |
| **El bit T siempre es 1 y nos indica que el procesador esta ejecutando instrucciones Thumb
| |
| **ISR_NUMBER indica el numero del tipo de excepcion actual del ISR
| |
| *PRIMASK (Exception Mask Registers) - Bit 0 of the special register PRIMASK is the interrupt mask bit. If this bit is 1, most interrupts and exceptions are not allowed. If the bit is 0, then interrupts are allowed.
| |
| *FAULTMASK (Exception Mask Registers) - Bit 0 of the special register FAULTMASK is the fault mask bit. If this bit is 1, all interrupts and faults are not allowed. If the bit is 0, then interrupts and faults are allowed. The nonmaskable interrupt (NMI) is not affected by these mask bits.
| |
| *BASEPRI (Exception Mask Registers) - The BASEPRI register defines the priority of the executing software. It prevents interrupts with lower or equal priority but allows higher priority interrupts. For example if BASEPRI equals 3, then requests with level 0, 1, and 2 can interrupt, while requests at levels 3 and higher will be postponed. A lower number means a higher priority interrupt. The details of interrupt processing will be presented in subsequent chapters.
| |
| <br/>
| |
| [[File:special_registers.gif]]<br/>
| |
| <br/>
| |
| Program Status Register del procesador ARM® Cortex-M<br/>
| |
| <br/>
| |
| <br/>
| |
| <b>Assembly language</b><br/>
| |
| <br/>
| |
| <br/>
| |
| Las instrucciones assembler tienen 4 campos separados por espacios o tabuladores:<br/>
| |
| Label - Opcode - Operand - Comment<br/>
| |
| FUNC - MOV - R0,#100 ; Pone 100 en R0<br/>
| |
| <br/>
| |
| *Label field: Es opcional. Identifica la posicion en la memoria de la actual instrucción. Se debe elegir un único nombre para cada label.
| |
| *Opcode field: Es la isntrucción a ejecutar.
| |
| *Operand field: Especifica donde se encuentra el dato que ejecuta la instruccion. Las instrucciones Thumb tienen 1, 2, 3 o 4 operandos.
| |
| *Comment field: Son los comentarios y son opcionales. La forma correcta es explicar porque se pone esa instrucción, no explicar que hace.
| |
| <br/>
| |
| {|
| |
| !Label
| |
| !Opcode
| |
| !Operands
| |
| !Comment
| |
| |-
| |
| |Func
| |
| |MOV
| |
| |R0, #100
| |
| |; this sets R0 to 100
| |
| |-
| |
| |
| |
| |BX
| |
| |LR
| |
| |; this is a function return
| |
| |}
| |
| <br/>
| |
| <br/>
| |
| Addressing mode<br/>
| |
| *Es el formato que la instrucción utiliza para especificar el lugar de la memoria que se va a leer o escribir
| |
| *Esta asociada a los operandos, y una única instrucción puede utilizar multiples addressing modes para cada operando
| |
| *Algunas instrucciones operan dentro del procesador y no necesitan guardar la informacion en memoria
| |
| *Inmediate addressing mode
| |
| **Cuando los datos estan en la misma instrucción - MOV R0,#1
| |
| *Indexed addressing mode
| |
| **Utiliza un register pointer para acceder a la memoria (register pointer - es un registro que contiene la dirección del dato)
| |
| *PC-relative addressing mode
| |
| **Utiliza el PC como puntero
| |
| **Se usa para para llamar funciones y acceder a constantes de la ROM
| |
| <br/>
| |
| <br/>
| |
| <br/>
| |
| Las instrucciones se pueden clasificar en 4 categorias:
| |
| *Acceso a la memoria
| |
| *Instrucciones aritméticas y lógicas
| |
| *Instrucciones de control
| |
| *Resto de instrucciones
| |
| <br/>
| |
| <br/>
| |
| <b>Memory Map</b><br/>
| |
| <br/>
| |
| <br/>
| |
| Memory Map Layout<br/>
| |
| *La memoria del ARM se divide en:
| |
| **ROM/Flash
| |
| **RAM
| |
| **I/O Ports
| |
| **Internal I/O
| |
| <br/>
| |
| [[File: memory_map_layout.gif]]<br/>
| |
| <br/>
| |
| Memory map of the TM4C123.<br/>
| |
| <br/>
| |
| = C2 - Conceptos Fundamentales =
| |
| == C2.2.-Embedded Systems ==
| |
| <br/>
| |
| <br/>
| |
| == C2.3.-Introduction to Computers ==
| |
| <br/>
| |
| <br/>
| |
| == C.2.4.-I/O Ports ==
| |
| <br/>
| |
| <br/>
| |
| == C.2.5.-CPU Registers ==
| |
| <br/>
| |
| <br/>
| |
| == C.2.6.-Assembly Language ==
| |
| <br/>
| |
| <br/>
| |
| == C.2.7.-Address Space ==
| |
| <br/>
| |
| <br/>
| |
| = C4 - Lógica Digital =
| |
| == C4.1.-Binary Information Implemented with MOS Transistors ==
| |
| <br/>
| |
| [[File: c4-logicaBinaria.gif | 600px]]<br/>
| |
| <br/>
| |
| En esta imágen se pueden ver un transistor MOS de canal p y otro de canal n conectados. Podemos ver como los transistores se utilizan como interruptores y a través de sus <i>gate</i> configuramos cada transistor para poder tener en OUT 0v (que es un 0 binario), o 3.3V (que es un 1 binario).<br/>
| |
| <br/>
| |
|
| |
| == C4.2.-Digital Logic ==
| |
| <br/>
| |
| [[File: C4-NOT-Gate.gif | 700px]]<br/>
| |
| <br/>
| |
| En un transistor P-Channel
| |
| *Si Source es mas positivo que Gate la corriente fluye de Source hacia Drain. El MOS está en ON
| |
| *Si Gate es mas positivo que Source la corriente no fluye. El MOS está en OFF
| |
| En un transistor N-Channel
| |
| *Si Gate es más positivo que Drain la corriente fluye de Drain hacia Source. El MOS está en ON
| |
| *Si Drain es más positivo que Gate la corriente no fluye. El MOS está en OFF
| |
| <br/>
| |
| Funcionamiento Puerta NOT
| |
| *Cuando IN = 0V en P-Channel Gate = 0V y como Source = 3.3V entonces P-Channel esta ON. En N-Channel Gate = 0V y como Source = 0V entonces N-Channel esta en OFF
| |
| *Cuando IN = 3.3V en P-Channel Gate = 3.3V y como Source = 3.3V entonces P-Channel esta en OFF. En N-Channel Gate = 3.3V y como Source = 0V entonces N-Channel esta en ON.
| |
| <br/>
| |
| Los circuitos hechos con transistores MOS de tipo p y tipo n se llaman Complementary Metal Oxide Semiconductors (CMOS)<br/>
| |
| <br/>
| |
|
| |
| == C4.3.-Flip-Flop ==
| |
| <br/>
| |
| [[File: c4-flip-flop.gif]]<br/>
| |
| <br/>
| |
| <b>Que son?</b><br/>
| |
| *<i>definición</i>
| |
| *Son la base de los registros y memorias
| |
| *Uno de sus usos es para guardar datos
| |
| <br/>
| |
| <b>Flip Flop RS</b><br/>
| |
| *Es el más simple y como vemos esta formado por dos NAND
| |
| *Como vemos en su t. verdad cuando S=1 y R=1 guarda el valor anterior. Este es el funcionamiento que se necesita cuando se usan para registros o para memorias
| |
| *Cuando S=0 y R=0 el valor de Q y de Q' es indeterminado
| |
| <br/>
| |
| {| class="wikitable" style="text-align:center;"
| |
| |+T. verdad
| |
| !S
| |
| !R
| |
| !Q
| |
| !Q'
| |
| |-
| |
| |0
| |
| |0
| |
| |N/C
| |
| |N/C
| |
| |-
| |
| |0
| |
| |1
| |
| |1
| |
| |0
| |
| |-
| |
| |1
| |
| |0
| |
| |0
| |
| |1
| |
| |-
| |
| |1
| |
| |1
| |
| |Q(t-1)
| |
| |Q'(t-1)
| |
| |}
| |
| <br/>
| |
| <b>Flip Flop D</b><br/>
| |
| <br/>
| |
| *Este Flip-Flop es el que se suele usar para guardar información
| |
| *El canal D es para entrar el dato
| |
| *El canal W es la señal de control
| |
| *Para guardar un bit:
| |
| **Poner bit a guardar en D
| |
| **Poner W a 1 y luego ponerlo a 0
| |
| **La salida Q = D
| |
| *El bit queda guardado y no importa el valor de D mientras W sea 0. Si W es 1 y D cambia, Q pasa a valer el nuevo valor de D
| |
| <br/>
| |
| <b>Tristado</b><br/>
| |
| <br/>
| |
| [[File: c4-triestado.gif | 400px]]<br/>
| |
| <br/>
| |
| Hay ocasiones en que varias salidas (de puertas lógicas, biestables, ...) se conectan a un mismo nodo (cable). Esto puede producir conflictos o que se dañen las salidas si mas de un dispositivo a la vez accede al nodo.<br/>
| |
| Los triestados disponen de una entrada extra que pone la salida en HiZ (Impedancia alta). Con este estado activado el dispositivo queda desactivado<br/>
| |
| Cuando G vale 0 como es una entrada negada (es decir se activa por 0) la salida Y vale lo que hay en la entrada A. <br/>
| |
| Cuando G = 1, la salida Y cambia independientemente de A. Este es el estado de Alta Impedancia (HiZ).<br/>
| |
| <br/>
| |
|
| |
| == C4.5.-Digital Information Stored in Memory ==
| |
| <br/>
| |
| [[File: c4-bit-register.gif | 400px]]<br/>
| |
| <br/>
| |
| *Se usan los biestables de tipo D para almacenar bits
| |
| *Como se ve en la imagen hay 8 biestables para almacenar un byte
| |
| *También se ve un triestado por cada bit. Éste sirve para colocar en el Data Bus la información que tiene cada biestable.
| |
| **Cuando Read = LOW se activa el triestado y en el Data Bus se coloca el byte almacenado.
| |
| **Cuando Read = HIGH el triestado se pone en HiZ y la salida Q de cada biestable queda aislada del Data Bus. En ese momento el byte que haya en el Data Bus será almacenado en los biestables cuando Write tenga un pulso de subida
| |
| <br/>
| |
|
| |
| = C5 - Introducción a C =
| |
| == C5.0.-Introduction - Flow Charts ==
| |
| <br/>
| |
| <b>Flow Charts</b><br/>
| |
| <br/>
| |
| = C6 - Microcontroller Ports =
| |
| == C6.1 - TM4C123 Launchpad I/O Ports ==
| |
| <br/>
| |
| [[File: c6-tm4c123-ports.gif | 694px]]<br/>
| |
| <br/>
| |
| En la imagen de arriba se ven los 43 puertos del TM4C123:
| |
| *8 puesrtos UART
| |
| *4 puertos SSI
| |
| *4 puertos I2C
| |
| *2 convertidores ADC de 12bits
| |
| *12 timers
| |
| *1 puerto CAN
| |
| *1 puerto USB
| |
| *16 puertos PWM
| |
| Los pines se pueden configurar como:
| |
| *digital I/O
| |
| *analog input
| |
| *timer I/O
| |
| *serial I/O
| |
| <br/>
| |
| <br/>
| |
| TABLA 6.1<br/>
| |
| <br/>
| |
| *En el registro GPIOPCTL se configuran las funciones altrenativas de los pines (0 significa que se configura el pine como un puerto I/O normal).
| |
| *Los pines que van de PC3-PC0 no salen en la tabla porque estan reservados para el debugger JTAG y no se pueden usar como puertos I/O normales.
| |
| *Algunas funciones altrenativas solo pueden estar en un pin determinado y otras pueden estar en varios pines (por ejemplo CAN0Rx puede estar mapeado en los pines PB4, PE4 o PF0)
| |
| <br/> | | <br/> |
| [[File: C6-launchpad.jpg]]<br/>
| |
| <br/> | | <br/> |
| *Esta es la placa Tiva LaunchPad basada en el chip LM4F120H5QR o TM4C123GH6PM. | | Recursos |
| *Incluye integrado un In-Circuit Debug Interface (ICDI) que nos permite programar y hacer debug al controlador. | | *https://www.smashwords.com/books/view/302372 - Libro en castellano de desarrollo en ARM M3 de Sergio R. Caprile |
| *Un puerto USB sirve para el ICDI y el otro para desarrollar aplicaciones que se comuniquen por usb. | | *http://www.sase.com.ar/2012/files/2012/09/Pres_ARMando.pdf - Presentacion pdf resumen arm de Sergio R. Caprile |
| *El switch de power permite que la placa se alimente por el usb del ICDI o por el otro USB. | | *http://mymoviestorrent.com/e-books/90968-the-designers-guide-to-the-cortex-m-processor-family-a-tutorial-approach.html - The Designer's Guide to the Cortex-M Processor Family - A Tutorial Approach - |
| | *http://users.ece.utexas.edu/~valvano/embed/toc1.htm - Aprendizaje C para ARM de J.Valvano |
| | *http://www.forosdeelectronica.com/f24/empezar-microcontroladores-arm-55856/index2.html - Discusion sobre ARM. Interesante, hablan de placas de desarrollo y de las diferentes marcas que hacen ARM |
| | *https://www.youtube.com/user/valenciaupv/search?query=arm - Canal youtube de Universidad Politecnica Valencia |