You are on page 1of 70

XMEGA

XMEGA

Jonathan Seminario Pgina 1


XMEGA

Contenido
XMEGA ................................................................................................................................. 1
typedef, struct, union, enum ................................................................................................... 4
typedef: ............................................................................................................................... 4
Estructuras (struct):............................................................................................................. 5
typedef y struct ............................................................................................................... 6
Uniones (union): ................................................................................................................. 7
Enumeraciones (enum): ...................................................................................................... 8
ATXMEGA ............................................................................................................................ 9
Mdulos XMEGA .............................................................................................................. 9
Nomenclatura de registros: ........................................................................................... 10
Nomenclatura de bits: ................................................................................................... 10
Escribiendo cdigo en C para XMEGA ........................................................................... 11
Registros en los mdulos .............................................................................................. 12
Direccionamiento de mdulos ...................................................................................... 15
Mscaras de bits y mscaras de grupos de bits ............................................................. 16
Mscara de configuracin de grupo de bits .................................................................. 18
Llamadas a funciones y mdulos ................................................................................. 20
Resumen: .......................................................................................................................... 21
IO Pins .................................................................................................................................. 22
Nombre ......................................................................................................................... 22
Configurando direccin (entrada/salida): ..................................................................... 22
Controlando el valor de salida: ..................................................................................... 22
Leyendo el estado lgico de una entrada. ..................................................................... 23
Configuracin de pines ..................................................................................................... 23
Configuracin Output/Pull ........................................................................................... 23
Configuracin de salida ................................................................................................ 23
Configuracin pull ........................................................................................................ 24
Configuracin Input/Sense ........................................................................................... 24
Inversin ....................................................................................................................... 24
Configuracin de interrupciones ...................................................................................... 25

Jonathan Seminario Pgina 2


XMEGA

Event System ........................................................................................................................ 27


Clock, RC2MHz, RC32MHz y PLL .................................................................................... 28
Prescaler A,B y C ............................................................................................................. 28
RC2MHz........................................................................................................................... 29
RC32MHz......................................................................................................................... 31
Timer/Counter 0&1 .............................................................................................................. 33
Fuentes de clock y eventos ............................................................................................... 34
Modo: Operacin normal.................................................................................................. 35
Modo: Generacin de frecuencia ...................................................................................... 37
Modo: PWM pendiente nica (single slope) .................................................................... 39
Modo: PWM doble pendiente (dual slope)....................................................................... 40
Input Capture .................................................................................................................... 41
Captura de pulso ............................................................................................................... 42
Captura de frecuencia ....................................................................................................... 44
USART ................................................................................................................................. 46
Encoder ................................................................................................................................. 47
DMAC .................................................................................................................................. 49
Transaccin DMA ............................................................................................................ 49
Transferencia de bloques y repeticin .......................................................................... 49
Transferencia de rfaga ................................................................................................ 49
Transferencia Memoria-Memoria .................................................................................... 50
Transferencia Memoria-Perifrico (USART) ................................................................... 51
ADC ...................................................................................................................................... 53
Single-ended Input ............................................................................................................ 54
Differential Input (sin ganancia)....................................................................................... 58
Differential Input (con ganancia) ..................................................................................... 59
Transferencia Perifrico-Memoria ................................................................................... 60
DAC ...................................................................................................................................... 62
Transferencia Perifrico- Perifrico ................................................................................. 63
Ejemplo: FILTRO IIR .......................................................................................................... 65
Ejemplo: PWM a Seal Senoidal ......................................................................................... 68

Jonathan Seminario Pgina 3


XMEGA

typedef, struct, union, enum

typedef:

Palabra reservada que tiene como funcin asignar un nombre o alias a tipos de datos ya
existentes.

Ejemplo de definicin:

Definicin con typedef

Ejemplo de uso:

Uso de typedef

Aqu OCDR0 es un entero sin signo de ocho bits y que adems tiene el atributo volatile.
Es decir que:

register8_t OCDR0 es equivalente a volatile uint8_t OCDR0

Nota: volatile le dice al compilador que no opt imice nada cuando tenga que
manejar variables de este tipo.

Jonathan Seminario Pgina 4


XMEGA

Estructuras (struct):

Son colecciones de variables relacionadas bajo un nombre. Pueden contener variables de


diferentes tipos de datos.

Las estructuras son tipos de datos derivados - estn construidas utilizando objetos de otros
tipos. Considere la siguiente definicin de estructura:

Definicin de estructura

La palabra reservada struct indica que se est definiendo una estructura. El identificador
ejemplo es el nombre de la estructura. Las variables declaradas dentro de las llaves de la
definicin de estructura son los miembros de la estructura. Los miembros de la misma
estructura deben tener nombres nicos mientras que dos estructuras diferentes pueden tener
miembros con el mismo nombre. Cada definicin de estructura debe terminar con un punto
y coma.

Declaramos variables del tipo estructura del siguiente modo:

Declaracin de variables

En la declaracin anterior se declara temp1 como variable del tipo ejemplo y temp2
como un array del tipo ejemplo con dimensin 3.

Para tener acceso a los miembros de una estructura utilizaremos el operador punto.

Acceso a miembros

Jonathan Seminario Pgina 5


XMEGA

En Atmel Studio veremos las estructuras como en la figura siguiente. Aqu se pueden ver
los valores asignados y la direccin de memoria que fue asignada a la estructura.

Vista de estructura en Atmel Studio

typedef y struct

Podemos combinar typedef como sigue:

Definicin de estructura y de variables

En las declaraciones de las variables ya no se usa la palabra clave struct. El acceso a los
miembros contina hacindose mediante el operador punto.

Jonathan Seminario Pgina 6


XMEGA

Uniones (union):

Son un tipo de dato derivado que permite almacenar diferentes tipos de datos en las mismas
posiciones de memoria. Las uniones proporcionan una forma de manipular diferentes clases
de datos dentro de una sola rea de almacenamiento.

Las uniones son declaradas con el mismo formato que las estructuras.

Definicin de unin y declaracin de variable

El acceso a los miembros de la unin tambin es mediante el operador punto (.).

Acceso a variable

En Atmel Studio se ve como los miembros de la unin comparten la misma posicin de


memoria (direccin 0x205C). El tamao de la unin ser del mismo tamao del miembro
ms grande.

Vista de union en Atmel Studio

Jonathan Seminario Pgina 7


XMEGA

Enumeraciones (enum):

Una enumeracin consta de un conjunto de constantes enteras con nombre. Un tipo de dato
enumerado es una manera de asociar nombres a nmeros, y por consiguiente de ofrecer ms
significado a alguien que lea el cdigo. La palabra reservada enum enumera
automticamente cualquier lista de identificadores que se le pase, asignndoles valores de
0, 1, 2, etc.

En la siguiente figura se muestra la definicin del enumerador ejemplo_enum con cuatro


miembros.

Definicin de enumerador y declaracin de variable

Uso de variable enum

Jonathan Seminario Pgina 8


XMEGA

ATXMEGA

Mdulos XMEGA
Un AVR XMEGA est compuesto de varios bloques bsicos llamados mdulos tipo. Un
XMEGA puede tener una o ms instancias de un tipo de mdulo dado. Todas las instancias
de un tipo de mdulo tienen las mismas caractersticas y funciones.

Un mdulo tipo puede ser un USART, mientras una instancia de este tipo puede ser
USARTC0, donde el sufijo C0 indica que la instancia es el USART 0 en el puerto C.

Tipo de mdulo, instancias, registros y bits.

Cada mdulo tiene una direccin base fija en el mapa de memoria I/O y todos los registros
contenidos en el mdulo tienen direcciones de desplazamiento fijas relativas a direccin
base del mdulo. De esta manera, cada registro no slo tendr una direccin absoluta en el
espacio de memoria, sino tambin una direccin relativa definida por un offset. Los
desplazamientos de las direcciones de registros son iguales para todas las instancias de un
tipo de mdulo, simplificando la tarea de escribir controladores que puedan ser usados para
todos los mdulos de un tipo especfico.

Jonathan Seminario Pgina 9


XMEGA

Nomenclatura de registros:

Los registros estn divididos en: Registros de control, registros de estado y registros de
datos. Un registro de control de propsito general del mdulo es llamado CTRL. S existen
mltiples sern llamados CTRLA, CTRLB, CTRLC, etc.

Para registros que tienen una funcin especfica el nombre de estos refleja esta
funcionalidad. Por ejemplo, el registro de control de interrupcin INTCTRL.

Para un registro de 16 bits, el alto (High) y bajo (Low) son accesados agregando una H o
L. Por ejemplo, CNT = CNTL y CNTH. Para registros ms grandes los bytes son
numerados. Por ejemplo CAL. Los cuatro bytes son llamados CAL0, CAL1, CAL2 y CAL3
(desde el menos al ms significativo).

Nomenclatura de bits:

Los bits en los registros pueden tener una funcin individual o ser parte de un grupo de bits
que tienen una funcin conjunta: Un bit individual puede ser un bit que habilita un mdulo,
ej. El USART ENABLE bit. Un grupo de bits puede consistir de dos o ms bits que juntos
seleccionan una configuracin especifica. Los dos bits que controlan el nivel de
interrupcin de recepcin completa del USART, RXINTLVL[1:0], es un ejemplo de un
grupo de bits. Esos dos bits ofrecen las siguientes secciones:

Bits RXINTLVL

Solamente los bits que forman parte de un grupo tendrn como sufijo un nmero.

Jonathan Seminario Pgina 10


XMEGA

Escribiendo cdigo en C para XMEGA

La siguiente seccin se enfoca en cmo escribir cdigo en C para XMEGA. Los ejemplos
muestran cmo hacer el cdigo altamente legible y portable entre los diferentes dispositivos
XMEGA.

Los mdulos XMEGA se encuentran en bloques dedicados y continuos en el espacio de


memoria y se pueden ver como unidades encapsuladas. Esto se refleja en la forma en que se
acceden a los mdulos cuando se codifica en C: Los mdulos son encapsulados usando
estructuras en C, en las que estn contenidos todos los registros del mdulo. La siguiente
figura muestra una ilustracin de esto.

Bloque de mdulos

Para grandes proyectos, las estructuras de los mdulos proporcionan una ventaja, no slo la
legibilidad, sino tambin porque los compiladores pueden reutilizar los driver y por lo tanto
generar un cdigo muy compacto.

Jonathan Seminario Pgina 11


XMEGA

Registros en los mdulos

El mapa de entradas/salidas est dispuesto de modo tal que todos los registros para un
mdulo perifrico dado se coloquen en un bloque de memoria continua. Los registros
pertenecientes a diferentes mdulos no son mezclados. Esto hace posible organizar todos
los mdulos perifricos en estructuras, donde la direccin de la estructura define la
direccin base del mdulo. Todos los registros pertenecientes a un mdulo son elementos
de la estructura del mdulo.

Un ejemplo es mdulo USART. El tipo estructura y la declaracin para este mdulo es


mostrada en las siguientes figuras.

Definicin de mdulo tipo

Declaracin de mdulo

Uso de la estructura

Jonathan Seminario Pgina 12


XMEGA

Registros multi-bytes en mdulos

Algunos registros son usados conjuntamente con otros registros para representar valores de
16 y 32 bits. Como ejemplo de esto es la declaracin de la estructura ADC de la siguiente
figura.

Declaracin de mdulo ADC

Jonathan Seminario Pgina 13


XMEGA

En la figura anterior, los registros de resultado de cada canal CH0RES, CH1RES, CH2RES,
CH3RES, y el registro de comparacin CMP, son valores de 16 bits. Ellos son declarados
usando la macro _WORDREGISTER la cual es mostrada en la siguiente figura.

Macro _WORDREGISTER

En la siguiente figura registro de cuenta, CNT, es un valor de 32 bits y es declarado usando


la macro _DWORDREGISTER.

Declaracin de mdulo RTC32_struct

Como se ha visto, la macro WORDREGISTER usa los sufijos H y L para para los bytes
altos y bajos respectivamente. La macro usa nmeros como sufijos para indicar el orden de
los bytes. Tanto los registros de 16 como los de 32 bits pueden ser accesados en modo
16/32 bits sin usar el sufijo como se muestra en la siguiente figura.

Jonathan Seminario Pgina 14


XMEGA

Macro _DWORDREGISTER

Uso de registros de 8, 16 y 32 bits

Direccionamiento de mdulos

Las definiciones de todos los mdulos perifricos son encontradas en el archivo cabecera
del dispositivo. La direccin para el mdulo es especificada en ANSI C para tener
compatibilidad con muchos de los compiladores disponibles. En la siguiente figura se
muestra las definiciones de los ADC para los puertos A y B. Aqu se puede ver como las
instancias de los mdulos son desreferenciados a una direccin absoluta en la memoria, la
cual coincide con la direccin base de la instancia del mdulo. Los punteros al mdulo son
predefinidos en los archivos cabecera de cada XMEGA, por lo tanto, ya no es necesario
agregar estas definiciones a nuestro cdigo.

Jonathan Seminario Pgina 15


XMEGA

Definicin de mdulos ADC

Mscaras de bits y mscaras de grupos de bits

Los bits en los registros pueden ser manipulados usando mscaras predefinidas, o
alternativamente la posicin de los bits. No se recomienda usar la posicin de los bits. Las
mscaras de bits predefinidas estn relacionadas a bits individuales, denominados mscara
de bits o grupo de bits.

Una mscara de bit es usada tanto cuando se setea o limpia un bit. Una mscara de grupo es
principalmente usada cuando limpiamos mltiples bits en un grupo.

Mascara de bit (Bit Mask)

Considere el registro de control del Timer D, CTRLD. Los grupos de bit, los nombres de
bit, las posiciones de los bits y las mscaras de bit de este registro se pueden ver en la
siguiente tabla.

Grupos de bit, nombres de bit, posiciones y mscaras de bit para los bits del registro CTRLD.

Ya que el nombre de los bits necesita ser nico para que el compilador pueda manejarlos,
todos los bits estn prefijados con el nombre del mdulo al cual pertenecen. En muchos
casos, el nombre del tipo del mdulo esta abreviado. Para todas las definiciones de bits
relacionadas con los mdulos Timer/Counter, los nombres de los bits tienen un prefijo
TC_.

Para diferenciar entre las mscaras de bit y las posiciones de los bits se agrega un sufijo.
Para una mscara de bit, el sufijo es _bm. El nombre de la mscara de bit para el bit
EVDLY es TC_EVDLY_bm. El cdigo mostrado en la siguiente figura usa una mscara de
bit. El bit EVDLY en el registro CTRLD del Timer/Counter D0 es seteado sin alterar los
otros bits del registro.

Uso de la mscara de bit

Jonathan Seminario Pgina 16


XMEGA

Mscara de grupo de bits (_gm)

Muchas funciones son controladas por un grupo de bits. Los bits EVACT[2:0] y
EVSEL[3:0] son grupos de bits en el registro CTRLD del Timer/Counter. Los valores de
esos bits seleccionan una configuracin especfica.

Cuando cambiamos bits en un grupo de bits, a menudo se requiere limpiar el grupo de bits
antes de asignar un nuevo valor. Para decirlo de otro modo: No es suficiente con setear los
bits que deben ser seteados, tambin se requiere limpiar los bits que deben ser limpiados.
Para que esto sea fcil se definen las mscaras de grupos de bits. Las mscaras de grupo
usan el mismo nombre como los bits en el grupo de bits y un sufijo _gm.

El cdigo de la siguiente figura muestra como la mscara de grupo se relaciona con las
mscaras de bit. En realidad, los valores de mscara de grupo son precalculados en los
archivos cabecera, entonces el compilador no necesita calcular la misma constante una y
otra vez.

Relacin entre mscara de grupo y mscara de bit

La mscara de grupo de bits esta principalmente destinada para borrar una configuracin
antigua antes de escribir la nueva. En el cdigo de la siguiente figura se muestra cmo
hacerlo. El cdigo limpia el grupo de bits EVACT en el registro CTRLD del Timer/Counter
D0.

Uso de mscara de grupo

Jonathan Seminario Pgina 17


XMEGA

Mscara de configuracin de grupo de bits

A menudo se requiere consultar la hoja de datos para investigar cul patrn de bits necesita
ser usado cuando seteamos un grupo de bits para una configuracin especifica. Esto
tambin se aplica a las lecturas o depuracin del cdigo. Para incrementar la legibilidad y
minimizar la probabilidad de setear bits incorrectamente, es que se encuentran disponibles
las mscaras de configuracin de grupo.

El nombre de una mscara de configuracin de grupo es concatenado al mdulo tipo, al


nombre del grupo de bits, a una descripcin de la configuracin y un sufijo _gc,
indicando que este es un grupo de configuracin. Un ejemplo de esto es mostrado en la
siguiente figura.

Composicin del nombre del grupo de configuracin

Inspeccionando la figura anterior podemos ver que esta es usada para seleccionar una
configuracin para los bits RXCINTLVL en el mdulo USART. Este grupo selecciona un
nivel de interrupcin alto (HI).

El grupo de bits para los niveles de interrupcin por recepcin completa est compuesto de
dos bits, RXINTLVL[1:0]. La siguiente tabla muestra las configuraciones disponibles para
este grupo. Los nombres de las configuraciones son OFF, LO, MED y HI. Estos
nombres hacen ms fcil la escritura y el mantenimiento del cdigo.

Bits RXINTLVL y su correspondiente nivel de interrupcin

Jonathan Seminario Pgina 18


XMEGA

Para cambiar un grupo de bits a una configuracin nueva, el grupo de bits de configuracin
(_gc) es tpicamente usado junto con la mscara de grupo de bits (_gm), esto con el fin de
asegurarse que la configuracin vieja sea borrada primero. En la siguiente figura se aprecia
un ejemplo de esto. Aqu se limpian los bits de nivel se interrupcin para luego seleccionar
un nuevo nivel (nivel medio).

Cambiando un grupo de configuracin

El uso de la mscara de grupo para limpiar no es siempre requerida, el cdigo mostrado en


la siguiente figura muestra cmo todos los niveles de interrupcin del USARTC0 pueden
ser configurados a la vez. Recepcin completa, transmisin completa y la interrupcin por
registro de datos vaco con seteadas a niveles medio, off y bajo respectivamente.

Seteando todas las interrupciones a la vez

Enumeracin de mscara de configuracin de grupo

A diferencia de las mscaras de bit (_bm) y mscaras de grupo (_gm), las mscaras de
configuracin de grupo son definidas usando enumeradores. Un enumerador es definido
para cada grupo de bits. El enumerador para el grupo USART RXCINTLVL es mostrado
en la siguiente figura.

Enumerador USART RXCINTLVL

Jonathan Seminario Pgina 19


XMEGA

Llamadas a funciones y mdulos

Cuando escribimos drivers para un mdulo tipo que tiene mltiples instancias, el hecho de
que todas las instancias tenga el mismo mapa de memoria puede utilizarse para hacer que el
driver sea reutilizable para todas las instancias del mismo mdulo. Si el driver toma un
argumento tipo puntero, apuntando a la instancia del mdulo, el driver se puede utilizar
para todos los mdulos de este tipo.

La funcin para inicializar y acceder a los mdulos Timer/Counter puede ser compartida
por todas las instancias del mdulo. Aunque hay una pequea sobre carga en pasar el
puntero del mdulo a las funciones, el tamao total del cdigo a menudo se reducir ya que
el cdigo es reusado para todas las instancias de cada mdulo. Incluso ms importantes, el
tiempo de desarrollo, el costo de mantenimiento, y la portabilidad pueden ser mejoradas
usando este enfoque.

El cdigo de la siguiente figura muestra una funcin que usa un puntero a un mdulo para
seleccionar una fuente de clock para cualquier Timer/Counter.

Ejemplo de funcin usando un puntero a la instancia de un mdulo

La funcin anterior toma dos argumentos: un puntero a mdulo de tipo TC0_t, y un grupo
de configuracin de tipo TC_CLKSEL_t. El cdigo en la funcin usa el puntero al mdulo
Timer/Counter para acceder al registro CTRLA y setear el nuevo clock.

El cdigo de la siguiente figura muestra como la funcin puede ser usada para configurar
diferentes mdulos Timer/Counter con diferentes fuentes de clock.

Llamadas a la funcin que toma puntero a mdulo como parmetro

Jonathan Seminario Pgina 20


XMEGA

Resumen:

Jonathan Seminario Pgina 21


XMEGA

IO Pins

Nombre
PORTx. Ej: PORTA, PORTB, PORTC etc.

Configurando direccin (entrada/salida):


Se configura directamente usando el registro DIR; o los registros DIRSET, DIRCLR o
DIRTGL.

Ejemplos:

Pin 1 como salida.


Pin 1 como salida sin alterar otros bits.
Pin 1 como salida sin alterar otros bits usando DIRSET.
Pin 5 como salida sin alterar otros bits.
Pin 5 como salida sin alterar otros bits usando DIRCLR.

Controlando el valor de salida:


Se controla directamente con el registro OUT; o los registros OUTSET, OUTDIR u
OUTTGL.

Ejemplos:

Pin 1 como salida.


Pin 1 a 1, otros bits a 0,
Pin 1 a 0 sin alterar otros bits.
Pin 1 a 0 sin alterar otros bits usando OUTCLR.
Pin 1 a 1 sin alterar otros bits.
Pin 1 a 1 sin alterar otros bits usando OUTSET.
Cambia el valor de pin 1 de 0 a 1 o de 1 a 0.
Cambia el valor de pin 1 de 0 a 1 o de 1 a 0 usando
OUTTGL

Jonathan Seminario Pgina 22


XMEGA

Leyendo el estado lgico de una entrada.


Se lee usando el registro IN.

Declaracin de variable.
Pin 2 como entrada.
Lectura de estado de todos lo pines.
Filtrada para el pin 2.

Configuracin de pines
Cada pin IO tiene su propio registro - PINnCTRL.

Configuracin Output/Pull
Los bits configuracin output/pull son usados para configurar el comportamiento del driver
de salida y la configuracin pull. La siguiente tabla muestra una descripcin de las posibles
configuraciones.

Configuracin output/pull

Configuracin de salida
En la configuracin Totempole, la salida es conducida a VCC o GND segn lo
ordenado por el bit correspondiente en el registro OUT.
En la configuracin Wired-OR, la escritura de un 1 a OUTn hace que el pin n
sea conducido a VCC. Escribir un 0 en OUTn libera el pin, permitiendo al pin ser
pulleado a GND con una resistencia pull-down interna o externa.

Jonathan Seminario Pgina 23


XMEGA

En la configuracin Wired-AND, la escritura de un 0 a OUTn hace que el pin n


sea conducido a GND. Escribiendo un 1 a OUTn libera el pin, permitiendo al pin
ser pulleado a VCC con una resistencia pull-up interna o externa.

Configuracin pull
La configuracin Buskeeper de entrada y salida provee de un retenedor dbil del
bus que mantendr el pin al mismo nivel lgico cuando el pin no es conducido a
ningn nivel lgico.
La configuracin Pull-down habilita la resistencia pull-down para un determinado
pin.
La configuracin Pull-up habilita la resistencia pull-up para un determinado pin.

Configuracin Input/Sense
Es usada para detectar un flanco o nivel en el pin de entrada. Estn disponibles cuatro
configuraciones. Se pueden detectar flancos de subida, de bajada, ambos flancos o un nivel
bajo. Tener en cuenta que el nivel alto tambin se puede detectar invirtiendo la seal en el
registro de configuracin PINnCTRL.

Configuraciones de entrada

Inversin
Seteando el bit Inverted IO-INVEN se habilita la inversin de datos tanto en entrada y
salida.

Jonathan Seminario Pgina 24


XMEGA

Configuracin de interrupciones
Cada puerto tiene dos interrupciones. Es posible disparar cada interrupcin por una
arbitraria combinacin de los pines del puerto.

Pasos para habilitar una interrupcin externa:

Poner el pin como entrada.


Configurar el tipo de censado y las
opciones pull.
Habilitar el bit correspondiente al pin.
Habilitar en nivel de interrupcin.
Habilitar el controlador de interrupciones.
Habilitar bit de interrupcin global.

Ejemplo de configuracin de salida de clock por pin PC7 (PORTCFG)

Seleccin de pin de salida (7 o 4)

Jonathan Seminario Pgina 25


XMEGA

Seleccin de puerto de salida (C, D o E)

Seleccin de frecuencia de salida

Jonathan Seminario Pgina 26


XMEGA

Event System

Sistema que permite la comunicacin directa entre perifricos. Gracias a este sistema los
perifricos pueden enviar, recibir y reaccionar a eventos generados por otros perifricos.

Ejemplo: Configurando el pin para censar el nivel bajo se puede transmitir el estado del pin
como fuente de evento. El estado de un pin que es configurado como entrada puede ser
reflejado en otro pin que es salida (pin7 o pin4).

El registro CLKEVOUT en PORTCFG debe ser configurado para que sea una salida de
eventos - anteriormente fue salida de reloj.

Seleccin de puerto de salida (C, D o E)

El canal cero del sistema de eventos debe ser configurado para llevar el estado del pin de
entrada hacia el pin de salida.

Configuracin del sistema de eventos

Configuracin para canal 1

Jonathan Seminario Pgina 27


XMEGA

Clock, RC2MHz, RC32MHz y PLL

Los XMEGA tienen un sistema de reloj muy flexible el cual soporta mltiples fuentes de
reloj. Este sistema incorpora dos precisos osciladores internos, soporte para cristales y
resonadores externos. Un PLL y prescalers pueden ser usados para generar un amplio rango
de frecuencias. Tambin se incorpora un DFLL que permite una calibracin automtica de
los osciladores internos.

Sistema de reloj

Prescaler A,B y C
Dividen la fuente de reloj seleccionada por mltiples factores. Estos prescaler son seteado
en registro PSCTRL. Este registro se encuentra protegido por un mecanismo de configuracin
de cambios el cual debe ser activado antes de realizar los cambios.

Valores prescaler A

Jonathan Seminario Pgina 28


XMEGA

Valores prescaler B y C

En el siguiente ejemplo se muestra el seteo del prescaler, A, B y C. Aqu primero se debe


indicar al registro CCP que se realizar una modificacin de un registro protegido. La
frecuencia que llegara al CPU estar dividida por 8.

Seteo de prescalers

RC2MHz
Oscilador habilitado por defecto. Puede ser fuente del PLL y en caso de ser necesario puede
ser calibrado usando el DFLL.

En la siguiente figura se activa el DFLL de 2MHz. En este caso tambin se debe


activar el oscilador interno de 32.768Kz ya que es usado como referencia para la
calibracin. En este caso la frecuencia del CPU es 250KHz (2MHz / 8).

Uso del DFLL para el RC2MHz

En las siguientes figuras se muestra la importancia del DFLL, ya que para


determinadas aplicaciones puede ser importante tener una mayor precisin en el
valor de la frecuencia del cpu.

Jonathan Seminario Pgina 29


XMEGA

258KHz sin DFLL

250KHz con DFLL

Jonathan Seminario Pgina 30


XMEGA

En la siguiente figura se muestra el uso del PLL tomando como entrada el RC interno de
2MHz. La frecuencia de 2MHz es multiplicada por 2 (puede ser desde x1 hasta x16).

PLL y RC 2MHz

RC32MHz
Para usar este oscilador primero debe ser habilitado y seleccionado como fuente de reloj.
Tambin puede ser auto-calibrado usando el DFLL. Se debe tener en cuenta que cuando es
usado como fuente para el PLL es dividido por 4 antes de llegar al PLL.

Diagrama de los osciladores RC2MHz y RC32MHz

Jonathan Seminario Pgina 31


XMEGA

En la siguiente figura me muestra como configurar el RC32MHz. Bsicamente


consiste en la habilitacin del oscilador, esperar a que este se haya estabilizado y
finalmente seleccionarlo como seal de reloj para el sistema.

Configuracin de RC32MHz

El siguiente ejemplo muestra un uso conjunto de los prescalers, el RC32MHz y el


DFLL. En este caso ya que se usa prescaler de 32 la frecuencia del cpu ser de
1MHz.

Configuracion RC32MHz, Prescaler y DFLL

En el siguiente ejemplo se usa el RC32MHz como entrada para el PLL. Tambin se


tiene un prescaler total de 128 y el PLL un multiplicador por 16. Aqu debemos
recordar que la frecuencia de entrada al PLL es 8MHz (32/4). Entonces la
frecuencia efectiva para el cpu es de (((32 / 4) * 16) /128) = 1MHz.

RC32MHz como fuente para el PLL

Jonathan Seminario Pgina 32


XMEGA

Timer/Counter 0&1

Caractersticas: Timer/Counter de 16 bits. Se pueden unir dos para formar uno de 32 bits.
Timer/Counter 0 tiene cuatro canales de comparacin y 2 el Timer/Counter 1. Generacin
de interrupciones y eventos. Puede ser usado con el sistema de eventos con para el
decodificador de cuadratura. Puede disparar transacciones del DMA.

Definiciones importantes:

Nombre Descripcin
BOTTOM Cuando el contador llega a 0x0000
MAX Cuando el contador llega a 0xFFFF
Cuando el contador llega al valor de PER o CCA. Esto en el caso de usar
TOP
el modo waveform
UPDATE Cuando se alcanza BOTTOM o TOP dependiendo del modo waveform

Diagrama de bloques

Jonathan Seminario Pgina 33


XMEGA

Fuentes de clock y eventos


El timer/counter puede tener como fuente de clock al CKLper o el sistema de eventos.

Seleccin de clock y eventos

Las fuentes de clock que alimentarn el timer ya se encuentran disponibles y esperando ser
seleccionadas.

Fuentes de reloj para el timer/counter

Jonathan Seminario Pgina 34


XMEGA

Modo: Operacin normal

Calculo valor del periodo del timer:

FCPU N
ftimer Tpulso
N FCPU

N * PER Ttotal (sec) * FCPU


Ttotal (sec) PER
FCPU N

Ttotal ( mili sec) * FCPU


PER
1000* N

Ttotal ( mili sec) * FCPU


PEROVRFLOW 1
1000* N

Ejemplo overflow 1ms:

Configuracin del timer con prescaler de 8

Jonathan Seminario Pgina 35


XMEGA

Uso del flag overflow

La salida es medida en el pin4 del puerto C, la cual se asume es previamente configurada


como salida.

Salida medida en pin4 (1.004ms)

Ejemplo interrupcin overflow 1ms.

Configuracin

Interrupcin overflow

Jonathan Seminario Pgina 36


XMEGA

Ejemplo de uso del timer para contar eventos del sistema. Los eventos son
generados por el Pin5.

Configuracin para contar pulsaciones de un botn en pin5

Ejemplo de uso de eventos del sistema para el control de la direccin de la cuenta.


Este cdigo debe ser agregado al anterior. La direccin es controlada por el pin1 del
puerto F.

Configuracin de eventos de sistema para control de direccin

Modo: Generacin de frecuencia


Es similar al anterior modo pero en lugar del registro PER se usa el registro CCA.

FCPU
fCCA
2* N *(CCA 1)

FCPU
CCA 1
2* N * fCCA

Ejemplo de generacin de seal de 333Hz.

2000000
CCA 1
2*4*333

Jonathan Seminario Pgina 37


XMEGA

Configuracin

Uso del flag CCAIF

Ejemplo de configuracin para generar interrupcin

Configuracin

Interrupcin CCAIF

Adicionalmente, se puede llevar esta seal hacia un pin de salida, en la siguiente


figura se muestra la habilitacin de la salida y del pin correspondiente.

Habilitacin de salida

Jonathan Seminario Pgina 38


XMEGA

Modo: PWM pendiente nica (single slope)

Fclk _ PER Fclk _ PER


f PWM _ SS PER 1
N ( PER 1) N * f PWM _ SS

Ejemplo para una seal de 800Hz. CCA mostrar de duty cicle y CCB .

2000000
PER 1
4*800

Configuracin de salida PWM en para CCA y CCB

Seales de salida A y B

Jonathan Seminario Pgina 39


XMEGA

Modo: PWM doble pendiente (dual slope)

Fclk _ PER Fclk _ PER


f PWM _ DS PER
2* N * PER 2* N * f PWM _ DS

Ejemplo para una seal de 800Hz. CCA mostrar de duty cicle y CCB .

2000000
PER
2*4*800

Configuracin de salida PWM en para CCA y CCB

Seales de salida A y B

Jonathan Seminario Pgina 40


XMEGA

Input Capture

Ejemplo se captura del valor de la cuenta del timer al presionar SW0.

Configuracin de evento

Configuracin de timer

Captura y conversin

Jonathan Seminario Pgina 41


XMEGA

Captura de pulso

Ejemplo de medicin del tiempo que se mantiene presionado SW0.

Configuracin de evento

Configuracin de timer

Captura y conversin

Jonathan Seminario Pgina 42


XMEGA

En el siguiente ejemplo se genera una seal de 1Hz por PC0 (se usa el timer C0), y
el ancho del pulso (500mSeg) es medido por el timer C1.

Configuracin de evento y puerto de entrada

Configuracin de timer para 1Hz

Configuracin de timer para captura de pulso

Medicin - time = 500.224 milisegundos

Jonathan Seminario Pgina 43


XMEGA

Captura de frecuencia

En el siguiente ejemplo se genera una seal de 5Hz por PC0 (se usa el timer C0), y
esta frecuencia es medida por el timer C1 mediante PC1.

Configuracin del evento del sistema y pin

Configuracin de timer para 5Hz

Configuracin de timer para captura de frecuencia

Configuracin de timer para captura

Jonathan Seminario Pgina 44


XMEGA

Captura y conversin

Medicin frec 5Hz

Jonathan Seminario Pgina 45


XMEGA

USART

Ejemplo Tx/Rx pulling.

Configuracin de usart

Funciones para lectura/escritura

Uso de las funciones de lectura/escritura

Jonathan Seminario Pgina 46


XMEGA

Encoder

El sistema de eventos incluye 3 decodificadores de cuadratura (QDECs), los cuales


habilitan el dispositivo para decodificar entradas en cuadratura en los pines de entrada y
enviar eventos que el timer/counter pueda decodificar a cuentas ascendentes, descendentes
o reset. Los QDECs y sus caractersticas, control y registros de estados estn disponibles
para los canales de eventos 0, 2 y 4.

Seales de cuadratura para un encoder

Ejemplo del uso de un encoder incremental de 20 pulsos por vuelta.

Configuracin de pines QDPH0 (PC0) y QDPH90 (PC1) y canal de eventos

Configuracin del timer para la cuenta de pulsos del encoder

Jonathan Seminario Pgina 47


XMEGA

Lectura de datos y enva al terminal

Lectura de datos

Jonathan Seminario Pgina 48


XMEGA

DMAC

El controlador de acceso directo a memoria permite la transferencia de datos a alta


velocidad con una mnima intervencin del CPU.

Caractersticas:

Se puede transferir datos desde:


o Memoria de datos hacia memoria de datos.
o Memoria de datos hacia perifricos.
o Perifricos hacia memoria de datos.
o Perifricos hacia perifricos.
4 canales.
De 1 byte hasta 16MB en una sola transaccin.
Opcin de recargar las direcciones de origen o destino al final de cada rfaga,
bloque o transaccin.

Transaccin DMA
Es una operacin completa de lectura y escritura entre memorias y/o perifricos. Una
transaccin es hecha en bloques de datos, y el tamao de la transaccin (nmero de bytes a
transferir) es seleccionado desde el software y controlado por el tamao del bloque y la
configuracin del contador de repeticin.

Transferencia de bloques y repeticin


El tamao del bloque es seteado por el registro TRFCNTL (16 bits), y puede ser cualquier
valor entre 1 y 64KB.

Un contador de repeticiones REPCNT (8 bits) - puede ser seteado para repetir la


transferencia de un bloque antes de completar la transaccin.

Transferencia de rfaga
Ya que el DMA usa el mismo bus de datos que el CPU, una transferencia en bloque se
divide en pequeas rfagas de 1, 2, 4 u 8 bytes. Esto significa que el DMA ocupar el bus
hasta que todos los bytes en la rfaga sean transferidos.

Jonathan Seminario Pgina 49


XMEGA

Transaccin DMA

Transferencia Memoria-Memoria
En el siguiente ejemplo se transfiere un grupo de datos almacenados en tx hacia rx.

Declaracin de variables

Inicializacin del canal cero del DMA

Interrupcin al finalizar la transaccin

Jonathan Seminario Pgina 50


XMEGA

Al iniciar la transaccin

Al finalizar la transaccin

Transferencia Memoria-Perifrico (USART)


En el siguiente ejemplo se transfiere datos por el USARTC1 desde la memoria.

Configuracin del usart

Configuracin del DMA

Jonathan Seminario Pgina 51


XMEGA

Recepcin de datos en Terminal

Ahora agregamos un timer para hacer la transferencia peridica.

Configuracin del timer (1 seg)

Reenvo en la interrupcin del timer

Recepcin de datos en Terminal (cada 1 seg)

Jonathan Seminario Pgina 52


XMEGA

ADC

La referencia se debe seleccionar en el registro REFCTRL.

Referencias para el ADC

Jonathan Seminario Pgina 53


XMEGA

Single-ended Input
Todos los pines pueden ser usados como entrada.
El resultado puede ser con sin signo.

Single ended con signo

En modo sin signo el offset es V=0.05*VREF.

Single ended sin signo

Ejemplo de conversin sin signo para el PINB0.

Configuracin del ADC CH0- Single ended sin signo

Jonathan Seminario Pgina 54


XMEGA

VINP (V )
RES *(4096)
VREF

Obtencin y conversin

Resultado de la conversin

Ejemplo de conversin single ended con signo.

VINP
RES *(4096)
VREF

Configuracin para resultado con signo

Conversin de resultado

Resultado de la conversin

Jonathan Seminario Pgina 55


XMEGA

Ejemplo de captura de dos canales CH0 (PINB0) y CH1 (PINB1).

Configuracin de ADC

Lectura y conversin de los resultados

Resultados de la conversin

Jonathan Seminario Pgina 56


XMEGA

Ejemplo de uso del sistema de eventos para inicio de la conversin. La conversin


es disparada cuando se presiona el botn.

Configuracin del ADC y canales de eventos

Lectura y conversin de los resultados

Jonathan Seminario Pgina 57


XMEGA

Differential Input (sin ganancia)


En este modo todos los pines de entrada pueden ser seleccionados como entrada positiva, y
los pines 0 a 3 pueden ser las entradas negativas. El ADC se debe configurar en modo con
signo.

Ejemplo del uso del modo diferencial. La entrada positiva es PB0 el negativo es
PA3.

Configuracin del ADC

Lectura y conversin de los resultados

Resultados de la conversin

Jonathan Seminario Pgina 58


XMEGA

Differential Input (con ganancia)

Ejemplo del uso del modo diferencial con ganancia (x2). La entrada positiva es PA4
el negativo es PA5.

Configuracin del ADC

Lectura y conversin de los resultados

Resultados de la conversin

Jonathan Seminario Pgina 59


XMEGA

Transferencia Perifrico-Memoria
ADC Memoria

En el siguiente ejemplo se toma 100 muestras del CH0 del ADC. Estas muestras son
tomadas cada 10ms y son disparadas mediante por un timer mediante un canal de
eventos que lleva e evento overflow. El fin de cada conversin del ADC dispara una
transferencia del DMA hacia un espacio de memoria.

Configuracin del ADC en modo diferencial

Configuracin del timer 10ms

Configuracin del canal de eventos

Configuracin del DMA

Jonathan Seminario Pgina 60


XMEGA

Interrupcin del DMA (fin de la captura)

Lectura y conversin de los resultados

Resultados de la conversin

Jonathan Seminario Pgina 61


XMEGA

DAC

CHnDATA
VDACn VREF
4095

Ejemplo de habilitacin y uso de los dos canales del DAC.

Configuracin del DAC

Jonathan Seminario Pgina 62


XMEGA

Transferencia Perifrico- Perifrico


ADC DAC

En el siguiente ejemplo se muestra el uso conjunto del ADC, DAC, Timer, Evento
del sistema y el DMA. El timer, mediante un canal de eventos, dispara una
conversin del ADC (CH0 pin0), el fin de conversin dispara la transferencia del
DMA desde el ADC hacia el DAC.

Configuracin del DAC

Configuracin del ADC

Configuracin del Timer

Configuracin del canal de eventos

Jonathan Seminario Pgina 63


XMEGA

Configuracin del DMA

Jonathan Seminario Pgina 64


XMEGA

Ejemplo: FILTRO IIR

Los coeficientes estan calculados para una frecuencia de muestreo de 1000Hz y una
frecuencia de corte de 190Hz.

b = { 0.0038, 0.0017, 0.0052, 0.0017 0.0038


a = { 1.0000, -2.9639, 3.3966, -1.7675 0.3510

Respuesta del filtro fc = 190Hz

Respuesta del filtro vs fft seal cuadrara 50Hz

Jonathan Seminario Pgina 65


XMEGA

Ejemplo de seal cuadrada y filtrada (50Hz)

Las muestras del ADC son tomadas en cada interrupcin de un timer, en la misma
interrupcin es calculada la salida del filtro y puesta en el DAC.

Calculo de la salida del filtro IIR

Jonathan Seminario Pgina 66


XMEGA

Seales en el osciloscopio

Jonathan Seminario Pgina 67


XMEGA

Ejemplo: PWM a Seal Senoidal

En el siguiente ejemplo se usa el filtro RC pasa baja para generar una seal senoidal.

f PWM
La frecuencia de la seal es: fsin
# Puntos

Tabla senoidal 128 puntos

Jonathan Seminario Pgina 68


XMEGA

Interrupcin y actualizacin duty-ciclo

Configuracin para fPWM = 12800Hz

En la imagen anterior la frecuencia pwm es de 12.8KHz, y ya que se tiene 128 la seal


senoidal ser de 100Hz.

Seal filtrada

Jonathan Seminario Pgina 69


XMEGA

Seal filtrada y seal pwm

Seal filtrada y seal pwm

Jonathan Seminario Pgina 70

You might also like